在 localhost 上實現 SSL 的正確方法
任何人都可以建議一種現代的方式來生成要在本地主機上實現的自簽名證書,這將被 Chrome 和 Mozilla 接受嗎?
我嘗試了 openssl 一代,但是 Mozilla 抱怨發行者不受信任。
Centos 7,nginx
警告:在您進入執行自己的證書頒發機構的雷區之前,您可能需要研究安全隱患!
但是,如果您必須,請繼續閱讀快速而骯髒的 CA,它會在
https://localhost/
沒有警告消息的情況下給您…創建以下文本文件:
# OpenSSL configuration for Root CA [ req ] prompt = no string_mask = default # The size of the keys in bits: default_bits = 2048 distinguished_name = req_distinguished_name x509_extensions = x509_ext [ req_distinguished_name ] # Note that the following are in 'reverse order' to what you'd expect to see. countryName = gb organizationName = Test commonName = Test Root CA [ x509_ext ] basicConstraints=critical,CA:true,pathlen:0 keyUsage=critical,keyCertSign,cRLSign
另存為,
root.cnf
然後使用以下命令生成請求:$ openssl req -x509 -new -keyout root.key -out root.cer -config root.cnf
這將創建您的根 CA 證書 ( ) 和您必須保密
root.cer
的根 CA 私鑰 ( )。root.key
它將提示輸入私鑰的密碼 - 確保您選擇一個強密碼。現在為伺服器證書創建一個配置文件:
# OpenSSL configuration for end-entity cert [ req ] prompt = no string_mask = default # The size of the keys in bits: default_bits = 2048 distinguished_name = req_distinguished_name x509_extensions = x509_ext [ req_distinguished_name ] # Note that the following are in 'reverse order' to what you'd expect to see. countryName = gb organizationName = Test commonName = localhost [ x509_ext ] keyUsage=critical,digitalSignature,keyAgreement subjectAltName = @alt_names # Multiple Alternate Names are possible [alt_names] DNS.1 = localhost # DNS.2 = altName.example.com
將其另存為
server.cnf
並使用以下命令生成請求:openssl req -nodes -new -keyout server.key -out server.csr -config server.cnf
server.key
以上將生成另一個您必須保護的私鑰 ( )。在這種情況下,密鑰不受密碼保護,但您可以通過刪除該-nodes
選項來添加密碼。最後,使用您的新根 CA 和
server.cnf
文件中的副檔名簽署請求(為方便起見):$ openssl x509 -req -in server.csr -CA root.cer -CAkey root.key -set_serial 123 -out server.cer -extfile server.cnf -extensions x509_ext
-set_serial
注意:為選項選擇任何隨機數。它會詢問您在生成根 CA 時輸入的密碼。
server.cer
將生成伺服器證書 ( )。現在,將根 CA 證書 (
root.cer
) 添加到 Firefox 的信任錨儲存,以便瀏覽器信任您的新 CA。使用 OpenSSL 作為臨時 Web 伺服器執行測試:
$ sudo openssl s_server -key server.key -cert server.cer -accept 443 -www
注意:如果您已經在埠 443 上執行伺服器,則可能會出現錯誤。在這種情況下,請停止正在執行的伺服器或通過將結尾更改為(例如)將上面的埠號更改為另一個未使用的埠
-accept 8443 -www
當您使用 Firefox 導航到
https://localhost
(或者https://localhost:8443
如果您更改了上面的埠號)時,您現在應該不會看到任何警告,並且會看到您安裝的 OpenSSL 可以提供的密碼列表。對結果滿意後,將
server.key
和添加server.cer
到您的原始網路伺服器並進行相應配置。