java trustmanager_过期证书上的Java trustmanager行为

如果证书已过期,java的TrustManager实现是否会被忽略?

我尝试了以下方法:

使用 keytool 和参数 -startdate "1970/01/01 00:00:00" 我创建了一个带有过期证书的P12密钥库 .

我出口证书:

Keystore type: PKCS12

Keystore provider: SunJSSE

Your keystore contains 1 entry

Alias name: fake

Creation date: 5 ╠ά± 2011

Entry type: PrivateKeyEntry

Certificate chain length: 1

Certificate[1]:

Owner: CN=Malicious, OU=Mal, O=Mal, L=Fake, ST=GR, C=GR

Issuer: CN=Malicious, OU=Mal, O=Mal, L=Fake, ST=GR, C=GR

Serial number: -1c20

Valid from: Thu Jan 01 00:00:00 EET 1970 until: Fri Jan 02 00:00:00 EET 1970

Certificate fingerprints:

MD5: A9:BE:3A:3D:45:24:1B:4F:3C:9B:2E:02:E3:57:86:11

SHA1: 21:9D:E1:04:09:CF:10:58:73:C4:62:3C:46:4C:76:A3:81:56:88:4D

Signature algorithm name: SHA1withRSA

Version: 3

*******************************************

我使用此证书作为Tomcat的服务器证书 .

然后使用我连接到tomcat的apache httpClient,但首先我将过期的证书添加到客户端的信任库(使用TrustManager)

TrustManagerFactory tmf = TrustManagerFactory.getInstance(TrustManagerFactory.getDefaultAlgorithm());

并加载过期的证书) .

我期待连接失败 .

相反,连接成功 .

使用 System.setProperty("javax.net.debug", "ssl");

我知道了:

***

Found trusted certificate:

[

[

Version: V3

Subject: CN=Malicious, OU=Mal, O=Mal, L=Fake, ST=GR, C=GR

Signature Algorithm: SHA1withRSA, OID = 1.2.840.113549.1.1.5

Key: Sun RSA public key, 1024 bits

modulus: 10350555024148635338735220482157687267055139906998169922552357357346372886164908067983097037540922519808845662295379579697361784480052371935565129553860304254832565723373586277732296157572040989796830623403187557540749531267846797324326299709274902019299

public exponent: 65537

Validity: [From: Thu Jan 01 00:00:00 EET 1970,

To: Fri Jan 02 00:00:00 EET 1970]

Issuer: CN=Malicious, OU=Mal, O=Mal, L=Fake, ST=GR, C=GR

SerialNumber: [ -1c20]

]

我看到在TLS握手中,过期的证书由Tomcat连接器发送 .

但是客户端(即TrustManager)不拒绝连接 .

这是默认行为吗?

我是否想以某种方式配置信任管理员来检查到期?

UPDATE:

我发现使用的实际TrustManager是X509TrustManagerImpl . 这里X509TrustManagerImpl说这个类有一个最小的逻辑 . 可能我使用错误的TrustManager?

UPDATE2: 来自javadoc X509TrustManager,目前尚不清楚它是否检查证书过期

void checkServerTrusted(X509Certificate[] chain,String authType)

throws CertificateException

给定对等方提供的部分或完整证书链,构建到受信任根的证书路径,如果可以验证则返回,并且基于身份验证类型对服务器SSL身份验证进行信任 . 身份验证类型是密钥交换算法部分密码套件表示为字符串,例如“RSA”,“DHE_DSS” . 注意:对于某些可导出的密码套件,密钥交换算法在握手期间的运行时确定 . 例如,对于TLS_RSA_EXPORT_WITH_RC4_40_MD5,当短暂的RSA密钥用于密钥交换时,authType应该是RSA_EXPORT,而当使用来自服务器证书的密钥时,authType应该是RSA . 检查区分大小写 .

谢谢

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值