如何从证书文件(.p12)本身确定SSL证书的过期日期

93
如果我在Mac上拥有实际文件(.p12)和一个Bash Shell,我该如何提取证书、密钥文件以及证书到期日期?假设我拥有csr(.p12)、key文件。
4个回答

133

您可以使用openssl将证书从.p12文件提取到.pem文件中,命令如下:

openssl pkcs12 -in example.p12 -out example.pem -nodes

请注意,此命令将要求您输入导出密钥的密码。

openssl pkcs12 -in certificate.p12 -out certificate.pem -nodes

然后,您可以使用以下命令从.pem文件中提取证书的到期日期:

cat certificate.pem | openssl x509 -noout -enddate

3
我得到的是 notAfter=Oct 24 21:01:55 2017 GMT,但我确信这个证书已经过期了。有什么想法吗? - WhyNotHugo
1
正如Maciek D.下面的答案所示,您可以在不使用中间证书.pem文件的情况下在一行中执行这两个命令。 - mwfearnley
如果只是测试证书的当前有效性,您可以指定一个到期时间,如此处所示:https://dev59.com/xGEi5IYBdhLWcg3wZ7u8#31718838 - MikeW
8
这个回答有些误导性。正如WhyNotHugo在上面提到的,他从这个方法中看到了奇怪的结果。下面由David给出了一个可能的解释。上面的方法是提取根证书(CA)并显示其到期日期,而不是客户端证书,这可能是OP想要的。所以@David下面的回答应该被接受,而不是这个回答。 - StFS
"这个证书"? 通常会有3个证书连着。 你数过你所有的东西了吗? 你还得考虑客户端CA(不是服务器)。如果他们过时了,你就会遇到证书错误。 - SamTzu
显示剩余2条评论

83

您可以将第一个答案变成一行代码,而不需要使用中间文件:

openssl pkcs12 -in certificate.p12 -nodes | openssl x509 -noout -enddate

50

pkcs12文件中提取客户端证书并打印其到期日期:

openssl pkcs12 -in certificate.p12 -clcerts -nodes | openssl x509 -noout -enddate

如果您不包含-clcerts选项,则可能从CA证书而非您自己的证书中获取到到期日期。通常,几个CA证书在文件中作为信任链的一部分而被包含。


添加-clcerts似乎很重要,感谢您的添加。 - Martijn
1
提示:要通过编程方式添加证书密码,请在管道字符(|之前添加以下内容:-passin pass:<password> - Martijn

29

以下是在 Windows 上的操作步骤:

certutil -dump "file.pfx"

附言:我知道这个问题特别提到了Mac,但这只是为了防止Google把你带到这里(就像它把我带到这里一样)。


2
谢谢您的周到回答!我正在谷歌上寻找一个Windows解决方案,然后就来到了这里 :) - Violet Giraffe

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接