我使用的是智能卡,密钥库实例采用PKCS11格式。 我想用智能卡中的证书创建一个.jks文件。 有没有办法以编程方式实现它?感谢。
答案 0 :(得分:0)
如果硬件令牌制造商支持它,并且您已将PKCS#11对象创建为可提取的,则可以,(但是,这是不可行的)。
警告:您要做的是不安全。您正在消除硬件令牌的目的。一旦在硬件令牌中创建了一个秘密对象,它就不会看到当天的光。
要使PKCS11对象可被提取,您必须将CKA_EXTRACTABLE
设置为true
,将CKA_NEVER_EXTRACTABLE
设置为false
,将CKA_SENSITIVE
设置为false
}和CKA_ALWAYS_SENSITIVE
到false
。
大多数硬件令牌制造商都不支持此功能。假设您找到了支持此功能的供应商,并且您已创建具有上述属性的PKCS11对象,则可以按照以下方式执行此操作。
您可以通过调用aliases()
来遍历您的PKCS11 KeyStore实例条目,并查找其中的每个条目。它可以是KeyPair(PublicKey和PrivateKey),也可以是证书或数据对象(如果是PIV SmartCard令牌)。您可以拥有另一个JKS KeyStore实例,现在可以jksKS.setEntry(...)
或jksKS.setCertificateEntry(...)
。
如果令牌不支持创建非敏感数据,则您无法首先使用上述属性创建PKCS11对象。 如果令牌不支持提取,则PKCS11令牌将抛出异常,表示无法提取敏感数据。