博客在使用Cloudfare提供的cdn服务后,能够实现客户端到服务器之间的加密传输,然鹅由于在Vultr上没有ssl证书,所以仅仅是在客户端到cdn服务器上的加密传输,为了能够实现真﹒端到端加密,就需要为源服务器申请ssl证书,我在神代绮凛博客上找到了使用acme.sh脚本申请泛域名ssl证书的方法,并尝试部署一蛤。
附上原文链接https://moe.best/tutorial/acme-le-wc.html
和文中所采用的方法类似,我使用cloudflare提供的API添加txt记录完成验证,大体步骤文中也讲得挺详细,这里就不啰嗦了。
CloudFare可以使用Global API Key或着Cloudflare API token方式添加记录暂时不知道这两者之间的区别( ̄▽ ̄)~*,于是就选择Global API Key。关于Global API Key的获取方式,只要登陆Cloudflare账号后点击个人资料页,再选择导航栏上的API令牌选项然后选择Global API Key并查看就可以看到API密钥了,先把它复制下来。
fine,看样子新版本已经将ZeroSSL作为默认的CA了,具体申请步骤如下
以Cloudfare为例,大致申请步骤如下
1.添加环境变量
略
其他解析商(cloudflare, dnspod, cloudxns, godaddy 以及 ovh 等)的环境变量名和API用法详见https://github.com/acmesh-official/acme.sh/wiki/dnsapi
2.使用邮箱注册zerossl账号
将[email protected]换成你的邮箱 acme.sh --register-account -m [email protected] --server zerossl
在输入命令后,还将生成你的账户指纹。
(当然,如果你已经拥有zerossl账号,你同时还可以用EAB证书来注册acme账号。详见:https://github.com/acmesh-official/acme.sh/wiki/ZeroSSL.com-CA)
3.生成证书
将example.com替换成你的域名acme.sh --server zerossl --issue -d example.com --dns dns_cf
差不多一杯茶的时间,证书就声称完毕了,此时你能看到生成证书的路径
与此同时,之前添加的环境变量也写入到了account.conf文件中,如果不清楚account.conf在哪里,可以输入命令find / -name account.conf
cat account.conf
#LOG_FILE="/root/.acme.sh/acme.sh.log"
#LOG_LEVEL=1
#AUTO_UPGRADE="1"
#NO_TIMESTAMP=1
UPGRADE_HASH='xxxxxxxx'
#之前你所添加的环境变量被写入了这里
SAVED_CF_Key='your key'
SAVED_CF_Email='your email'
USER_PATH='/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/root/bin'
4.安装Copy 证书
不要使用默认生成的证书目录,官方给出的解释是/.acm.sh/目录下的文件都是内部使用,如果让nginx\apache的配置文件使用里面的文件,目录结构可能会发生变化。于是需要将之前生成的证书文件都copy到其他目录,当然最好是nginx\apache目录下。
具体命令可见:https://github.com/Neilpang/acme.sh/wiki/%E8%AF%B4%E6%98%8E#3-copy%E5%AE%89%E8%A3%85-%E8%AF%81%E4%B9%A6
5.修改nginx配置
最后别忘了修改你的web服务器配置,以nginx为例
#开启443端口
listen 443 ssl http2 default_server;
#ssl on;
ssl_certificate "cer.pem's path you set at step 4";
ssl_certificate_key "key.pem's path you set at step4";
#客户端可重用会话缓存中ssl参数的过期时间
ssl_session_timeout 10m;
#制定启动的加密协议
ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
#选择加密的套件(不同浏览器支持的加密套件或顺序可能不相同)
ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:ECDHE:ECDH:AES:HIGH:!NULL:!aNULL:!MD5:!ADH:!RC4;
#开启时则在协商加密算法时,优先选择服务端的加密算法而不是客户端
ssl_prefer_server_ciphers on;
以上参数的含义具体参考https://blog.csdn.net/mr_raptor/article/details/51854746
在修改完配置文件并重启你的服务器后,此时使用netstat -ntpl|grep 443
命令应该可以看到443端口已经被打开了
此时再将我们Cloudflare的SSL/TLS加密方式设置为完全(也可以设置为严格)
OK!现在就能实现端到端加密啦。