2017-05-04 2 views
0

내 앱이 ssl 연결을 통해 인증서 파일을 사용하여 mqtt 브로커에 연결됩니다.Android, MQTT : 브로커 인증서 만료

인증서 파일 (.crt)과 키 파일 (.key)을 브로커에 설치했습니다.

저는 Paho Mqtt Client API를 사용하는데,이 API에는 연결을 설정하기 위해 SSLSocketFactory가 필요합니다.

Google 예제를 사용하여 Google CA를 키 저장소에 신뢰하는 TrustManager를 사용하여 SSLSocketFactory 인스턴스를 만듭니다.

// 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); 

모든 것이 현재 정상적으로 작동합니다. 하지만 인증서는 2013 년 5 월 30 일에 만료됩니다.

어떻게 클라이언트 측 (Android)의 인증서를 처리해야합니까?

테스트 환경에서 새로운 인증서로 테스트를 거쳤습니다. 앱이 브로커에 연결할 수 없습니다. 예외 :

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

Android에서 인증서 갱신을 어떻게 처리 할 수 ​​있습니까?

+0

"개조"보다는 폐지 또는 갱신을 의미합니까? 또한 인증서를 갱신하고 장치에 배포하는 것은 사용중인 CA에 전적으로 의존합니다. – hardillb

+0

@hardillb 나는 갱신을 의미합니다. 고맙습니다. – Kingslayerpy

답변

0

동일한 .key 파일을 사용하여 새 인증서를 요청했으며 모든 클라이언트가 새로운 .crt를 사용하여 브로커에 연결하는 데 문제가 없었습니다.

그러나 인증서 갱신을 위해 동일한 키를 사용하는 것이 안전합니까?

관련 문제