超文本传输安全协议(缩写:HTTPS,英语:Hypertext Transfer Protocol Secure)是超文本传输协议和SSL/TLS的组合,用以提供加密通讯及对网络服务器身份的鉴定。HTTPS连接经常被用于万维网上的交易支付和企业信息系统中敏感信息的传输。HTTPS不应与在RFC 2660中定义的安全超文本传输协议(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):BeijingBeijing
(City) :Beijing
國家(Country):CN
加密強度:2048 位,如果你的機器性能強勁,也可以選擇4096 位按照以上信息,使用OpenpenSSL 的命令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.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/HLhOK0aKi1ZQ4cZeP7Mr
8EzjDIAko87Nb/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教程有兴趣的朋友有所帮助。