安装nginx
curl https://get.acme.sh | sh
生成ssl证书,使用webroot方式git
acme.sh --issue -d blog.lomot.cn --webroot /var/www/blog.lomot.cn/
或者可使用nginx方式,具体还有其余的方法参考acme.sh项目的githubgithub
acme.sh --issue -d blog.lomot.cn --nginx
复制证书web
acme.sh --installcert -d blog.lomot.cn --key-file /etc/nginx/ssl/blog.lomot.cn.key --fullchain-file /etc/nginx/ssl/blog.lomot.cn.cer --reloadcmd "service nginx force-reload"
例如网址是blog.lomot.cn 在/etc/nginx/nginx.confapache
server { listen 80; server_name blog.lomot.cn; rewrite ^(.*)$ https://$host$1 permanent; } server { listen 443; server_name blog.lomot.cn; ssl on; ssl_certificate /etc/nginx/ssl/blog.lomot.cn.cer; ssl_certificate_key /etc/nginx/ssl/blog.lomot.cn.key; ssl_session_timeout 5m; ssl_protocols TLSv1 TLSv1.1 TLSv1.2; ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:HIGH:!aNULL:!MD5:!RC4:!DHE; ssl_prefer_server_ciphers on; location / { proxy_set_header X-Real-IP $remote_addr; proxy_set_header Host $http_host; proxy_pass http://localhost:3000; proxy_set_header REMOTE-HOST $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; } }
目前证书在 60 天之后会自动更新, 你无需任何操做. 从此有可能会缩短这个时间, 不过都是自动的, 你不用关心. api
目前因为 acme 协议和 letsencrypt CA 都在频繁的更新, 所以 acme.sh 也常常更新以保持同步.安全
升级 acme.sh 到最新版 :bash
acme.sh --upgrade
若是你不想手动升级, 能够开启自动升级服务器
acme.sh --upgrade --auto-upgrade 以后, acme.sh 就会自动保持更新了.
你也能够随时关闭自动更新:session
acme.sh --upgrade --auto-upgrade 0
使用说明
acme.sh 实现了acme协议,能够从letsencrypt生成免费证书
主要步骤
1 安装acme.sh
2 生成证书
3 copy证书到nginx/apache或者其余服务
4 更新证书
5 更新acme.sh
6 debug
1. 安装acme.sh
curl https://get.acme.sh | sh
安装过程进行了几步
1,把acme.sh安装到用户home目录下,并自动建立一个bash的alias : alias acme.sh=~/.acme.sh/acme.sh
2,自动建立cronjob,每日0点左右自动检测全部的证书,若是有快要过时的证书,须要更新,则会自动更新证书,安装过程当中不会污染已有系统的任何功能和文件,全部的限制都在安装目录中 ~/.acme.sh/
2. 生成证书
acme.sh 实现了 acme 协议支持的全部验证协议. 通常有两种方式验证: http 和 dns 验证.
1. http 方式须要在你的网站根目录下放置一个文件, 来验证你的域名全部权,完成验证. 而后就能够生成证书了.
acme.sh --issue -d mydomain.com -d www.mydomain.com --webroot /home/wwwroot/mydomain.com/
只须要指定域名, 并指定域名所在的网站根目录. acme.sh 会全自动的生成验证文件, 并放到网站的根目录, 而后自动完成验证. 最后会聪明的删除验证文件. 整个过程没有任何反作用.
若是你用的 apache服务器, acme.sh 还能够智能的从 apache的配置中自动完成验证, 你不须要指定网站根目录: acme.sh --issue -d mydomain.com --apache
若是你用的 nginx服务器, 或者反代, acme.sh 还能够智能的从 nginx的配置中自动完成验证, 你不须要指定网站根目录: acme.sh --issue -d mydomain.com --nginx
注意, 不管是 apache 仍是 nginx 模式, acme.sh在完成验证以后, 会恢复到以前的状态, 都不会私自更改你自己的配置. 好处是你不用担忧配置被搞坏, 也有一个缺点, 你须要本身配置 ssl 的配置, 不然只能成功生成证书, 你的网站仍是没法访问https. 可是为了安全, 你仍是本身手动改配置吧.
若是你尚未运行任何 web 服务, 80 端口是空闲的, 那么 acme.sh 还能伪装本身是一个webserver, 临时听在80 端口, 完成验证: acme.sh --issue -d mydomain.com --standalone
2. dns 方式, 在域名上添加一条 txt 解析记录, 验证域名全部权. 这种方式的好处是, 你不须要任何服务器, 不须要任何公网 ip, 只须要 dns 的解析记录便可完成验证. 坏处是,若是不一样时配置 Automatic DNS API,使用这种方式 acme.sh 将没法自动更新证书,每次都须要手动再次从新解析验证域名全部权。 acme.sh --issue --dns -d mydomain.com 而后, acme.sh 会生成相应的解析记录显示出来, 你只须要在你的域名管理面板中添加这条 txt 记录便可. 等待解析完成以后, 从新生成证书: acme.sh --renew -d mydomain.com 注意第二次这里用的是 --renew dns 方式的真正强大之处在于可使用域名解析商提供的 api 自动添加 txt 记录完成验证. acme.sh 目前支持 cloudflare, dnspod, cloudxns, godaddy 以及 ovh 等数十种解析商的自动集成. 以 dnspod 为例, 你须要先登陆到 dnspod 帐号, 生成你的 api id 和 api key, 都是免费的. 而后: export DP_Id="1234" export DP_Key="sADDsdasdgdsf" acme.sh --issue --dns dns_dp -d aa.com -d www.aa.com 证书就会自动生成了. 这里给出的 api id 和 api key 会被自动记录下来, 未来你在使用 dnspod api 的时候, 就不须要再次指定了. 直接生成就行了: acme.sh --issue -d mydomain2.com --dns dns_dp 更详细的 api 用法: https://github.com/Neilpang/acme.sh/blob/master/dnsapi/README.md 3. copy/安装 证书 前面证书生成之后, 接下来须要把证书 copy 到真正须要用它的地方. 注意, 默认生成的证书都放在安装目录下: ~/.acme.sh/, 请不要直接使用此目录下的文件, 例如: 不要直接让 nginx/apache 的配置文件使用这下面的文件. 这里面的文件都是内部使用, 并且目录结构可能会变化. 正确的使用方法是使用 --installcert 命令,并指定目标位置, 而后证书文件会被copy到相应的位置, 例如: acme.sh --installcert -d <domain>.com \ --key-file /etc/nginx/ssl/<domain>.key \ --fullchain-file /etc/nginx/ssl/fullchain.cer \ --reloadcmd "service nginx force-reload" (一个小提醒, 这里用的是 service nginx force-reload, 不是 service nginx reload, 据测试, reload 并不会从新加载证书, 因此用的 force-reload) Nginx 的配置 ssl_certificate 使用 /etc/nginx/ssl/fullchain.cer ,而非 /etc/nginx/ssl/<domain>.cer ,不然 SSL Labs 的测试会报 Chain issues Incomplete 错误。 --installcert命令能够携带不少参数, 来指定目标文件. 而且能够指定 reloadcmd, 当证书更新之后, reloadcmd会被自动调用,让服务器生效. 详细参数请参考: https://github.com/Neilpang/acme.sh#3-install-the-issued-cert-to-apachenginx-etc 值得注意的是, 这里指定的全部参数都会被自动记录下来, 并在未来证书自动更新之后, 被再次自动调用. 4. 更新证书 目前证书在 60 天之后会自动更新, 你无需任何操做. 从此有可能会缩短这个时间, 不过都是自动的, 你不用关心. 5. 更新 acme.sh 目前因为 acme 协议和 letsencrypt CA 都在频繁的更新, 所以 acme.sh 也常常更新以保持同步. 升级 acme.sh 到最新版 : acme.sh --upgrade 若是你不想手动升级, 能够开启自动升级: acme.sh --upgrade --auto-upgrade 以后, acme.sh 就会自动保持更新了. 你也能够随时关闭自动更新: acme.sh --upgrade --auto-upgrade 0 6. debug 若是出错, 请添加 debug log: acme.sh --issue ..... --debug 或者: acme.sh --issue ..... --debug 2 请参考: https://github.com/Neilpang/acme.sh/wiki/How-to-debug-acme.sh