显示已收到的curl证书?

时间:2017-03-06 20:48:01

标签: ssl curl

使用稍微旧版本的curl,我有一个方便的批处理文件:

curl --verbose -k https://%1 2>&1 |grep -E "Connected to|subject|expire"

这将向我显示连接到的IP,以及协商的实际证书的主题和到期日期,即使这不是该域名的正确证书 - 这有时是我们托管的问题(我们主持字面意思)我们的多租户应用程序上有数千个域,大约一半有自己的证书。

具体来说,在grep过滤之前,我会在stderr输出中看到类似的内容:

* Server certificate:
*  subject: CN=academy-fran.chi.v6.pressero.com
*  start date: Feb 22 04:55:00 2017 GMT
*  expire date: May 23 04:55:00 2017 GMT
*  issuer: C=US; O=Let's Encrypt; CN=Let's Encrypt Authority X3
*  SSL certificate verify ok.

今天我不得不在我的机器上重新安装操作系统,并重新安装卷曲。现在版本为7.52.1(x86_64-w64-mingw32);前一个似乎是7.49.1(i686-pc-cygwin)。如果TLS连接成功与否,则无论是否使用-k,Curl都不再显示任何证书信息。

有没有可以将它还给我的选项?

2 个答案:

答案 0 :(得分:1)

对于OSX或Linux上的其他任何人,您可以将其添加到~/.zshrc文件中:

function seecert () {
  nslookup $1
  (openssl s_client -showcerts -servername $1 -connect $1:443 <<< "Q" | openssl x509 -text | grep "DNS After")
}

示例用法,在上述添加之后运行source ~/.zshrc后:

% seecert www.google.com           
Server:     192.168.1.1
Address:    192.168.1.1#53

Non-authoritative answer:
Name:   www.google.com
Address: 172.217.9.68

depth=2 OU = GlobalSign Root CA - R2, O = GlobalSign, CN = GlobalSign
verify return:1
depth=1 C = US, O = Google Trust Services, CN = GTS CA 1O1
verify return:1
depth=0 C = US, ST = California, L = Mountain View, O = Google LLC, CN = www.google.com
verify return:1
DONE

感谢@ross-presserhis answer对该功能的启发。

答案 1 :(得分:0)

这是我的替代批处理文件,使用openssl代替curl:

@echo off
nslookup %1
(openssl s_client -showcerts -servername %1 -connect %1:443 <nul |openssl x509 -text |findstr /I "DNS After") 2>nul

这给了我这个输出:

C:\>seecert www.google.com
Server:         192.168.1.1
Address:        192.168.1.1#53

Non-authoritative answer:
Name:   www.google.com
Address: 172.217.10.228
Name:   www.google.com
Address: 2607:f8b0:4006:813::2004

            Not After : Aug 16 09:49:00 2018 GMT
                DNS:www.google.com