我的应用程序在C#应用程序中运行,并通过基于Safenet和LunaAPI与AWS Classic HSM集成。目的是从HSM检索私钥,并使用itextsharp将其签名为pdf文档。
由于当时HSM集成很麻烦,我们确实为此部分选择了Java,并创建了一个.jar模块,该模块将在C#应用程序内部调用。 现在,它显示了一些瓶颈,我希望将它们全部转移到C#代码中,以便更轻松地进行管理和开发。 经过研究后,我发现了一些开源软件,例如PKCS11Interop,但我没有找到任何线索。
公共类LunaClient扩展了CertificateProvider { 私有静态LunaSlotManager sm = null;
public LunaClient(){}
private void loginHSM() throws Exception {
// Login to HSM
sm = LunaSlotManager.getInstance();
// Login to slot #1
sm.login(1, Property.Luna.CloudHSMPwd);
}
@Override
public Certificate[] getCertificates() throws Exception {
LunaCertificateX509[] CertChain = new LunaCertificateX509[3];
loginHSM();
// get LunaCertificateX509
CertChain[0] = LunaCertificateX509.LocateCertByAlias(Property.Luna.DigicertAlias0);
CertChain[1] = LunaCertificateX509.LocateCertByAlias(Property.Luna.DigicertAlias1);
CertChain[2] = LunaCertificateX509.LocateCertByAlias(Property.Luna.DigicertAlias2);
// return LunaCertificateX509
return (Certificate[])CertChain;
}
@Override
public PrivateKey getPrivateKey() throws Exception {
loginHSM();
// Dynamically load security providers
Class<?> providerClass = Class.forName("com.safenetinc.luna.provider.LunaProvider");
java.security.Provider provider = (java.security.Provider) providerClass.newInstance();
java.security.Security.removeProvider(provider.getName());
java.security.Security.insertProviderAt(provider, 2);
providerClass = Class.forName("com.safenetinc.luna.provider.LunaProvider");
provider = (java.security.Provider) providerClass.newInstance();
java.security.Security.removeProvider(provider.getName());
java.security.Security.insertProviderAt(provider, 3);
// This syntax gets an instance of a LunaKeystore
KeyStore ks = KeyStore.getInstance("Luna");
ks.load(null, null);
providerName = provider.getName();
return (PrivateKey) ks.getKey(Property.Luna.DigicertPrivateKeyalias, Property.Luna.CloudHSMPwd.toCharArray());
}
@Override
public void close() {
sm.logout();
}
}