Openssl
openssl:強制不使用預設 CA 證書,以驗證私有簽名證書
我想驗證我的網路伺服器是否使用我的自簽名證書正確配置。網路伺服器也有一些定期購買的 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
。