acme配合nginx验证生成证书
acme.sh 实现了acme协议支持的所有验证方式, 可以从 letsencrypt 生成免费的证书,一般有http和dns验证两种方式。
最常见的就是http中的webroot模式:
acme.sh --issue -d example.com -w /home/wwwroot/example.com
-d指定域名,-w指定网站根目录。
acme.sh 会自动的生成验证文件,并放到网站的根目录,然后自动完成验证,最后会删除验证文件,不会留下任何多余的文件。
如果有时候不方便使用webroot模式,比如我有一个用了nginx做proxy_pass的站,甚至都不存在根目录。acme也提供了使用nginx验证的模式。
生成证书
acme.sh --issue -d example.com --nginx /etc/nginx/conf.d/example.com.conf
-d指定域名,-nginx指定网站的conf,acme.sh就可以从nginx的配置中自动完成验证。生成过程会自动备份你的conf,验证完成后会自动还原,无需担心配置文件被破坏。
验证完成后,会在acme.sh的目录下生成一个以网站命名的文件夹,里面有生成的所有证书文件。
安装证书
生成完成后,就是把证书安装到需要的地方。
不要直接让nginx使用acme.sh/下的文件,这些文件都是内部使用的,而且目录结构可能会变化。
正确的使用方法是使用--install-cert命令,并指定目标位置,然后证书文件会被生成到相应的位置。
acme.sh --install-cert -d example.com \
--key-file /path/to/keyfile/in/nginx/key.pem \
--fullchain-file /path/to/fullchain/nginx/cert.pem \
--reloadcmd "service nginx force-reload"
注意的是nginx配置中ssl_certificate使用的是fullchain-file生成的证书,否则在做ssl安全测试时会提示证书链不完整等问题使网站的评分降级。
此时nginx所需要用到的证书文件都生成到了相应的地方,接下来再修改nginx中的配置文件使用证书即可。
最后
上面生成和安装证书的参数都会被自动记录下来,在将来自动更新证书的时候会自动调用,无需重复手动设置。
_(:3 」∠)_