检查涉及证书链的证书的签发date和到期date

是否可以通过传递域来检查证书链中涉及的证书的签发date和到期日?

我厌倦了各种openssl s_client属性,但我无法获得所需的信息。

需求:

通过一个域(和端口443一起),并在Linux中使用脚本或命令输出域(Web服务器)的证书链中涉及的颁发date和到期date。

答案是肯定的,你可以使用openssl ,你可以很容易地把它作为一个“检查”脚本包装起来,但是我不知道已经有这样的插件。

首先,caching服务器证书和整个链:

 echo Q | openssl s_client -connect www.google.com:443 -showcerts > chain.pem 

(这个链文件包含站点证书,中间链,以及其他垃圾 – 虽然openssl没有问题)

如果您只希望输出链文件中的每个证书的详细信息:

 gawk 'BEGIN { pipe="openssl x509 -noout -subject -dates -serial "} \ /^-+BEGIN CERT/,/^-+END CERT/ { print | pipe } /^-+END CERT/ { close(pipe); printf("\n")} ' chain.pem 

添加/省略-serial-issuer-fingerprint-fingerprint为首选。 你甚至可以将它们连成一行(注意省略redirect和chain.pem事件):

 echo Q | openssl ... | gawk ... 

如果您希望正确validation链条,包括date范围,请继续阅读。

接下来,拉出网站(第一)证书,我会在这里使用sed ,因为我很懒;-)

 sed -n '/-BEGIN/,/-END/p;/-END/q' chain.pem > site.pem 

然后validation:

 openssl verify -verbose -CAfile chain.pem site.pem 

这是车轮脱落的地方:Google(正确)不提供链中的(自签名)根CA:

 site.pem: /C=US/O=GeoTrust Inc./CN=GeoTrust Global CA error 2 at 2 depth lookup:unable to get issuer certificate 

所以, 从Geotrust中取出根证书 ,保存并设置一个合适的CA目录:

 cd /usr/local/nagios/var/CA # example! wget http://www.geotrust.com/resources/root_certificates/certificates/Equifax_Secure_Certificate_Authority.pem c_rehash . 

然后再试一次:

 openssl verify -verbose -CAfile chain.pem -CApath /usr/local/nagios/var/CA site.pem 

(注意额外的-CApath参数),你会得到:

 site.pem: OK 

现在坏消息, openssl不设置返回代码来表示成功,失败或任何有用的东西。 您将需要处理输出以确保一切正常,基本上除“OK”之外的其他任何行都表示出现问题。 您正在查找的过期证书将显示为:

 error 10 at 2 depth lookup:certificate has expired 

(深度可能会有所不同)。

注意和注意事项:

  • 服务器提供的链可能不包含根(不需要,如果是的话,客户端应该忽略它),通过添加-CApath /some/path指向一个预先哈希的信任根的目录来解决这个问题。显示
  • 这不会捕获链文件的错误顺序,也不会链文件中多余的证书(这两个文件通常都不是浏览器的问题,但是站点validation器通常会标记它们)
  • chain.pem创build的chain.pem有额外的垃圾,这对openssl没有任何问题

我不知道有一个插件来检查问题date,但检查证书的有效期是check_http插件的一个标准function。

具体来说,请参阅-C选项。 如:

 ./check_http -H www.google.com -C 14 OK - Certificate 'www.google.com' will expire on 09/11/2014 11:04. 

请注意,这将适用于任何使用SSL(LDAPS,IMAPS等),而不仅仅是HTTPS。

如果你想检查链中的证书,你可能想尝试类似check_ssl_cert的东西。 (我从来没有使用它,但使用信息看起来像它做你想要的。)