【问题标题】:ssl handshake exception in android gcm serverandroid gcm服务器中的ssl握手异常
【发布时间】:2015-02-21 15:45:43
【问题描述】:

嗨朋友们,我是安卓新手。我正在尝试创建 gcm 服务器。我的代码是

System.setProperty("javax.net.ssl.trustStore","/usr/bin/keystore.jks");
String id = "cliend id";
String msg = "Test";
Sender sender = new Sender(Api key);
Message message = new Message.Builder()
        .addData("message", "this is the message")
        .addData("other-parameter", "some value")
        .build();
Result result;
result = sender.sendNoRetry(message, id);

我创建了密钥库,但仍然出现如下错误:javax.net.ssl.SSLHandshakeException: sun.security.validator.ValidatorException: PKIX path building failed: sun.security.provider.certpath.SunCertPathBuilderException: unable to find valid certification path to requested target.

我无法解决它。

【问题讨论】:

    标签: java android ssl google-cloud-messaging


    【解决方案1】:

    禁用 SSL。 将其添加到您的代码中。

                TrustManager[] trustAllCerts = new TrustManager[]{new X509TrustManager() {
                public java.security.cert.X509Certificate[] getAcceptedIssuers() {
                    return null;
                }
    
                public void checkClientTrusted(X509Certificate[] certs, String authType) {
                }
    
                public void checkServerTrusted(X509Certificate[] certs, String authType) {
                }
            }
            };
    
            // Install the all-trusting trust manager
            SSLContext sc = SSLContext.getInstance("SSL");
            sc.init(null, trustAllCerts, new java.security.SecureRandom());
            HttpsURLConnection.setDefaultSSLSocketFactory(sc.getSocketFactory());
    
            // Create all-trusting host name verifier
            HostnameVerifier allHostsValid = new HostnameVerifier() {
                public boolean verify(String hostname, SSLSession session) {
                    return true;
                }
            };
    

    【讨论】:

      【解决方案2】:

      您需要将 App2 的证书添加到位于 %JAVA_HOME%\lib\security\cacerts 的所用 JVM 的密钥库文件中。

      首先您可以通过运行以下命令检查您的证书是否已经在密钥库中:keytool -list -keystore "%JAVA_HOME%/jre/lib/security/cacerts"(您不需要提供密码)

      如果您的证书丢失,您可以使用浏览器下载它并使用以下命令将其添加到密钥库中:

      keytool -import -noprompt -trustcacerts -alias -file -keystore -storepass

      导入后,您可以再次运行第一个命令来检查您的证书是否已添加。

      可以在here找到Sun/Oracle信息。

      希望这有帮助!玩得开心!

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2011-04-16
        • 1970-01-01
        • 1970-01-01
        • 2017-04-24
        • 2015-07-30
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多