Openssl

openssl:強制不使用預設 CA 證書,以驗證私有簽名證書

  • June 25, 2021

我想驗證我的網路伺服器是否使用我的自簽名證書正確配置。網路伺服器也有一些定期購買的 CA 簽名證書。

我面臨的挑戰是我無法禁用正常的內置 CA 證書。即使在測試我的自簽名證書時cnn.com也可以?!?

openssl s_client -CAfile my.pem -CApath /dev/null -cert my.pem -connect cnn.com:443
[...]
Verify return code: 0 (ok)

如果 Web 伺服器上未安裝匹配的自簽名證書,我該如何openssl拋出錯誤?

s_client(1ssl)手冊頁:

s_client 實用程序是一個測試工具,旨在在任何證書驗證錯誤後繼續握手。結果,它將接受對等方發送的任何證書鏈(可信或不可信)。非測試應用程序不應這樣做,因為這會使它們容易受到 MITM 攻擊。可以使用 -verify_return_error 選項更改此行為:然後返回任何驗證錯誤以中止握手。

因此,您需要將-verify_return_error選項添加到命令行以實際擷取證書驗證錯誤。

或者,您可以使用此 shell 函式以人類可讀的形式直接查看任何 TLS 伺服器的證書資訊:

tlscert() {
   openssl s_client -CApath /dev/null -connect "$@" </dev/null 2>/dev/null \
       | sed -n '/-----BEGIN CERTIFICATE-----/,/-----END CERTIFICATE-----/p' \
       | openssl x509 -noout -text -certopt no_pubkey,no_sigdump,no_header,ext_parse \
           -nameopt multiline,show_type
}

將此添加到您的.bashrc或類似的,註銷和登錄,然後執行例如tlscert cnn.com:443。如果遠端伺服器使用 StartTLS,您仍然可以使用此命令,例如tlscert imap.domain.example:143 -starttls imap.

注意:-starttls選項必須參數之後hostname:port

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