[网摘]Linux下使用acme.sh 配置https 免费证书

摘自网络原帖链接https://www.cnblogs.com/-mrl/p/10601817.html

acme.sh

简单来说acme.sh 实现了 acme 协议, 可以从 let‘s encrypt 生成免费的证书。
acme.sh 有以下特点:
一个纯粹用ShellUnix shell)语言编写的ACME协议客户端。
完整的ACME协议实施。 支持ACME v1ACME v2 支持ACME v2通配符证书
简单,功能强大且易于使用。你只需要3分钟就可以学习它。
Let’s Encrypt免费证书客户端最简单的shell脚本。
纯粹用Shell编写,不依赖于python或官方的Let’s Encrypt客户端。
只需一个脚本即可自动颁发,续订和安装证书。 不需要root/sudoer访问权限。
支持在Docker内使用,支持IPv6

 

github链接:https://github.com/Neilpang/acme.sh

 

本文记录了我在把网站从HTTP升级到 HTTPS ,申请和安装SSL证书路上踩过的几个坑。

安装环境:
操作系统:centos 7 X64
SSL证书来源:Let’s Encrypt
安装用脚本:acme.sh
服务器:nginx
域名:chandao.test.com

1.安装acme.sh

curl https://get.acme.sh | sh

2.安装后的配置
acme.sh 安装到你的 home 目录下:~/.acme.sh/并创建 一个 bash alias, 方便你的使用:

alias acme.sh=~/.acme.sh/acme.shecho

安装过程中会自动为你创建 cronjob, 每天 0:00 点自动检测所有的证书, 如果快过期了, 需要更新, 则会自动更新证书(可执行crontab -l 查看)

00

3.申请证书
acme.sh 实现了 acme 协议支持的所有验证协议. 一般有两种方式验证: http dns 验证(本文不提供dns方式申请,dns手动模式,不能自动更新证书。在续订证书时,您必须手动向域中添加新的txt记录。)

HTTP 方式方法如下:

acme.sh --issue -d chandao.test.com --webroot /data/wwwroot/chandao

只需要指定域名, 并指定域名所在的网站根目录【命令中/data/wwwroot/chandao为域名的根目录路径】. acme.sh 会全自动的生成验证文件, 并放到网站的根目录, 然后自动完成验证. 最后会聪明的删除验证文件. 整个过程没有任何副作用.

4.证书的安装
注意, 默认生成的证书都放在安装目录下: ~/.acme.sh/, 请不要直接使用此目录下的文件,
例如: 不要直接让 nginx/apache 的配置文件使用这下面的文件.
这里面的文件都是内部使用, 而且目录结构可能会变化.

正确的使用方法是使用 –installcert 命令,并指定目标位置, 然后证书文件会被copy到相应的位置,

默认情况下,证书将每60天更新一次(可配置)。更新证书后,将通过以下命令自动重新加载Apache / Nginx服务:service apache2 force-reloadservice nginx force-reload

请注意:reloadcmd非常重要。证书可以自动续订,但是,如果没有正确的“reloadcmd”,证书可能无法刷新到您的服务器(如nginxapache),那么您的网站将无法在60天内显示续订证书。

nginx示例1:

acme.sh --installcert -d chandao.test.com --key-file /usr/local/nginx/ssl_cert/test.com/chandao.test.com.key --fullchain-file /usr/local/nginx/ssl_cert/test.com/chandao.test.com.cer --reloadcmd "service nginx force-reload"

nginx示例2

acme.sh --install-cert -d chandao.test.com \--key-file /usr/local/nginx/ssl_cert/test.com/chandao.test.com.key \--fullchain-file /usr/local/nginx/ssl_cert/test.com/chandao.test.com.cer \--reloadcmd      "service nginx force-reload"

apache示例:

acme.sh --install-cert -d chandao.test.com \--cert-file /usr/local/nginx/ssl_cert/test.com/chandao.test.com.key \--key-file /path/to/keyfile/in/apache/key.pem \--fullchain-file /usr/local/nginx/ssl_cert/test.com/chandao.test.com.cer \--reloadcmd      "service apache2 force-reload"

 

附带完成前面1-4步骤的截图:

5. Nginx/Tengine服务器安装SSL证书

Nginx 配置HttpHttps共存

 

listen 80; #如果硬性要求全部走https协议,这一行去除listen server_name chandao.test.com;#ssl on; #ssl_certificate ssl_certificate_key #ssl#nginx ssl_protocols TLSv1 TLSv1.ssl_ciphers EECDHssl_prefer_server_ciphers on;ssl_session_timeout 10m;#ssl_session_cache builtin:#OCSP Stapling ssl_stapling on;#OCSP Stapling ssl_stapling_verify on; 

 

完整例子:

 

server {  listen   listen         server_name chandao.test.com;  access_log off;  index index.html index.htm index.php;  root   #ssl on;   #  ssl_certificate     ssl_certificate_key    #ssl  #nginx   ssl_protocols TLSv1 TLSv1.  ssl_ciphers EECDH  ssl_prefer_server_ciphers on;  ssl_session_timeout 10m;  #  ssl_session_cache builtin:  #OCSP Stapling   ssl_stapling on;  #OCSP Stapling   ssl_stapling_verify on;   #error_page   #error_page   location     #fastcgi_pass remote_php_ip:    fastcgi_pass unix:    fastcgi_index index.php;    include fastcgi.conf;  }  location     expires 30d;    access_log off;  }  location     expires 7d;    access_log off;  }  location     deny all;  }}

 

 

 

6.重启nginx
保存退出后,通过nginx -t来检查配置文件是否正确,有错误的话改之即可。配置文件检测正确之后,通过service nginx force-reload来重载配置文件。

nginx -tservice nginx force

7. 更新 acme.sh
目前由于 acme 协议和 letsencrypt CA 都在频繁的更新, 因此 acme.sh 也经常更新以保持同步.

升级 acme.sh 到最新版 :

如果你不想手动升级, 可以开启自动升级:

acme.sh --upgrade --auto-upgrade

之后, acme.sh 就会自动保持更新了.

你也可以随时关闭自动更新:

acme.sh --upgrade --auto-upgrade 0

6. 出错怎么办:
如果出错, 请添加 debug log

acme.sh --issue ..... --debug 

或者:

acme.sh --issue ..... --debug 2

查看证书列表

acme.sh –list
删除证书

acme.sh remove Main_Domain(证书的主域名,上述证书列表中可看见)

8.注意事项:
1、开启后请把所有网站的链接替换为https,尤其是图片链接等。推荐写链接时用//www.test.com而不是https://www.test.com,这种写法会优先使用HTTPS而且不会禁止HTTP
2、记得打开443端口。
3、如果过了一段时间出现了类似NET :: ERR_CERT_AUTHORITY_INVALID的错误,请检查是不是设置了证书链SSLCertificateChainFile
4、安装证书时,–key-file–fullchain-file的参数是你想要把证书安装在的位置,而不是之前申请到的证书的位置。这个位置会在配置nginx时使用到。
5、如果配置参数出错,最好只安装不要再申请。因为申请次数有限制。同一域名,每周最多申请10个证书,每周刷新。
6、域名要写常用的。如果要使用https://www.test.com访问网页,域名选项-d 的参数一定要写www.test.com,如果申请证书和访问的域名不完全一致,访问时会提示不安全访问的网站使用的安全证书域名错误