安裝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