2017-05-18 7 views
0

sslハンドシェイクのためにjavaでsofthsm2とpkcs#11を使用する方法。 私は、softhsm2に格納されたキーを持つsslコンテキストファクトリの実装に関する問題に直面しています。私が利用できるサンプルを提供してください。Pkcs#11 with SSL with java

答えて

1

ここではjavaのsslハンドシェイクのpkcs#11の解決方法を示します。

 System.setProperty("javax.net.debug", "ssl"); 
      try { 
      String configName = "softhsm2.cfg"; 
      Provider p = new SunPKCS11(configName); 
      System.out.println(p.getName()); 
      Security.addProvider(p); 


      // Load the key store 
      char[] pin = "5678".toCharArray(); 
      KeyStore ks = KeyStore.getInstance("PKCS11", p); 
      ks.load(null, pin); 
      System.out.println(ks.size()); 
      Enumeration<String> aliases = ks.aliases(); 
      for(;aliases.hasMoreElements();) 
      { 
      System.out.println(aliases.nextElement()); 
      } 
      KeyManagerFactory keyManagerFactory =  KeyManagerFactory.getInstance("SunX509"); 
     //Add to keystore to key manager 
      keyManagerFactory.init(ks, pin); 

     //Create the context 

      SSLContext context = SSLContext.getInstance("TLS"); 
      context.init(keyManagerFactory.getKeyManagers(), null, new SecureRandom()); 
      //Create a socket factory 
      SSLServerSocketFactory ssf = context.getServerSocketFactory(); 
      //SSLSocketFactory sf = context.getSocketFactory(); 
      //Create the socket 
      SSLServerSocket s = (SSLServerSocket) ssf.createServerSocket(8888); 
      printServerSocketInfo(s); 
      SSLSocket c = (SSLSocket) s.accept(); 
+0

'addProvider()'が-1を返した場合、プロバイダはすでにインストールされています。それは例外を投げる理由ではない。 – EJP

+0

はあなたの提案でコードを更新しました。 – Slok