Openssl

在 localhost 上實現 SSL 的正確方法

  • May 26, 2020

任何人都可以建議一種現代的方式來生成要在本地主機上實現的自簽名證書,這將被 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到您的原始網路伺服器並進行相應配置。

引用自:https://unix.stackexchange.com/questions/382786