最近在研究微信的小程序,因为接口这些要求HTTPS,加上这个服务器又是刚买的,所以没有配置。现在写篇文章记录一下。
还不了解HTTPS的同学可以看看阮一峰老师写的SSL/TLS协议运行机制的概述
1.获取证书
开始
首先我们打开Let’s Encrypt的官方网站,Let’s Encrypt 中文
就会看到下图,有两个选项,一个是拥有命令行访问权限的,指能通过ssh访问的,另一个是没有命令行访问权限的,指的可能是那些一键式建站的服务商,因为不了解,就不赘述了。
安装 Certbot ACME 客户端
点击页面上的访问 Certbot 官网
然后就会看到下面的页面,在红色的框里选择自己的网站服务器和系统,
我的是nginx和centos7,这里就nginx和centos7作为例子。
接下来就要安装snapd了,这是一个linux上的一个包管理器,啥是snapd.
我的服务器是centos7,直接执行以下命令,如果你的和我不一样,参考如何安装snapd.
- 安装EPEL存储库
sudo yum install epel-release
- 安装snapd
sudo yum install snapd
看到类似如下输出表示安装成功
3.启用管理主snap通信套接字的systemd单元
sudo systemctl enable --now snapd.socket
看到类似如下的输出就算成功
4.启用经典快照支持,输入以下命令以创建之间的符号链接
sudo ln -s /var/lib/snapd/snap /snap
这一步没有任何输出
到这,snapd就安装完成了
安装snapd core和开启自动更新
sudo snap install core; sudo snap refresh core
删除 certbot-auto 和任何 Certbot OS 包
如果您使用 OS 软件包管理器(如apt、dnf或 )安装了任何 Certbot 软件包 yum,则应在安装 Certbot snap 之前将其删除,以确保在运行命令时使用的certbot是 snap,而不是从您的 OS 软件包管理器安装。具体的命令做到这一点取决于您的操作系统,但常见的例子是sudo apt-get remove certbot,sudo dnf remove certbot或sudo yum remove certbot。如果您之前通过 certbot-auto 脚本使用过 Certbot,您还应该按照此处的说明删除其安装。
这个是文档的说明,要求删除之前的,因为我是第一次安装,所以跳过这个。
安装 Certbot
sudo snap install --classic certbot
看到类似如下的输出表示安装成功
准备 Certbot 命令
执行以下指令,确保certbot命令可以运行。
ln -s /snap/bin/certbot /usr/bin/certbot
选择 Certbot的运行方式
获取并安装您的证书...
这个命令是一键式的,运行后就可以自动编辑nginx配置文件,不需要自己的操作了,我选了了后者,只获得证书,自己编辑nginx配置文件
sudo certbot --nginx
或者,只需获得证书
这个是只获得证书,执行命令后获得证书pem文件
sudo certbot certonly --nginx
执行命令后会有三次询问
1.第一次是,输入邮箱(用于紧急续费及安全通知),我输入了,也可以输入c取消
2.第二次是,你必须同意注册到ACME服务器,如果选择no,就会取消,输入y或者yes继续
3.第三个是,问你是否愿意帮忙发展推广cerbot,这个看个人选择,我选择了y,推荐大家也选y
4.然后就会把你nginx的域名都给你列出来,问你要给那些域名配置ssl
这里输入域名的编号,或是空格选择全部,我选择了2,我博客的域名。
然后就会生成pem文件,
测试自动更新
sudo certbot renew --dry-run
看到如下输出表示成功
验证HTTPS是否生效
首先我们先编辑自己网站的conf文件
修改成下面的格式
server {
listen 80;
server_name 你的域名;
rewrite ^/(.*) https://$server_name permanent; #跳转到Https
}
server {
listen 443 ssl;
ssl_certificate /etc/letsencrypt/live/你的域名/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/你的域名/privkey.pem;
ssl_trusted_certificate /etc/letsencrypt/live/你的域名/chain.pem;
ssl_session_timeout 5m;
ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:HIGH:!aNULL:!MD5:!RC4:!DHE;
ssl_prefer_server_ciphers on;
server_name 你的域名;
# 配置http转发
add_header Access-Control-Allow-Origin
https://$server_name;
add_header Access-Control-Allow-Credentials true;
location / {
...
}
}
然后执行,重载配置
nginx -s reload
就可以用https访问你的网站了,就可以看到小锁了
结束了
哈哈哈,写得不好见谅,欢迎指正。