letsencrypt.sh脚本获取Let’sEncrypt的SSL证书

Let’s Encrypt是个好项目,但是问题是它的客户端太臃肿了,而且到目前为止还只支持Apache,相比之下github上letsencrypt.sh只用sh脚本就实习了足够的功能了。还能适配nginx。但是,它也有它的问题——文档太少且支离破碎,根本没有成体系的手册,只能自己看代码摸索。我也是花了老半天的时间才搞定它。

首先先clone下这个项目

git clone git@github.com:lukas2511/letsencrypt.sh.git

默认有两种办法在ACME服务器上获取授权注册,我用的是配合Nginx的HTTP模式,在nginx的对应的domain server字段下添加以下设置

location /.well-known/acme-challenge {
alias /var/www/letsencrypt;
}

这个在http或者https下都没问题,哪怕你https的证书有问题也可以被识别,但是如果是第一次申请,还是老老实实地放http上省得麻烦

指向的地址是需要用的WELLKNOWN变量地址,在仓库下新建一个config.sh文件,内容如下:

#CA="https://acme-staging.api.letsencrypt.org/directory"
CA="https://acme-v01.api.letsencrypt.org/directory"
WELLKNOWN=/var/www/letsencrypt

第一行的CA地址是调试用的,基本上你搞这个一次是很难搞定的,用调试地址可以有效的避免被远端屏蔽,WELLKNOWN就指向我们刚才nginx中设置的地址

继续新建一个domains.txt,格式类似

aaa.com www.aaa.com b.aaa.com
bbb.com ccc.bbb.com www.bbb.com rr.bbb.com

一行一个域名,每个子域名空一格,接着运行

./letsencrypt.sh -c –config config.sh

你会看到类似这样的输出

+ Signing domains...
+ Generating private key...
+ Generating signing request...
+ Requesting challenge for xxx.com..

这个可能需要很长的时间,切忌不耐心的杀进程,我就是不耐心杀掉了进程,结果接下来就一直给我403了

{“type”:”urn:acme:error:unauthorized”,”detail”:”No registration exists matching provided key”,”status”:403}

出现这样的问题也很好解决,删除根目录下的private_key.pem让它重新生成一个就好,生成好了之后的证书会存放在文件目录的certs目录下

进入以你域名命名的文件夹就可以看到对应的证书了,参考的nginx配置如下,放入对应的server字段中:

ssl_certificate /home/siglud/letsencrypt.sh/certs/xxxxx/fullchain.pem;
ssl_certificate_key /home/siglud/letsencrypt.sh/certs/xxxxx/privkey.pem;

ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
ssl_prefer_server_ciphers on;
ssl_dhparam /etc/ssl/certs/dhparam.pem;
ssl_ciphers 'ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-
AES256-GCM-SHA384:DHE-RSA-AES128-GCM-SHA256:DHE-DSS-AES128-GCM-SHA256:kEDH+AESGCM:ECDHE-RSA-AES128-SHA256:ECDHE-ECDSA-A
ES128-SHA256:ECDHE-RSA-AES128-SHA:ECDHE-ECDSA-AES128-SHA:ECDHE-RSA-AES256-SHA384:ECDHE-ECDSA-AES256-SHA384:ECDHE-RSA-AE
S256-SHA:ECDHE-ECDSA-AES256-SHA:DHE-RSA-AES128-SHA256:DHE-RSA-AES128-SHA:DHE-DSS-AES128-SHA256:DHE-RSA-AES256-SHA256:DH
E-DSS-AES256-SHA:DHE-RSA-AES256-SHA:AES128-GCM-SHA256:AES256-GCM-SHA384:AES128-SHA256:AES256-SHA256:AES128-SHA:AES256-S
HA:AES:CAMELLIA:DES-CBC3-SHA:!aNULL:!eNULL:!EXPORT:!DES:!RC4:!MD5:!PSK:!aECDH:!EDH-DSS-DES-CBC3-SHA:!EDH-RSA-DES-CBC3-S
HA:!KRB5-DES-CBC3-SHA';
ssl_session_timeout 1d;
ssl_session_cache shared:SSL:50m;
ssl_stapling on;
ssl_stapling_verify on;
add_header Strict-Transport-Security max-age=15768000;

其中的dhparam.pem是这样生成的:

sudo openssl dhparam -out /etc/ssl/certs/dhparam.pem 2048

接下来就是让它每月运行一次来保障SSL证书持续有效了,简单的给它做个crontab就完事了

转载需保留链接来源:软件玩家 » letsencrypt.sh脚本获取Let’sEncrypt的SSL证书

赞 (0) 打赏

评论 0

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址

感恩您的支助!

微信扫一扫打赏