利用 acme.sh 獲取網站證書並配置https訪問

 

 

acme.sh 實現了 acme 協議, 能夠從 letsencrypt 生成免費的證書.(https://github.com/Neilpang/acme.sh/wiki/%E8%AF%B4%E6%98%8E)html

主要步驟:nginx

  1. 安裝 acme.sh
  2. 生成證書
  3. copy 證書到 nginx/apache 或者其餘服務
  4. 更新證書
  5. 更新 acme.sh
  6. 出錯怎麼辦, 如何調試

下面詳細介紹.git

 1. 安裝 acme.sh

安裝很簡單, 一個命令:github

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

普通用戶和 root 用戶均可以安裝使用. 安裝過程進行了如下幾步:web

  1. 把 acme.sh 安裝到你的 home 目錄下:
~/.acme.sh/

並建立 一個 bash 的 alias, 方便你的使用: alias acme.sh=~/.acme.sh/acme.shapache

2). 自動爲你建立 cronjob, 天天 0:00 點自動檢測全部的證書, 若是快過時了, 須要更新, 則會自動更新證書.api

更高級的安裝選項請參考: https://github.com/Neilpang/acme.sh/wiki/How-to-install安全

安裝過程不會污染已有的系統任何功能和文件, 全部的修改都限制在安裝目錄中: ~/.acme.sh/bash

 

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

更高級的用法請參考: https://github.com/Neilpang/acme.sh/wiki/How-to-issue-a-cert

2. dns 方式, 在域名上添加一條 txt 解析記錄, 驗證域名全部權.

dns方式實際上是acme.sh經過調用各個域名服務商的api添加TXT記錄驗證全部權這樣的流程,因此須要考慮的是如何讓acme.sh添加記錄後及時生效,默認acme.sh會等待120秒後開始驗證,可是不少DNS解析有120秒每每沒法完成,因此此處建議使用dnspod(https://www.dnspod.cn)

dns 方式的真正強大之處在於可使用域名解析商提供的 api 自動添加 txt 記錄完成驗證.

acme.sh 目前支持 cloudflare, dnspod, cloudxns, godaddy 以及 ovh 等數十種解析商的自動集成.

以 dnspod 爲例, 你須要先登陸到 dnspod 帳號, 生成你的 api id 和 api key, 都是免費的. 而後:

export DP_Id="你建立的api token的id"

export DP_Key="你建立的api token的token"

acme.sh   --issue   --dns dns_dp   -d 你的域名  -d www.你的域名

若是你想爲你的每一個二級域名建立證書 這裏能夠用到泛域名證書 ,將最後一行代碼改成

acme.sh --issue --dns dns_dp -d *.你的域名 -d 你的域名

這樣你全部的二級域名和域名自己都獲取了證書,若是證書獲取成功,會在屏幕上打印出證書存放路徑

在配置Nginx 的配置 ssl_certificate 時使用 fullchain.cer

server {
        listen       443 ssl;
        server_name  localhost;

        location / {
            #代理到那個服務器 這裏http://hz  指的是上面upstream 中的 hz
             proxy_pass http://hz;
             index index.html index.htm;
         }

        ssl_certificate      /root/.acme.sh/*.hz1202.com/fullchain.cer;
        ssl_certificate_key  /root/.acme.sh/*.hz1202.com/*.hz1202.com.key;

        ssl_session_cache    shared:SSL:1m;
        ssl_session_timeout  5m;

        ssl_ciphers  HIGH:!aNULL:!MD5;
        ssl_prefer_server_ciphers  on;
    }
相關文章
相關標籤/搜索