SSL,安全通訊協定 ( Secure Sockets Layer )


ssl-01-1
圖片取自 http://www.nocser.net/digital-certificate/

本文說明在 nginx 環境中安裝 SSL ( HTTPS ) 的簡略步驟,包含 SSH 所需執行的指令

  • HTTPS 所需檔案 example.co.keyexample.co.csrexample.co.crt

  • 檔案生成順序為 .key > .csr > .crt


    example.co 可改為自己的域名名稱或任意名稱



  • 生成 key ( Generate a 2048 bit RSA Key )

  • $ openssl genrsa -des3 -out example.co.key 2048

    -des3: key 包含密碼



  • 生成 csr

  • $ openssl req -new -key example.co.key -out example.co.csr

    -key: 來源檔案


    -out: 輸出檔案



    生成 csr 必須填入的資料


    Country Name			- TW
    State or Province Name - Taipei
    Locality Name - Taipei
    Organization Name - example
    Organizational Unit Name - example
    Common Name - example.co [你的域名]
    Email Address - [你的 email]
    A challenge password -
    An optional company name -


  • example.co.csr 的內容填入 comodo 的欄位

  • example.co.csr 第一行必須是 -----BEGIN CERTIFICATE REQUEST-----,最後一行必須是 -----END CERTIFICATE REQUEST-----



  • comodo 會檢驗 csr 中填入的資料 ( 如上述第三點 ) 後等待驗證 domain name,驗證方法為上傳 txt 檔案或驗證 email,以下以上傳 txt 檔案為例


  • 下載 comodo 提供的 txt 檔案,上傳到需驗證 HTTPS 網址的根目錄,等待 comodo 驗證,驗證時間約一小時內


  • 驗證完畢後下載 zip 解壓縮,打開 .crt 與 .ca-bundle,將 .crt 內容複製,貼到 ca-bundle 內容最上方,存成 ca-bundle.crt


  • ca-bundle.crt 上傳到 /etc/nginx/ssl 後修改 nginx 的 conf 檔案完成 SSL 驗證

  • conf 中需指定 .key 與 .crt 兩個檔案




conf 設定


server {
server_name example.co www.example.co;
location / {
rewrite ^(.*) https://www.example.co$1 permanent;
}
}

server {
listen 443 ssl http2;
listen [::]:443 ssl http2;

server_name example.co;

access_log /var/www/example.co/logs/access.log rt_cache;
error_log /var/www/example.co/logs/error.log;

root /var/www/example.co/htdocs;

index index.php index.html index.htm;

ssl on;
ssl_certificate /etc/nginx/ssl/ca-bundle.crt;
ssl_certificate_key /etc/nginx/ssl/example.co.key;

if ( $http_host = example.co ) {
return 301 https://www.example.co$request_uri;
}

}

nginx 的 conf 檔案設定中,以下兩段說明強制轉 www 的兩種方法


	location / {
rewrite ^(.*) https://www.example.co$1 permanent;
}

	if ( $http_host = example.co ) {
return 301 https://www.example.co$request_uri;
}

若不需要強制轉 www,則第一段的 conf 置換如下,第二段可省略


	return 301 https://$server_name$request_uri;

文章中的設定基於 https://ssls.com


SSL checker https://www.sslshopper.com/ssl-checker.html