傳統的HTTP協議傳輸的是明文信息,這就致使了必定的安全風險。而HTTPS則解決了這一問題,HTTPS在HTTP協議的基礎上增長了SSL/TLS,用於經過證書來驗證服務器的身份,而且爲客戶端和服務器之間的通訊提供加密服務。如今大部分的網站都開始使用HTTPS協議提供服務。html
CA,Certificate Authority,證書頒發機構,負責發放和管理數字證書的權威機構,並作爲受信任的第三方,承擔公鑰體系中公鑰的合法性驗證。CA制定政策和具體步驟來驗證、識別用戶身份,並對用戶證書進行簽名,以確保證書持有者的身份和公鑰的擁有權。node
根據使用環境的不一樣,SSL證書可分爲如下幾種:nginx
SSL使用的是公鑰私鑰體系,因此向CA申請SSL證書前必須先生成一個私鑰文件(.key)並使用該私鑰簽署一個證書籤署請求文件(.crs),證書籤署請求文件包含申請者的DN(Distinguished Name,標識名)和公鑰信息。申請者將該文件提交給CA後,CA會向申請者返回一個證書文件(.crt)。算法
可以使用openssl來生成私鑰和證書籤署請求文件,命令以下:shell
[root@localhost ~]# openssl req -new -newkey rsa:2048 -sha256 -nodes -out abc.csr -keyout abc.key -subj '/C=CN/ST=fujian/L=fuzhou/O=abc Inc./OU=Web/CN=abc.com'
命令詳解:生成一個新的RSA密鑰並輸出abc.csr和abc.key兩個文件。瀏覽器
命令執行後會在當前目錄下生成abc.csr和abc.key兩個文件。其中的abc.csr就能夠提交給CA以申請SSL證書,CA經過驗證後會提供給咱們證書文件。緩存
因爲這裏的域名abc.com沒有進行域名解析,CA是沒法驗證這個域名的,因此也沒法爲它頒發證書。爲了解決這種狀況,咱們可使用openssl本身頒發一張證書,固然,這張證書是沒有通過認證的,使用時就會發現問題了。運行如下命令:安全
[root@localhost nginx]# openssl req -new -newkey rsa:2048 -sha256 -nodes -x509 -days 365 -out abc.crt -keyout abc.key -subj '/C=CN/ST=fujian/L=fuzhou/O=abc Inc./OU=Web/CN=abc.com'
此時,當前目錄下會生成abc.crt和abc.key兩個文件。服務器
Nginx的配置文件中已經有一段關於HTTPS的配置,內容以下:session
# HTTPS server # #server { # listen 443 ssl; # server_name localhost; # ssl_certificate cert.pem; # ssl_certificate_key cert.key; # ssl_session_cache shared:SSL:1m; # ssl_session_timeout 5m; # ssl_ciphers HIGH:!aNULL:!MD5; # ssl_prefer_server_ciphers on; # location / { # root html; # index index.html index.htm; # } #}
詳解:
還能夠添加如下設置:
這裏爲這臺運行Nginx的主機的www.abc.com配置了HTTPS,並在客戶端hosts文件中作了本地解析,而後訪問https://www.abc.com:
安裝的ESET殺毒軟件跳出了安全警告,不信任的證書。
由於SSL證書沒有通過CA的認證,因此火狐也阻止了。可是已經出現了證書的驗證信息,就說明Nginx的HTTPS配置成功。