步骤一. 安装acme命令
# 安装acme
curl https://get.acme.sh | sh
# 重新载入bash
source ~/.bashrc
# 试试在终端输入acme.sh命令
步骤二. 使用acme申请Let's Encrypt
的ssl证书
注意:
Let's Encrypt
的证书只有90天的有效期,到期了需要重新申请,这部分acme已经帮你做了。acme在安装的时候往crontab
增加了一行每天执行的命令,可以使用crontab -l
查看。
acme.sh --issue -d hqqsk8.com -w /data/word-assistant/html
申请成功的话在终端上最后会打印出几个东西,申请的证书就在.acme.sh
隐藏文件夹里
...
...
-----END CERTIFICATE-----
[Wed Oct 10 15:22:36 UTC 2018] Your cert is in /root/.acme.sh/hqqsk8.com/hqqsk8.com.cer
[Wed Oct 10 15:22:36 UTC 2018] Your cert key is in /root/.acme.sh/hqqsk8.com/hqqsk8.com.key
[Wed Oct 10 15:22:37 UTC 2018] The intermediate CA cert is in /root/.acme.sh/hqqsk8.com/ca.cer
[Wed Oct 10 15:22:37 UTC 2018] And the full chain certs is there: /root/.acme.sh/hqqsk8.com/fullchain.cer
步骤三. 安装证书 把证书安装在某个路径下面,路径可以自定义,并设置nginx的restart指令
acme.sh --installcert -d hqqsk8.com \
--keypath /root/ssl/hqqsk8.com.key \
--fullchainpath /root/ssl/hqqsk8.com.key.pem \
--reloadcmd "docker restart wordassistant_nginx_1"
步骤四. 生成dhparam.pem文件
openssl dhparam -out /root/ssl/hqqsk8.com.dhparam.pem 2048
至此,证书的部分已经搞定了,接下来要做的就是让nginx使用这些证书
步骤一. 修改nginx.conf文件(/etc/nginx/nginx.conf),在http块内添加两行代码
http {
...
# 新增
ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
ssl_prefer_server_ciphers on;
...
}
步骤二. 在server块内增加如下代码
server {
...
# 监听的端口由80改成443
listen 443 ssl;
# 这边指定的文件都是之前安装证书时的路径
ssl_certificate /root/ssl/hqqsk8.com.key.pem;
ssl_certificate_key /root/ssl/hqqsk8.com.key;
ssl_dhparam /root/ssl/hqqsk8.com.dhparam.pem;
...
}
步骤三. 因为把80端口换成了443端口,所以http请求已经访问不到了,我们需要做一个转发
server {
listen 80;
server_name hqqsk8.com;
return 301 https://hqqsk8.com$request_uri;
}
注意:如果nginx是用容器的话,需要把80端口和443端口都要映射到主机的80和443端口上。