如何使用Windows KeyStore签名数据?
如果Windows密钥库中存储了密钥,则可以使用KeyStore keyStore = KeyStore.getInstance("Windows-MY");
访问Windows密钥库,然后获取给定别名的密钥参考。或者,我可以在keyStoreSpi
对象上使用反射来访问其条目,X509Certificate对象和PrivateKey对象,并使用它对某些数据进行签名。此方法仅允许获取密钥参考,然后在签名时使用它。
Windows密钥库中的证书后面有密钥存储提供程序(KSP)。我正在使用的是自定义密钥存储提供程序(不是我自己制作的,不知道它是如何工作的,它做什么或不做什么)。
现在,是否可以使用其证书在Windows KeyStore中引用但通过KSP提供给Windows KeyStore的密钥进行签名? (密钥本身存储在HSM中)
编辑:更正了术语,使文本有意义。
[确定,我发现Java 8中的Java SunMSCAPI提供程序(我在问题中没有提到..)不支持KSP(也称为CNG和CAPI2)。它仅支持Crypto API(CAPI)。我要签名的密钥由CNG提供程序提供。因此,Java 8不支持它,但Java 13(https://bugs.openjdk.java.net/browse/JDK-8026953)
应该支持它