2017-04-25 15 views
0

AppleWallet과 거래 할 때 문제가 발생합니다. 그들은 세 가지 인증서, 1, 문자열 형식의 리프 인증서, 2, String 형식의 하위 인증서를 제공합니다. 3, Apple 루트 CA-G3 Cert 파일, ".cer"로 끝남 문제는이를 사용하여 RSA 알고리즘을 사용하여 데이터를 확인하고 인코딩하는 방법입니다.사용 된 리프 인증서 및 서브 인증서는 무엇이며 어떻게 사용합니까?

ps :이 문서는 리프 인증서로 PublicKey가 제공되었음을 명확히합니다. 세 인증서가 사슬에 있습니다. 리프 인증서는 서브 인증서에 의해 서명되고 서브 인증서는 AppleRootCA-G3.cer에 의해 서명됩니다. 두 가지 작업을 수행해야합니다. 1, 세 가지 인증서로 확인합니까? 2, 리프 인증서에서 RSA의 PublicKey 추출. 하지만 어떻게해야할지 모르겠습니다.

답변

0

체인으로 가져 오지 않았다면 기본적으로 인증서 체인을 구성해야합니다. 인증서 체인은 기본적으로 끝점 엔티티 인증서 (또한 리프 인증서, 체인의 가장 중요한 인증서)로 구성되며 그 뒤에는 덜 중요한 인증서가옵니다. CA 인증서가 가장 중요하지 않습니다.

인증서를 구축하는
3. CA Certificate (self-signed) 
    | 
    |__ 2. Sub CA Certificate (signed by the above CA) 
      | 
      |__ 1. Sub-sub CA Certificate (if any) (signed by the above Sub CA) 
        | 
        |__ 0. End Entity Certificate (your certificate, signed by the above cert) 

각 인증서에서 자신을 체인, 당신은, 당신이 누구에 의해 서명 된 인증서를 볼 수 있습니다

그래서 이것은 보통의 X.509 인증서 체인의 모습을 어떻게 위의 방식으로 체인을 구성하십시오 (트리의 숫자는 java의 인증서 배열에있는 인덱스를 나타냄).

당신은 subjectDN을의 issuerDN보고 누구에 의해 서명 된 인증서를 찾을 수 있습니다. 주체 고유 이름은 최종 엔터티이며 발급자 고유 이름은 인증서에 서명 한 엔터티의 이름입니다.

인증서가 프로그래밍 다른 인증서로 서명되었는지 확인해야하는 경우,이 작업을 수행 할 수 있습니다 :

userCert.verify (caCert.getPublicKey());

CertificateFactory certificateFactory = CertificateFactory.getInstance("X.509"); 
// Provided the certificate doesn't have certificate headers (---begin cert--- and ---end cert---) 
Certificate cert = certificateFactory.generateCertificate(new FileInputStream(new File("CERTIFICATE_PATH"))); 

System.out.println(cert.getPublicKey()); 
:

이 코드를 사용하여 인증서에서 공개 키를 추출 할 수 있습니다