HTTPS配置全记录
HTTPS配置全記錄
環(huán)境
常見(jiàn)的部署環(huán)境和條件有以下幾種情況組合:
- Apache+自簽名證書
- Apache+免費(fèi)或商業(yè)證書
- Nginx+自簽名證書
- Nginx+免費(fèi)或商業(yè)證書
免費(fèi)證書和商業(yè)證書本質(zhì)上是一樣的,都是可以被系統(tǒng)承認(rèn)的證書,只是申請(qǐng)方式不同而已。
證書
證書結(jié)構(gòu)
配置一個(gè)HTTPS服務(wù)所需要的證書包括幾個(gè)部分:
- Server Key(服務(wù)器私鑰)
- CSR(Certificate Signing Request)
- CRT(X509 Certificate)
創(chuàng)建證書的基本流程是這樣:
- 生成自己的服務(wù)端私鑰
- 輸入基本信息并用私鑰簽名生成CSR
- 提交CSR給證書機(jī)構(gòu)CA(免費(fèi)或商業(yè)證書)簽名生成CRT,或自己做CA簽名生成CRT(自簽名證書)
其中前兩個(gè)步驟都是一樣的,在這里統(tǒng)一說(shuō)明一下。
生成服務(wù)器私鑰:
openssl genrsa -out server.key 4096- ?
輸出的server.key文件就是服務(wù)器私鑰,4096是密鑰長(zhǎng)度,要求不高的話用2048也可。
生成CSR:
openssl req -new -sha256 -key server.key -out yoursite.csr- ?
因?yàn)閟ha1已經(jīng)不安全,所以這里用了sha256,可能太舊的客戶端(比如win98?)會(huì)不支持。
yoursite.csr就是生成的CSR,yoursite建議用你的網(wǎng)站名標(biāo)識(shí)會(huì)比較方便識(shí)別。
然后按提示輸入:
- 國(guó)家
- 省
- 市
- 公司
- 部門
- 通用名(即網(wǎng)站域名,這個(gè)必須準(zhǔn)確,有些商業(yè)證書支持在這里用帶www的域名后簽發(fā)出同時(shí)支持不帶www的域名)
- 密碼(可選,設(shè)置的話以后重啟webserver都需要輸入密碼)
自簽名證書做法
生成CRT:
openssl x509 -req -days 3650 -in yoursite.csr -signkey server.key -out yoursite.crt- ?
其中簽名用的KEY就是自己的服務(wù)端私鑰,所以這是一個(gè)自簽名證書。
有效期為3650天(即十年)。
免費(fèi)證書生成
參見(jiàn)舊文《Let’s HTTPS》。
商業(yè)證書生成
首先找一個(gè)商業(yè)證書機(jī)構(gòu)(CA)或其代理商下一個(gè)證書訂單。
其次是選擇證書類型。
證書類型
商業(yè)證書有很多類型,也有很多的CA可以選擇,不同的CA,不同的類型價(jià)格也不一樣。
常見(jiàn)的CA有:
- VeriSign(Symantec)
- GeoTrust(RapidSSL)
- Comodo
- ……
以上以價(jià)格從高到低排序。除此之外當(dāng)然還有很多,具體可以打開(kāi)你的系統(tǒng)證書列表看看。
需要特別說(shuō)一句的就是:臭名昭著的CNNIC和沃通(WoSign,包括免費(fèi)的StartSSL),已經(jīng)被證明不安全,建議將它們從系統(tǒng)中刪除,并且不要去申請(qǐng)使用它們的證書。
常見(jiàn)的證書類型有三種:
- DV(域名驗(yàn)證)
- OV(組織驗(yàn)證)
- EV(擴(kuò)展驗(yàn)證)
驗(yàn)證級(jí)別從低到高排序,價(jià)格也是如此。
DV證書只驗(yàn)證域名,在最終訪問(wèn)者那邊查看證書時(shí)將不會(huì)包含CSR中的組織信息,只有域名信息,也就是說(shuō)你就算是在CSR里輸入你是GOOGLE,到了客戶端那里也是看不到的。
OV證書除了驗(yàn)證域名還需要驗(yàn)證組織,即你需要提供證據(jù)證明你在CSR里輸入的公司或組織的確是你, 這樣才能在客戶端證書里查看到你的組織信息。
EV證書就要求更高了,通常是金融機(jī)構(gòu)之類的用。
除此之外,證書還有一種區(qū)別:
- 單域名證書
- 多域名證書
- 泛域名證書
一樣是價(jià)格從高到低排序。
單域名證書就是只能用于一個(gè)域名的證書,某些商業(yè)證書可以提供兩個(gè)域名:帶WWW的和不帶WWW的。
多域名證書就是一個(gè)證書可以用于多個(gè)域名,默認(rèn)支持三個(gè)域名,當(dāng)然增加域名需要加錢,但比單獨(dú)買單域名證書要便宜。適用于一個(gè)公司有多個(gè)域名,而且多個(gè)域名部署在一個(gè)服務(wù)器上,使用一個(gè)證書會(huì)比較省事,也比較便宜。
泛域名證書就是一個(gè)證書可以用于一個(gè)域名下的任意多個(gè)子域名。
申請(qǐng)流程
一般申請(qǐng)流程(僅指DV類型)如下:
- 選擇CA或代理商
- 選擇證書類型
- 選擇有效期(以年為單位,一般時(shí)間越長(zhǎng)單價(jià)越便宜)
- 下單付款
- 成交后按服務(wù)商的郵件或文檔開(kāi)始驗(yàn)證域名(以下為一種流程,不同服務(wù)商可能不太一樣)
- 上傳CSR(或用服務(wù)商提供的工具生成,但不推薦)
- 選擇驗(yàn)證方式(EMAIL,文件,DNS等)
- 按相應(yīng)方式操作
- 等待驗(yàn)證
- 取得證書(郵件或從服務(wù)商處自行下載)
其中各驗(yàn)證方式大致如下:
- Email:證書機(jī)構(gòu)向域名注冊(cè)郵箱或域名的webmaster等郵箱(可選)發(fā)送驗(yàn)證郵件
- 文件:在域名的指定路徑下放驗(yàn)證文件供證書機(jī)構(gòu)訪問(wèn)
- DNS:創(chuàng)建指定的DNS TXT記錄供證書機(jī)構(gòu)驗(yàn)證
通過(guò)驗(yàn)證后即可獲得證書。
證書內(nèi)容一般包括:域名的CRT,證書機(jī)構(gòu)的CRT鏈(可能有多個(gè)),根證書CRT(CA的證書),如果用服務(wù)商的工具生成CSR,還應(yīng)該會(huì)有CSR和KEY。
部署
分別以最常用的Apache和Nginx為例,其它WebServer請(qǐng)參考相關(guān)文檔。
Apache
這里只介紹Apache2(以2.4為例)。
HTTPS的基本配置可以直接套用默認(rèn)配置,只是要改一下證書文件的部分:
SSLEngine on SSLCertificateFile /path_to_ssl/yoursite.crt SSLCertificateKeyFile /path_to_ssl/yoursite.key SSLCertificateChainFile /path_to_ssl/server-ca.crt- ?
其中yoursite.crt和yoursite.key就是前面說(shuō)過(guò)的私鑰和域名證書。
重點(diǎn)說(shuō)一下server-ca.crt,這個(gè)就是前面談到商業(yè)證書時(shí)提到的中間證書鏈(包括CA根證書)。對(duì)于Let’s Encrypt這樣的免費(fèi)證書,這個(gè)就是Let’s Encrypt的證書(見(jiàn)舊文),對(duì)于自簽名證書,這一項(xiàng)可以去掉。
中間證書鏈的生成方法如下:
cat provider.crt provider-parent.crt root.crt > server-ca.crt- ?
很簡(jiǎn)單,就是把那一堆證書串起來(lái)生成一個(gè)證書文件即可,不過(guò)需要注意順序,從最低級(jí)的證書(你的域名證書的上一級(jí))開(kāi)始到最高級(jí)的CA根證書。
Apache從2.2.12開(kāi)始支持SNI,可以為多個(gè)域名的虛擬主機(jī)使用各自獨(dú)立的證書,用法與HTTP虛擬主機(jī)類似,只需要在每個(gè)虛擬主機(jī)配置里加上相應(yīng)的證書配置即可。
需要注意的是:WinXP,JAVA6,Android 2.3等不支持SNI。
最后,如我在去年的舊文里所說(shuō),SSLv2/v3之類的協(xié)議和某些SSL加密算法已經(jīng)不再安全,所以在沒(méi)有特定的兼容性需要的情況下,需要配置禁用這些不安全的選項(xiàng)。
在全局配置(注意,不是單個(gè)虛擬主機(jī)配置里)里加上:
SSLProtocol TLSv1 +TLSv1.1 +TLSv1.2 SSLCipherSuite ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-AES256-GCM-SHA384:!DHE-RSA-AES128-GCM-SHA256:!DHE-DSS-AES128-GCM-SHA256:kEDH+AESGCM:ECDHE-RSA-AES128-SHA256:ECDHE-ECDSA-AES128-SHA256:ECDHE-RSA-AES128-SHA:ECDHE-ECDSA-AES128-SHA:ECDHE-RSA-AES256-SHA384:ECDHE-ECDSA-AES256-SHA384:ECDHE-RSA-AES256-SHA:ECDHE-ECDSA-AES256-SHA:!DHE-RSA-AES128-SHA256:!DHE-RSA-AES128-SHA:!DHE-DSS-AES128-SHA256:!DHE-RSA-AES256-SHA256:!DHE-DSS-AES256-SHA:!DHE-RSA-AES256-SHA:AES128-GCM-SHA256:AES256-GCM-SHA384:AES128-SHA256:AES256-SHA256:AES128-SHA:AES256-SHA:AES:CAMELLIA:DES-CBC3-SHA:!aNULL:!eNULL:!EXPORT:!DES:!RC4:!MD5:!PSK:!aECDH:!EDH-DSS-DES-CBC3-SHA:!EDH-RSA-DES-CBC3-SHA:!KRB5-DES-CBC3-SHA- ?
以上協(xié)議和加密算法都是目前還安全的,并且提供了最大可能的兼容性。未來(lái)如果出現(xiàn)新的安全問(wèn)題,請(qǐng)自行調(diào)整。
Nginx
基本上在舊文里都說(shuō)過(guò)了,這里再總結(jié)一下。
相比Apache的配置,Nginx沒(méi)有單獨(dú)的中間證書鏈項(xiàng)目,所以是把中間證書鏈和域名證書串在一起作為完整的域名證書來(lái)用:
cat yoursite.crt server-ca.crt > new_yoursite.crt- ?
配置HTTPS:
ssl on; ssl_certificate "/path_to_ssl/new_yoursite.crt"; ssl_certificate_key "/path_to_ssl/yoursite.key";- ?
SNI配置見(jiàn)舊文,從略。
全局安全配置:
ssl_protocols TLSv1 TLSv1.1 TLSv1.2; ssl_ciphers ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:!DHE-RSA-AES128-GCM-SHA256:!DHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-AES128-SHA256:ECDHE-RSA-AES128-SHA256:ECDHE-ECDSA-AES128-SHA:ECDHE-RSA-AES256-SHA384:ECDHE-RSA-AES128-SHA:ECDHE-ECDSA-AES256-SHA384:ECDHE-ECDSA-AES256-SHA:ECDHE-RSA-AES256-SHA:!DHE-RSA-AES128-SHA256:!DHE-RSA-AES128-SHA:!DHE-RSA-AES256-SHA256:!DHE-RSA-AES256-SHA:ECDHE-ECDSA-DES-CBC3-SHA:ECDHE-RSA-DES-CBC3-SHA:!EDH-RSA-DES-CBC3-SHA:AES128-GCM-SHA256:AES256-GCM-SHA384:AES128-SHA256:AES256-SHA256:AES128-SHA:AES256-SHA:DES-CBC3-SHA:!DSS;- ?
配置完成后重啟服務(wù)即可生效。
不論是用Apache還是Nginx,都建議配置完HTTPS以后到SSL Labs驗(yàn)證一下安全性。
總結(jié)
以上是生活随笔為你收集整理的HTTPS配置全记录的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: pacm00是什么型号
- 下一篇: 运筹学上机实验 - 单纯形方法的两阶段法