生成https_免費證書

HTTPS證書配置

首先採用的是Let’s Encrypt頒發的免費證書,其次我是使用acme.sh配置的,這裏主要說一下acme.sh的安裝以及使用。

1.安裝
官方方法使用如下命令即可:

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

要麼:

wget -O  -  https://get.acme.sh | SH

或者,從git安裝

git clone https://github.com/Neilpang/acme.sh.git
cd ./acme.sh

解壓之後進入目錄執行如下命令:

./acme.sh --install

安裝成功後,acme.sh腳本在~/.acme.sh目錄中,所以如果想直接執行腳本,那麼需要設置環境變量,後文中因爲配置過了環境變量所以直接執行了acme.sh腳本。

2.配置
安裝成功後,我們需要創建一個存放Let’s Encrypt驗證文件的文件夾(最好不要存放到root目錄中),比如我們創建如下目錄:

mkdir -p /www/acme-challenges

因爲Let’s Encrypt在驗證時候,會訪問下URLhttp://csdn.net/.well-known/acme-challenge(csdn.net爲我的域名,後面配置中如果您要使用請替換爲您的域名)進行驗證,所以我們要配置nginx(因爲我使用的是nginx,所以這裏僅說一下nginx)使該URL代理我們剛纔創建的目錄,配置如下:

server {
    listen       80;
    server_name  csdn.net www.csdn.net;

    ...

    # 訪問http時轉到https
    location / {
       return 301 https://$http_host$request_uri;
    }

    # 用於驗證服務, acme 會自動將認證 token 放在此文件夾下面, 並通過http請求來驗證
    location ^~ /.well-known/acme-challenge/ {
      alias /www/acme-challenges/.well-known/acme-challenge/;
      #添加 $uri/ $uri.html 顯示index.html
      try_files $uri $uri/ $uri.html =404;
    }

    # 和上面的效果相同
    #location ^~ /.well-known/acme-challenge/ {
    #   root /www/acme-challenges/;
    #   try_files $uri $uri/ $uri.html =404;
    #}
    ...
}

3.證書生成
我採用的是http方式,執行命令如下:

acme.sh --issue -d csdn.net -d www.csdn.net --webroot /www/acme-challenges/

通過-d添加多個域名,如果需要看日誌可以追加–debug或者–log參數。
證書生成成功後,會出現在~/.acme.sh/csdn.net/目錄下,我們可以把它們複製出來,比如我複製到了/etc/nginx/ssl/csdn.net目錄中,然後執行如下腳本進行安裝證書:

acme.sh --installcert  -d csdn.net --keypath   /etc/nginx/ssl/csdn.net/csdn.net.key --fullchainpath /etc/nginx/ssl/csdn.net/csdn.net.cer --reloadcmd  "service nginx force-reload"

4.配置證書
創建的nginx配置文件,添加如下內容(其中配置需要將域名和文件目錄替換爲您使用的名稱和路徑):

# HTTPS server
#
server {
    listen       443 ssl;
    server_name  csdn.net www.csdn.net;

    ## Strong SSL Security
    ## https://raymii.org/s/tutorials/Strong_SSL_Security_On_nginx.html & https://cipherli.st/
    ssl on;
    ssl_certificate /etc/nginx/ssl/csdn.net/csdn.net.cer;
    ssl_certificate_key /etc/nginx/ssl/csdn.net/csdn.net.key;

    # Backwards compatible ciphers to retain compatibility with Java IDEs
    ssl_ciphers "ECDHE-RSA-AES256-GCM-SHA384:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-RSA-AES256-SHA384:ECDHE-RSA-AES128-SHA256:ECDHE-RSA-AES256-SHA:ECDHE-RSA-AES128-SHA:ECDHE-RSA-DES-CBC3-SHA:AES256-GCM-SHA384:AES128-GCM-SHA256:AES256-SHA256:AES128-SHA256:AES256-SHA:AES128-SHA:DES-CBC3-SHA:!aNULL:!eNULL:!EXPORT:!DES:!MD5:!PSK:!RC4";
    ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
    ssl_prefer_server_ciphers on;
    ssl_session_cache shared:SSL:50m;
    ssl_session_timeout 1d;

    # 根證書 + 中間證書, acme.sh 會自動生成一個 fullchain.cer,
    # 比如 /root/.acme.sh/csdn.net/fullchain.cer
    # 將其拷貝到 /etc/nginx/ssl/csdn.net/wangchao_im_fullchain.cer
    ssl_trusted_certificate    /etc/nginx/ssl/csdn.net/wangchao_im_fullchain.cer;

    ssl_stapling               on;
    ssl_stapling_verify        on;

    location / {
       # root   /usr/share/nginx/html;
       # index  index.html index.htm;
       # 需要替換爲自己的服務
       proxy_pass  http://127.0.0.1:4000;
    }

    ## Don't show the nginx version number, a security best practice
    server_tokens off;
}

配置成功後重啓nginx就可以了。

目前由於acme協議和letsencrypt CA都在頻繁的更新,因此acme.sh也經常更新以保持同步,我們可以設置自動更新,命令如下:

acme.sh  --upgrade  --auto-upgrade

如果需要關閉自動更新,執行如下命令:

acme.sh --upgrade  --auto-upgrade  0
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章