2017-01-10 7 views
0

Windowsのリポジトリの証明書を使用してWebServiceに接続する際に問題があります。keystoretype "Windows-MY"を使用してjavax.net.ssl.keyStoreAliasが機能しない

問題は、Windowsは常にプロパティkeystoreAliasを無視してリポジトリの最初の証明書を取得することです。今はwathが間違っているのですか?

私はリポジトリに3つの証明書があり、私は3番目の証明書を使いたいと思いますが、ウィンドウは常に最初の証明書を選択します。

ks = KeyStore.getInstance("Windows-MY"); 
       try { 
        ks.load(null, configNFSe.getSenhaCertificadoDigital().toCharArray()); 
       } catch (IOException e) { 
        throw new Exception("Senha do Certificado Digital esta incorreta ou Certificado inválido."); 
       } 



       Enumeration<String> aliasEnum = ks.aliases(); 
       while (aliasEnum.hasMoreElements()) { 
        String alias = aliasEnum.nextElement(); 
        if (ks.isKeyEntry(alias)) { 
         String certificado = alias; 


         X509Certificate certificate = (X509Certificate) ks.getCertificate(alias); 

         if (certificate.getSubjectDN().toString().equals(configNFSe.getAliasCertificado()) || alias.equals(configNFSe.getAliasCertificado())) { 

          keyEntry = (KeyStore.PrivateKeyEntry) ks.getEntry(alias, new KeyStore.PasswordProtection(configNFSe.getSenhaCertificadoDigital().toCharArray())); 

          atualizarSenhaAliasCertificado(certificate); 
          Security.addProvider(new com.sun.net.ssl.internal.ssl.Provider()); 
          System.setProperty("com.sun.xml.ws.transport.http.client.HttpTransportPipe.dump", "true"); 
          System.setProperty("com.sun.xml.ws.transport.http.HttpAdapter.dump", "true"); 
          System.setProperty("sun.security.ssl.allowUnsafeRenegotiation", "true"); 
          System.setProperty("java.protocol.handler.pkgs", "com.sun.net.ssl.internal.www.protocol"); 

          System.clearProperty("javax.net.ssl.keyStore"); 
          System.clearProperty("javax.net.ssl.keyStorePassword"); 
          System.clearProperty("javax.net.ssl.trustStore"); 
          System.clearProperty("javax.net.ssl.keyStoreAlias"); 

          System.setProperty("javax.net.debug", "ssl"); 

          System.setProperty("javax.net.ssl.keyStoreProvider", "SunMSCAPI"); 
          System.setProperty("javax.net.ssl.keyStoreType", "Windows-MY"); 
          System.setProperty("javax.net.ssl.keyStore", "cert_jf_p.jks"); 
          System.setProperty("javax.net.ssl.keyStorePassword", "passwordCertificate"); 
          System.setProperty("javax.net.ssl.keyStoreAlias", alias); 

          System.setProperty("javax.net.ssl.trustStoreType", "JKS"); 
          System.setProperty("javax.net.ssl.trustStore","cert_jf_p.jks"); 
          System.setProperty("javax.net.ssl.trustStorePassword", "changeit"); 

          break; 
         } 
        } 
       } 

答えて

0
Security.addProvider(new com.sun.net.ssl.internal.ssl.Provider()); 

これは、2002年

System.clearProperty("javax.net.ssl.keyStoreAlias"); 

ので、必要に応じていなかった私は、あなたが設定しようとしているプロパティをクリアするポイントが表示されていないが、no such property defined in JSSEがあります。 2002年

System.setProperty("javax.net.ssl.keyStoreAlias", alias); 

no such property defined in JSSEありますので、

System.setProperty("java.protocol.handler.pkgs", "com.sun.net.ssl.internal.www.protocol"); 

これは必要なされていません。

this questionも参照してください。

+0

ありがとう、しかし、私はどのように私のアプリケーションを使用するWindowsの証明書を言う、あなたは私を助けることができますか?方法はありますか? –

関連する問題