一、HTTPS 是什嗎?
根據維基百科的解釋:
超文本傳輸安全性通訊協定(縮寫:HTTPS,英語:Hypertext Transfer Protocol Secure)是超文字傳輸通訊協定 (HTTP)和SSL/TLS的組合,用以提供加密通訊及對網路伺服器身份的評鑑。HTTPS串連經常被用於全球資訊網上的交易支付和公司資訊系統中敏感資訊的傳輸。HTTPS不應與在RFC 2660中定義的安全超文字傳輸通訊協定 (HTTPS)(S-HTTP)相混。
HTTPS 目前已經是所有注重隱私和安全的網站的首選,隨著技術的不斷髮展,HTTPS 網站已不再是大型網站的專利,所有普通的個人站長和部落格均可以自己動手搭建一個安全的加密的網站。
如果一個網站沒有加密,那麼你的所有帳號密碼都是明文傳輸。可想而知,如果涉及到隱私和金融問題,不加密的傳輸是多麼可怕的一件事。
鑒於本部落格的讀者都是接近專業人士,我們不再多費口舌,直接進入正題吧。
二、使用 OpenSSL 產生 SSL Key 和 CSR
由於只有瀏覽器或者系統信賴的 CA 才可以讓所有的訪問者通暢的訪問你的加密網站,而不是出現認證錯誤的提示。所以我們跳過自簽認證的步驟,直接開始簽署第三方可信任的 SSL 憑證吧。
OpenSSL 在 Linux、OS X 等常規的系統下預設都安裝了,因為一些安全問題,一般現在的第三方 SSL 憑證簽發機構都要求起碼 2048 位的 RSA 加密的私密金鑰。
同時,普通的 SSL 憑證認證分兩種形式,一種是 DV(Domain Validated),還有一種是 OV (Organization Validated),前者只需要驗證網域名稱,後者需要驗證你的組織或公司,在安全性方面,肯定是後者要好。
無論你用 DV 還是 OV 產生私密金鑰,都需要填寫一些基本資料,這裡我們假設如下:
網域名稱,也稱為 Common Name,因為特殊的認證不一定是網域名稱:example.com
組織或公司名字(Organization):Example, Inc.
部門(Department):可以不填寫,這裡我們寫 Web Security
城市(City):Beijing
省份(State / Province):Beijing
國家(Country):CN
加密強度:2048 位,如果你的機器效能強勁,也可以選擇 4096 位
按照以上資訊,使用 OpenSSL 產生 key 和 csr 的命令如下
openssl req -new -newkey rsa:2048 -sha256 -nodes -out example_com.csr -keyout example_com.key -subj "/C=CN/ST=Beijing/L=Beijing/O=Example Inc./OU=Web Security/CN=example.com"
PS:如果是泛網域名稱認證,則應該填寫 *.example.com
你可以在系統的任何地方運行這個命令,會自動在目前的目錄產生 example_com.csr 和 example_com.key這兩個檔案
接下來你可以查看一下 example_com.csr,得到類似這麼一長串的文字
-----BEGIN CERTIFICATE REQUEST-----MIICujCCAaICAQAwdTELMAkGA1UEBhMCQ04xEDAOBgNVBAgTB0JlaWppbmcxEDAOBgNVBAcTB0JlaWppbmcxFTATBgNVBAoTDEV4YW1wbGUgSW5jLjEVMBMGA1UECxMM V2ViIFNlY3VyaXR5MRQwEgYDVQQDEwtleGFtcGxlLmNvbTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAPME+nvVCdGN9VWn+vp7JkMoOdpOurYMPvclIbsIiD7mGN982Ocl22O9wCV/4tL6DpTcXfNX+eWd7CNEKT4i+JYGqllqP3/CojhkemiY SF3jwncvP6VoST/HsZeMyNB71XwYnxFCGqSyE3QjxmQ9ae38H2LIpCllfd1l7iVpAX4i2+HvGTHFzb0XnmMLzq4HyVuEIMoYwiZX8hq+kwEAhKpBdfawkOcIRkbOlFew SEjLyHY+nruXutmQx1d7lzZCxut5Sm5At9al0bf5FOaaJylTEwNEpFkP3L29GtoU qg1t9Q8WufIfK9vXqQqwg8J1muK7kksnbYcoPnNgPx36kZsCAwEAAaAAMA0GCSqGSIb3DQEBBQUAA4IBAQCHgIuhpcgrsNwDuW6731/DeVwq2x3ZRqRBuj9/M8oONQen 1QIacBifEMr+Ma+C+wIpt3bHvtXEF8cCAJAR9sQ4Svy7M0w25DwrwaWIjxcf/J8U audL/029CkAuewFCdBILTRAAeDqxsAsUyiBIGTIT+uqi+EpGG4OlyKK/MF13FxDj /oKyrSJDtp1Xr9R7iqGCs/Zl5qWmDaLN7/qxBK6vX2R/HLhOK0aKi1ZQ4cZeP7Mr8EzjDIAko87Nb/aIsFyKrt6Ze3jOF0/vnnpw7pMvhq+folWdTVXddjd9Dpr2x1nc y5hnop4k6kVRXDjQ4OTduQq4P+SzU4hb41GIQEz4 -----END CERTIFICATE REQUEST-----
這個 CSR 檔案就是你需要提交給 SSL 認證機構的,當你的網域名稱或組織通過驗證後,認證機構就會頒發給你一個 example_com.crt
而 example_com.key 是需要用在 Nginx 配置裡和 example_com.crt 配合使用的,需要好好保管,千萬別泄露給任何第三方。
三、Nginx 配置 HTTPS 網站以及增加安全的配置
前面已經提到,你需要提交 CSR 檔案給第三方 SSL 認證機構,通過認證後,他們會頒發給你一個 CRT 檔案,我們命名為 example_com.crt
同時,為了統一,你可以把這三個檔案都移動到 /etc/ssl/private/ 目錄。
然後可以修改 Nginx 設定檔
server { listen80; listen [::]:80 ssl ipv6>on; listen443 ssl; listen [::]:443 ssl ipv6>on; server_name example.com; sslon; ssl_certificate /etc/ssl/private/example_com.crt; ssl_certificate_key /etc/ssl/private/example_com.key;}
檢測設定檔沒問題後重新讀取 Nginx 即可
nginx -t && nginx -s reload
但是這麼做並不安全,預設是 SHA-1 形式,而現在主流的方案應該都避免 SHA-1,為了確保更強的安全性,我們可以採取迪菲-赫爾曼金鑰交換
首先,進入 /etc/ssl/certs 目錄並產生一個 dhparam.pem
cd /etc/ssl/certs openssl dhparam -out dhparam.pem 2048# 如果你的機器效能足夠強大,可以用 4096 位加密
產生完畢後,在 Nginx 的 SSL 配置後面加入
ssl_prefer_server_cipherson; ssl_dhparam /etc/ssl/certs/dhparam.pem; ssl_protocols TLSv1 TLSv1.1 TLSv1.2; ssl_ciphers"EECDH+ECDSA+AESGCM EECDH+aRSA+AESGCM EECDH+ECDSA+SHA384 EECDH+ECDSA+SHA256 EECDH+aRSA+SHA384 EECDH+aRSA+SHA256 EECDH+aRSA+RC4 EECDH EDH+aRSA !aNULL !eNULL !LOW !3DES !MD5 !EXP !PSK !SRP !DSS !RC4"; keepalive_timeout70; ssl_session_cache shared:SSL:10m; ssl_session_timeout10m;
同時,如果是全站 HTTPS 並且不考慮 HTTP 的話,可以加入 HSTS 告訴你的瀏覽器本網站全站加密,並且強制用 HTTPS 訪問
add_header Strict-Transport-Security max-age=63072000; add_header X-Frame-Options DENY; add_header X-Content-Type-Options nosniff;
同時也可以單獨開一個 Nginx 配置,把 HTTP 的訪問請求都用 301 跳轉到 HTTPS
server { listen80; listen [::]:80 ssl ipv6>on; server_name example.com; return301https://example.com$request_uri;}
四、可靠的第三方 SSL 簽發機構
眾所周知,前段時間某 NIC 機構爆出過針對 Google 網域名稱的認證簽發的醜聞,所以可見選擇一家靠譜的第三方 SSL 簽發機構是多麼的重要。
目前一般市面上針對中小站長和企業的 SSL 憑證頒發機構有:
StartSSL
Comodo / 子品牌 Positive SSL
GlobalSign / 子品牌 AlphaSSL
GeoTrust / 子品牌 RapidSSL
其中 Postivie SSL、AlphaSSL、RapidSSL 等都是子品牌,一般都是三級四級認證,所以你會需要增加 CA 憑證鏈到你的 CRT 檔案裡。
以 Comodo Positive SSL 為例,需要串聯 CA 憑證,假設你的網域名稱是 example.com
那麼,串聯的命令是
cat example_com.crt COMODORSADomainValidationSecureServerCA.crt COMODORSAAddTrustCA.crt AddTrustExternalCARoot.crt > example_com.signed.crt
在 Nginx 配置裡使用 example_com.signed.crt 即可
如果是一般常見的 AplhaSSL 泛網域名稱認證,他們是不會發給你 CA 憑證鏈的,那麼在你的 CRT 檔案後面需要加入 AlphaSSL 的 CA 憑證鏈
AlphaSSL Intermediate CA
五、針對企業的 EV SSL
EV SSL,是 Extended Validation 的簡稱,更注重於對企業網站的安全保護以及嚴格的認證。
最明顯的區別就是,通常 EV SSL 顯示都是綠色的條,比如本站的 SSL 憑證就是 EV SSL。
如果貴公司想擷取專業的 EV SSL,可以隨時聯絡我們 info at cat dot net
六、本文參考文獻
Apache + WordPress + SSL 完全指南
OpenSSL CSR Creation
NGINX - PhoenixWiki
轉自:https://s.how/nginx-ssl/
以上就介紹了NGINX 配置 SSL 憑證 + 搭建 HTTPS 網站教程,包括了方面的內容,希望對PHP教程有興趣的朋友有所協助。