java - 仅具有 https URL 时获取证书并将其添加到 Java 信任库?

标签 java certificate google-cloud-messaging truststore

我正在尝试通过 Google Cloud Message 服务器向 Android 设备发送推送通知。

我们用来执行此操作的 URL 是:

https://android.googleapis.com/gcm/send

在我们的企业应用程序中,我们不使用默认的 CA 机构,并且出于安全原因,我们在由 SSLContext 属性加载的信任库文件中手动添加我们信任的每个实体。 我想将 GCM 证书添加到我们的信任库。

我不知道如何从该 URL 获取证书。似乎 Chrome/Firefox 导出方式不起作用,因为页面重定向到另一个非 SSL 页面。

有人有解决方案吗?

最佳答案

我已经能够通过以下 Java 代码保存证书:

public void testConnectionTo(String aURL) throws Exception {
        URL destinationURL = new URL(aURL);
        HttpsURLConnection conn = (HttpsURLConnection) destinationURL.openConnection();
        conn.connect();
        Certificate[] certs = conn.getServerCertificates();
        System.out.println("nb = " + certs.length);
        int i = 1;
        for (Certificate cert : certs) {
            System.out.println("");
            System.out.println("");
            System.out.println("");
            System.out.println("################################################################");
            System.out.println("");
            System.out.println("");
            System.out.println("");
            System.out.println("Certificate is: " + cert);
            if(cert instanceof X509Certificate) {
                try {
                    ( (X509Certificate) cert).checkValidity();
                    System.out.println("Certificate is active for current date");
                    FileOutputStream os = new FileOutputStream("/home/sebastien/Bureau/myCert"+i);
                    i++;
                    os.write(cert.getEncoded());
                } catch(CertificateExpiredException cee) {
                    System.out.println("Certificate is expired");
                }
            } else {
                System.err.println("Unknown certificate type: " + cert);
            }
        }
    }

并将它们导入信任库:

keytool -import -alias GoogleInternetAuthority -file myCert1 -keystore truststore

关于java - 仅具有 https URL 时获取证书并将其添加到 Java 信任库?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12528328/

相关文章:

java - 当数据库更改时在 Android 和桌面 Java 上触发事件

java - 使用 spring.config.location 命令行参数时,为 Spring 的 @PropertySource 设置什么?

android - 如何强制客户端更新谷歌播放服务?

android - 推送通知状态检查 Android

google-cloud-messaging - 如何在 Android 上对推送消息进行分组

javascript - 通过解析云码功能下载图片

java - 有没有办法将从进程对象的 getOutPutStream() 方法获得的输出保存到文件中

ssl - 客户端-服务器应用程序和证书

certificate - 在 xcode IOS 模拟器中启用密码锁定

python - 在 Python 中使用企业证书颁发机构进行 HTTPS 证书验证