BouncyCastle的KeyStore(PKCS12KeyStorespi)默认支持KeyBag、PKCS8ShroudedKeyBag、CertBag。现阶段还没有任何一个p12生成工具支持添加CrlBag的。
添加crlBag支持
直接对PKCS12KeyStoreSpi.java进行修改:
首先是engineLoad方法,直接在certbag的判断后添加对crlbag的判断:
1 | else if (b.getBagId().equals(crlBag)) { |
在engineLoad中,还需要对unmarkedCrl判断,虽说P9扩展是可添加也可不添加,但是对pfx处理的时候,还是需要localId作为Key存储在HashTable中。
1 | if (unmarkedKey) { |
在外部生成pfx时,我们读取一个crl文件,直接转换为X509CRL文件格式存储在Pfx文件中,然后通过engineLoad方法解析pfx中包含的所有内容。解析后,存储在HashTable和IgnoresCaseHashtable中。以备doStore方法使用。
在doStore中,处理CRL:
1 | // |
至此,CRL基本处理完成,添加到ContentInfo中即可:
1 | // safebag 按顺序放入contentinfo |
测试Pfx
编写测试类,输出一个pfx:
测试类太大了,放到Gist上地址:PKCS12.java
使用openssl查看pfx文件
1 | OpenSSL> pkcs12 -in D:\test.pfx -info |
OPENSSL现阶段是无法读取crlBag的,现阶段可能实际场景应用极少。加就加上了。🔚
