无论如何要与AWS Classic CloudHSM而不是Java代码集成

时间:2019-01-28 06:34:20

标签: java c# amazon-web-services pkcs#11 hsm

我的应用程序在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();
}

}

0 个答案:

没有答案