【问题标题】:javax.net.ssl.keyStoreAlias not work using keystoretype "Windows-MY"javax.net.ssl.keyStoreAlias 无法使用密钥库类型“Windows-MY”
【发布时间】:2017-05-25 02:41:33
【问题描述】:

我在使用 Windows 存储库证书连接 WebService 时遇到问题。

问题是 Windows 总是获取存储库上的第一个证书,而忽略了属性 keystoreAlias。我想现在是不是错了?

我在存储库中有 3 个证书,我想使用第三个证书,但 windows 总是选择第一个。

 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;
                        }
                    }
                }

【问题讨论】:

    标签: java ssl keystore


    【解决方案1】:
    Security.addProvider(new com.sun.net.ssl.internal.ssl.Provider());
    

    自 2002 年以来就不再需要了。

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

    我看不出你要设置的清除属性有什么意义,但是有no such property defined in JSSE

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

    自 2002 年以来就不再需要了。

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

    no such property defined in JSSE

    另请参阅this question 进行确认。

    【讨论】:

    • 好的,谢谢,但我怎么说我的应用程序使用的 Windows 证书,你能帮我吗?有什么办法吗?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-06-01
    • 2016-12-21
    • 1970-01-01
    • 2020-09-25
    • 2015-03-28
    • 2011-05-10
    • 2012-07-17
    相关资源
    最近更新 更多