如何让自己的网站免费从HTTP升级为HTTPS?
或许你在一个博客上看到右下角,或者时不时的弹出广告,这种就是运营商劫持,你不想让它这样,这时候,HTTPS的价值就能表现出来了。
HTTPS的好处还有很多,但仅此这一条,就够我们花心思去升级我们的博客系统了。
1 来了解一下什么是Let's Encrypt
Let's Encrypt 就是一个 证书。如果要启用HTTPS,我们就需要从授权机构(以下简称CA) 处获取一个证书,
而从 Let's Encrypt ,我们可以获得网站域名的免费的证书。
2 Certbot 简介
Certbot 是Let's Encrypt官方推荐的获取证书的客户端,可以帮我们自动获取免费的Let's Encrypt 证书。
Certbot 是支持所有 Unix 内核的操作系统的,本文的例子是基于CentOS 7来讲解的。
3 获取免费证书
3-1 安装Certbot客户端
$ yum install certbot # CentOS
$ apt-get update && apt-get install certbot # Ubuntu
$ apk add --no-cache certbot # 用Docker alpine:nginx构建的容器
3-2 获取证书
certbot certonly --webroot -w /var/www/html/awaimai -d awaimai.com -d www.awaimai.com上面的这个命令行会为
awaimai.com和
www.awaimai.com这两个域名生成一个证书。使用
--webroot模式会在
/var/www/awaimai中创建
.well-known文件夹。
此文件夹包含一些验证文件,certbot 会通过访问
example.com/.well-known/acme-challenge验证您的域有没有绑定到此服务器。
证书生成后,我们可以在
/etc/letsencrypt/live/查看目录下域名对应的文件夹,里面存放了指向证书的一些快捷方式。
当然,我们也可以用
--config-dir指定保存证书的路径:
certbot certonly --webroot -w /var/www/html/awaimai -d awaimai.com -d www.awaimai.com --config-dir /etc/nginx/conf.d/certscertbot提供很多的参数可以用,可参考这里
https://certbot.eff.org/docs/using.html#configuration-file
3-3 standalone模式 在大多数情况下,这个命令都可以满足需求。
但是有时我们的某些服务没有根目录,例如一些微服务,这时候使用 --webroot 就走不通了。
certbot 还有另外一种模式
--standalone, 此模式不需要指定网站根目录,它将自动启用服务器的端口443以验证域名的归属。
我们有其他例如nginx的服务,它占用了443端口,我们就要先停止这些服务,在生成证书完毕后,我们再启用这些服务。
certbot certonly --standalone -d example.com -d www.example.com至此,我们的第一证书生成已完成。下一步是配置我们的Web服务器并启用HTTPS。
4 Nginx 配置启用 HTTPS
我的配置是使用的是Nginx 服务器来转发请求,这里贴一下我的Nginx配置。
server {配置主要是监听
listen 80;
server_name www.awaimai.com awaimai.com;
rewrite ^(.*) https://www.awaimai.com$1 permanent;
}
server {
listen 443 ssl;
ssl on;
server_name www.awaimai.com;
root /var/www/html/awaimai;
index index.php;
ssl_certificate /etc/nginx/conf.d/certs/live/awaimai.com/fullchain.pem;
ssl_certificate_key /etc/nginx/conf.d/certs/live/awaimai.com/privkey.pem;
location ~ .php$ {
try_files $uri =404;
fastcgi_pass 127.0.0.1:9000;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
include fastcgi_params;
}
location ~ /.ht {
deny all;
}
}
443端口和启用 SSL,并配置了 SSL 的证书路径(公钥,私钥的路径),通过这些配置,我们就可以成功启用Https了。你打开网站的时候就可以看到标有 安全 的字样。比如:
5 自动更新 SSL 证书
配置完这些后,我们的工作尚未完成。
Let's Encrypt 提供的证书只有90天的有效期,我们必须在这些证书过期之前重新获得它们。有什么办法呢?
certbot 给我们提供了一个很方便的命令,那就是
certbot renew # 使用【默认配置目录】的更新命令
certbot renew --config-dir /etc/nginx/conf.d/certs # 使用【自定义配置目录】的更新命令
使用此命令,他将自动检查系统中的证书并自动更新它们。
注意:更新完成后需要重启Nginx:
nginx -s reload。
我们可以运行这个命令测试一下
certbot renew --dry-run如果运行的时候出现了这个错误:
Attempting to renew cert from /etc/letsencrypt/renewal/api.diamondfsd.com.conf produced an unexpected error: At least one of the required ports is already taken.. Skipping.
这是因为生成证书的时候使用的是
--standalone模式。
这个模式在验证域名时,此模式需要启用端口443。此错误意味着要启用的端口已被占用。
这时候必须先关掉nginx,运行以下命令:
nginx -s stop
运行这个命令,没有报错的话,也就是所有的证书都刷新成功。证书是90天才过期,我们只需要在过期之前执行更新操作就可以了。
当然,这种不用我们每次去更新,我们容易忘记的,可以用linux的定时任务来完成。用 crontab做一个定时任务就可以了
新建了一个文件
certbot-auto-renew-cron,写上 cron 计划:
15 2 * */2 * certbot renew --pre-hook "nginx -s stop" --post-hook "nginx -s start" # standalone模式
15 2 * */2 * certbot renew --post-hook "nginx -s reload" # 非standalone模式
命令的意思就是:每隔 两个月的 凌晨 2:15 执行更新操作。
--pre-hook表示执行更新操作之前要做的事情。
--standalone模式的证书需要停止 nginx 服务,解除端口占用。
--post-hook表示执行更新操作完成后要做的事情,这里就恢复 nginx 服务的启用
最后我们用
crontab来启动这个定时任务
crontab certbot-auto-renew-cron
至此,整个网站升级到HTTPS就完成了。
6 删除证书
删除所有证书:
$ sudo certbot delete
删除指定证书:
$ sudo certbot delete --cert-name example.com
删除指定目录下的指定证书:
$ certbot delete --cert-name example.com --config-d
- 如何免费把网站从http升级到https
- 解决自己的网站403——如何搭建HTTP服务、网站???——最全的大家HTTP服务、网站的教程:第三篇
- 如何通过图片在 HTTPS 网站中获取 HTTP 接口数据
- 如何免费监控网站,当网站不能访问可以给自己发邮件提醒.
- 网站是HTTP?10分钟变成HTTPS!域名免费添加配置SSL证书,变成https//环境
- 让你的网站免费支持 HTTPS 及 Nginx 平滑升级
- 网站 HTTP 升级 HTTPS 完全配置手册
- 如何让自己的网站也能实现HTTPS访问 阿里云 转
- 传奇网站被劫持怎么办?如何设置网站https防劫持 申请免费https和配置教程
- Nginx配置SSL证书(申请免费SSL证书)怎样给网站的"http"加上"s",即网站可以通过"https"访问?
- 免费给自己的网站加 HTTPS
- 网站升级HTTPS,免费SSL证书Let’s Encrypt安装使用教程:Apache和Nginx配置方法
- http免费升级https 攻略(超简单)
- 让你的网站免费支持 HTTPS 及 Nginx 平滑升级
- 网站HTTP升级HTTPS完全配置手册
- 让你的网站免费支持 HTTPS 及 Nginx 平滑升级
- Let’s encrypt 计划为网站提供免费的基本 SSL 证书,以加速互联网从 HTTP 向 HTTPS 过渡。
- 用阿里云的免费 SSL 证书让网站从 HTTP 换成 HTTPS
- Nginx 域名SSL证书配置(网站 http 升级为 https)
- 如何用第三方开源免费软件portecle从https网站上导出SSL的CA证书?