Black White Cow
黑白牛的个人博客:分享技术、分享生活。人生苦短(Life is short, you need Python! ),别说废话(Talking is cheap, show me the codes!),新进小技术宅一枚,请多多关照!

Certbot获取免费的Let’s Encrypt证书,并配置Nginx的HTTPS服务,从此你的网站也能以https://运行

第一步我们要安装certbot

先安装一下cerbot的python库:(有的教程说直接安库可以用,但是不知道是不是没配置path,所以我的指令无效,所以我又以yum二进制安装了一遍)

1
pip install certbot

接下来yum安装Certbot软件:

1
2
yum install epel-release
yum install certbot

安装完毕测试一下certbot能用否:

1
certbot --help

如果提示certbot不是有效命令,那么安装还是有问题,你可以参考官方网站:https://certbot.eff.org/lets-encrypt/centosrhel7-nginx
我给的网页是给的running Nginx on centOS 7的,如果和你的VPS的OS不匹配在上面的选项里调整一下即可查看对应的安装方式。

但是不要使用它的自动更新脚本,因为certbot更新证书会调用80端口,必须先停止Nginx再运行,否则会报错提示端口冲突,但他给的脚本并没有自动停止Nginx的功能,更不能再证书更新后自动启用Nginx,所以他给脚本并不适用。

如果显示出了certbot的命令使用方法,如下图所示:

那么恭喜你Certbot已经可以使用了,接下来用一条命令来申请证书:

1
2
3
service nginx stop    #先停止nginx服务避免80端口和443端口被占用
certbot certonly --standalone -d thebwc.tech -d www.thebwc.tech    #以我的站点为例给 thebwc.tech 和 www.thebwc.tech 2个域名申请证书,你们须按自己的域名来申请
service nginx start    #重新开启nginx服务

然后看见Congratulation!字样表示证书已经申请完成了。因为我是之前申请到的,写本篇文章的时候没有截图。在恭喜字样下面还有证书的存放地址:一般文件存放在/etc/letsencrypt/live/这里是你申请的域名/ 里面。

文件夹内有:cert.pem (服务器证书)chain.pem (包含Web浏览器为验证服务器而需要的证书或附加中间证书) fullchain.pem (cert.pem+chain.pem) privkey.pem(证书的私钥) README(说明文档)

接下来我们来设置nginx的HTTPS设置,找到安装文件夹进入/conf/内,打开nginx.conf设置进行修改:

1
vi ./nginx.conf    #我这里默认你在/conf/文件夹下

然后在文件中找到HTTPS server 项,去掉注释(即删除#),进行如下设置:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
    # HTTPS server
    #
    server {
        listen       443 ssl;
        server_name  这里填你的域名;

        ssl_certificate      /etc/letsencrypt/live/这里填你对应的域名文件夹/fullchain.pem;    #这里用中间证书+服务器证书的合体pem文件fullchain
        ssl_certificate_key  /etc/letsencrypt/live/这里填你对应的域名文件夹/privkey.pem;    #这里用私钥
        ssl_protocols TLSv1.2 TLSv1.3;    #协议用TLS1.2和TSL1.3

        ssl_session_cache    shared:SSL:5m;   #共享5M会话缓存
        ssl_session_timeout  5m;    #会话过期时间 5分钟
        ssl_session_tickets off;    #会话票证,开启能节省TLS握手开销

        ssl_ciphers ECDHE-RSA-AES256-GCM-SHA512:DHE-RSA-AES256-GCM-SHA512:ECDHE-RSA-AES256-GCM-SHA384:DHE-RSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-SHA384;    #这里是加密,我用的比较强的加密
        ssl_prefer_server_ciphers  on;    #在TLS握手时启用服务器算法优先,由服务器选择适配算法而非客户端选择
        ssl_ecdh_curve secp384r1;    
        keepalive_timeout 60;    #保持连接超时时间60分

        location / {
            root   这里填写你站点的绝对路径;
            index  index.php index.html index.htm;    #如果不是配置WordPress 可以去掉index.php
        }

到这里就配置完成了,现在你可以使用https://来访问你的站点了。如果你感觉网站速度变慢了,可能是由于使用了强加密,你可以把加密那一行的加密设置内容替换成如下:ECDHE-RSA-AES128-GCM-SHA256:ECDHE:ECDH:AES:HIGH:!NULL:!aNULL:!MD5:!ADH:!RC4;
将加密协议 补上一个 TLSv1.1

最后补充一点,由于之前你可以还设置了http里面的server监听在80端口以普通的http://运行,我们要补充一行设置来rewrite一下,具体设置如下:

找到http里的server,然后加上一条:

1
2
3
4
server {
        listen       80;
        server_name  这里写你的域名;
        rewrite ^(.*) https://$server_name$1 permanent;    #补上这一条就可以rewrite到https://了

到这里就全部设置完成了,只要输入你的域名,就全部导向到https://上了

写在最后,由于证书不是永久有效,所以每隔2个月要手动更新一次:

1
2
3
service nginx stop    #停止nginx进程
certbot renew         #更新证书
service nginx start   #开启nginx服务

或者你可以在crontab任务里加入自动更新任务:

1
2
3
vi /etc/crontab    #打开并修改crontab,按i修改
0 0 0 */2 0 root systemctl stop nginx; /usr/bin/certbot renew; systemctl restart nginx    #在空白处加入该行代码即可
:wq    #修改完按一次ESC 再输入:wq 回车即可

如果你在安装或使用过程中还遇到其他的坑,你可参考CSDN互扯程序写的一篇文章:https://blog.csdn.net/mxw2552261/article/details/79730757

Share

sakura669

Mihoyo save tech otakus

You may also like...

2 Responses

  1. 2020年5月4日

    […] 如果需要使用使用https,请先参考使用certbot获取证书及相关设置:{传送门在此} […]

  2. 2020年5月9日

    […] 3、申请免费的Let’s Encrypt证书,你可以参考我写的如何申请免费证书教程 […]

发表评论

此站点使用Akismet来减少垃圾评论。了解我们如何处理您的评论数据

%d 博主赞过: