博客在使用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!现在就能实现端到端加密啦。

泛域名证书的有效期为三个月,而acme.sh会贴心地每隔60天自动续期,

Last modification:May 26th, 2022 at 03:31 pm
If you think my article is useful to you, please feel free to appreciate