我们与外部站点的安全SMTP连接从4月22日开始出现故障。错误消息表明证书链中存在问题。
[java:java:ERR /1:to_RHIO_direct_0:--/--/---- --:--:--] org.springframework.mail.MailSendException: Mail server connection failed; nested exception is javax.mail.MessagingException: Could not convert socket to TLS;
[java:java:ERR /1:to_RHIO_direct_0:--/--/---- --:--:--] nested exception is:
[java:java:ERR /1:to_RHIO_direct_0:--/--/---- --:--:--] javax.net.ssl.SSLHandshakeException: com.ibm.jsse2.util.h: PKIX path building failed: com.ibm.security.cert.IBMCertPathBuilderException: unable to find valid certification path to requested target. Failed messages: javax.mail.MessagingException: Could not convert socket to TLS;
我们先建立连接,然后发布Start TLS。两年多以来,这项工作一直没有出现任何问题。两年前,也就是27个月前,我们遇到了一个类似的问题——日志中也有同样的例外。我没有保存该问题的记录,但我记得数字证书的到期日期是未来一周——也就是说,在到期出现任何问题之前,它应该再工作一周。所以上一次,我们得到了一个新的证书,问题得到了解决。所以这一次,我观察到了同样的情况。该证书的有效期为2022年4月29日:
Keystore type: jks
Keystore provider: IBMJCE
Your keystore contains 2 entries
Alias name: (identifying information removed)
Creation date: Mar 13, 2020
Entry type: trustedCertEntry
Owner: (identifying information removed)
Issuer: CN=DigiCert SHA2 Secure Server CA, O=DigiCert Inc, C=US
Serial number: (identifying information removed)
Valid from: 2/27/20 7:00 PM until: 4/29/22 8:00 AM
所以有人可能会说,这只是一个巧合,证书仍然有效一周,问题一定来自其他地方。昨天,供应商给我发送了同一证书的更新版本,当我将其添加到信任库时,连接成功建立。所以,我做的唯一改变就是更换了证书。可能是链中更高层的CA出现了问题?我收到的证书引用了链中更高层CA的更新版本?这就是我能想到的。。但非常奇怪的是,同样的情况发生了两次,两次的解决方案都是更换尚未过期的证书。还有其他解释吗?非常感谢。
可能是链中更高层的CA出现了问题?我收到的证书引用了链中更高层CA的更新版本?
可能吧。通常,与其说是“证书”,不如说是“证书链”。你展示的只是链中的最终证书。如果该链中的任何一个证书在4/22/22过期,那么您就有了答案。
或者,您的服务器的时钟当然有可能会大大偏离(7天)。
如果我在Mac或Linux中有实际的文件和Bash shell,我如何查询证书文件何时过期?不是web站点,而是证书文件本身,假设我有csr、key、pem和chain文件。
问题内容: 我想通过将NSDate与当前日期进行比较来检查NSDate是否在之前(过去)。我该怎么做? 谢谢 问题答案: 我找到了方法。 您也有方法。 迅速3到迅速5:
如果我在Mac中有一个实际的文件(.p12)和一个Bash shell,我如何提取证书和密钥文件以及证书过期日期?假设我有csr(.p12),关键文件。 提前感谢!
问题内容: 我只是写了这个单元测试: 输出为: 的图案是与是使用把字符串日期日期对象的方法的库。 为什么des.java.util.Date对象验证日期有效性? 问题答案: 您需要进行设置,以使SimpleDateFormat严格验证您的输入。 您可以参考setLenient文档以进一步了解。根据定义,
问题内容: 我在asp.net mvc页面上使用knockoutjs。我正在使用ajax通过调用将表单持久化回服务器,然后使用jQuery将结果发布回服务器。视图模型上的所有属性均已成功序列化,但Javascript日期除外,该Javascript日期保留为空对象。 宣言: 保存数据: viewModel.startTime()的console.log值为: 在 Save Data的 第1行之后,
问题内容: 如果我在Mac或Linux中拥有实际的文件和Bash shell,如何查询cert文件何时到期?假设我有csr,key,pem和chain文件,则不是网站,而是证书文件本身。 问题答案: 与: 输出形式为: 以了解如何轻松地检查证书是否已过期,或者证书是否将在一定时间段内,而不必解析上述日期。