如何通过命令行验证 SSL 指纹?(wget,卷曲,...)

36 security ssl wget curl

使用命令行网站下载器,例如wgetcurl或任何其他...在脚本中...

我有一个网站的 SHA-1 和 SHA-256 证书指纹。由于安全问题 ( 1 ) ( 2 ),我不想使用公共 SSL 证书颁发机构系统。指纹必须是硬编码的。

wget 之类的应用程序可以检查 SSL 指纹吗?

wget 没有这样的功能。( 3 )

使用wget --ca-certificatecurl --cacert我将不得不运行我自己的本地证书颁发机构,我想阻止这种情况,因为这会增加很多复杂性。这也是非常困难的,以前没有人这样做过。( 4 )

没有任何工具,例如
download --tlsv1 --serial-number xx:yy:zz --fingerprint xxyyzz https://site.com

解决方案当然不能受到 TOCTOU 的攻击。( 5 )MITM可以让openssl客户端请求返回有效指纹并篡改以下wget请求。

小智 33

来源

安装所需软件:

apt-get install ca-certificates curl
Run Code Online (Sandbox Code Playgroud)

下载公共 SSL 证书:

openssl s_client -connect torproject.org:443 -CAfile /usr/share/ca-certificates/mozilla/DigiCert_Assured_ID_Root_CA.crt >./x.cert </dev/null
Run Code Online (Sandbox Code Playgroud)

或更好:

echo -n | openssl s_client -connect torproject.org:443 -CAfile /usr/share/ca-certificates/mozilla/DigiCert_Assured_ID_Root_CA.crt | sed -ne '/-BEGIN CERTIFICATE-/,/-END CERTIFICATE-/p' > ./torproject.pem
Run Code Online (Sandbox Code Playgroud)

获取 SHA-1 指纹:

openssl x509 -noout -in torproject.pem -fingerprint -sha1
Run Code Online (Sandbox Code Playgroud)

获取 SHA-256 指纹:

openssl x509 -noout -in torproject.pem -fingerprint -sha256
Run Code Online (Sandbox Code Playgroud)

手动比较 SHA-1 和 SHA-256 指纹与torproject.org FAQ: SSL

.
Run Code Online (Sandbox Code Playgroud)

可选地使 ca 证书对测试目的无用。在这里使用curl,但是wget有一个错误Bug并且无论如何都使用 ca 文件。

sudo mv /usr/share/ca-certificates /usr/share/ca-certificates_
Run Code Online (Sandbox Code Playgroud)

使用 curl 和固定证书下载:

curl --cacert ./torproject.pem https://check.torproject.org/ > check.html
Run Code Online (Sandbox Code Playgroud)


小智 12

在 tcsh 中:

echo | openssl s_client -connect host.example.com:443 |& openssl x509 -fingerprint -noout
Run Code Online (Sandbox Code Playgroud)

  • 适用于`zsh`,也适用于bash (3认同)

run*_*gel 10

这也足够了:

openssl x509 -fingerprint -in server.crt
Run Code Online (Sandbox Code Playgroud)