Android,MQTT:代理证书到期

时间:2017-05-04 15:22:40

标签: android ssl certificate

我的应用通过ssl连接使用证书文件连接到mqtt代理。

我在我的经纪人中设置了证书文件(.crt)和密钥文件(.key)。

我使用Paho Mqtt Client api,这个api需要一个SSLSocketFactory来建立连接。

我使用Google示例创建一个SSLSocketFactory实例,其中TrustManager信任我们在密钥库中的CA.

// Load CAs from an InputStream
// (could be from a resource or ByteArrayInputStream or ...)
CertificateFactory cf = CertificateFactory.getInstance("X.509");
InputStream caInput = new BufferedInputStream(new 
FileInputStream("load-der.crt"));
Certificate ca;

try {
    ca = cf.generateCertificate(caInput);
    System.out.println("ca=" + ((X509Certificate) ca).getSubjectDN());
} finally {
    caInput.close();
}

// Create a KeyStore containing our trusted CAs
String keyStoreType = KeyStore.getDefaultType();
KeyStore keyStore = KeyStore.getInstance(keyStoreType);
keyStore.load(null, null);
keyStore.setCertificateEntry("ca", ca);

// Create a TrustManager that trusts the CAs in our KeyStore
String tmfAlgorithm = TrustManagerFactory.getDefaultAlgorithm();
TrustManagerFactory tmf = TrustManagerFactory.getInstance(tmfAlgorithm);
tmf.init(keyStore);

// Create an SSLContext that uses our TrustManager
SSLContext context = SSLContext.getInstance("TLS");
context.init(null, tmf.getTrustManagers(), null);

现在一切正常。但是,证书将于2017年5月30日到期。

我如何在客户端(Android)处理证书?

我已经在测试环境中使用新证书进行了测试。该应用无法连接到经纪人。例外是:

java.security.cert.CertPathValidatorException: Trust anchor for certification path not found.

如何处理Android上的证书续订?

1 个答案:

答案 0 :(得分:0)

我已使用相同的.key文件请求新证书,并且所有客户端都没有任何问题使用新的.crt连接到代理。

但是,使用相同的密钥进行证书续订是否安全?