2017-11-21 14 views
0

SSL 인증서를 만듭니다. 나는이 코드를 사용했다.브라우저에 ssl 인증서 통합

버전 : V3 제목 : CN = PTA 서명 알고리즘 : SHA1withRSA와, OID = 1.2.840.113549.1.1.5

Key: Sun RSA public key, 1024 bits 
    modulus:8195747251668671703158252511484715904905685624305474923281348384506398192074853448780012281582290111563345678091608497553821391829971480670544649932159013 
    public exponent: 65537 
    Validity: From: Tue Nov 21 13:17:50 PKT 2017, 
       To: Wed Nov 21 13:17:50 PKT 2018 
    Issuer: CN=PTA 
    SerialNumber: 337317b9 

Certificate Extensions: 1 
[1]: ObjectId: 2.5.29.19 Criticality=false 
BasicConstraints: 
    CA:true 
    PathLen:2147483647 



    Algorithm: SHA1withRSA 
    Signature: 
0000: 1E 78 D7 F7 3A E6 E4 B5 D1 35 1C 2E FC 53 A2 85 .x..:....5...S.. 
0010: 61 BD F0 5A 72 D9 F7 11 23 75 80 7A 6E B0 E0 23 a..Zr...#u.zn..# 
0020: BE E4 5F DE F1 16 A7 F2 B7 21 BA E8 13 CB 5A 1D .._......!....Z. 
0030: A9 E4 45 ED 89 AE 87 1E 41 F4 47 B4 F7 EC C3 BE ..E.....A.G..... 
0040: E0 EA FC 1F C7 23 0C 8F 3A 84 8B 98 83 B4 7E C2 .....#..:....... 
0050: 6F 7A 5B AD F4 38 8E 00 10 A0 30 59 1F A3 09 49 oz[..8....0Y...I 
0060: 0E 42 D0 82 D9 7F BF AC 4D 93 BC C5 A4 DC 04 54 .B......M......T 
0070: 53 96 B8 7F AE BD 6D BD 94 E9 A8 A0 68 43 DB 30 S.....m.....hC.0 

, 

    Version: V3 
    Subject: CN=FastNet 
    Signature Algorithm: SHA1withRSA, OID = 1.2.840.113549.1.1.5 

    Key: Sun RSA public key, 1024 bits 
    modulus: 161657090792555516695586185263084527366349509696556183715928445892937137032979680125036388699182414350510579635688759948023466646898520852479701338811401262991832177452096078586456052551108597559503898191394682820545429625150985217333874981200678761714744624590813783219900274086624205553792352169064622425721 
    public exponent: 65537 
    Validity: From: Tue Nov 21 13:17:50 PKT 2017, 
       To: Wed Nov 21 13:17:50 PKT 2018 
    Issuer: CN=PTA 
    SerialNumber: 38004cdc 
Certificate Extensions: 1 
[1]: ObjectId: 2.5.29.19 Criticality=false 
BasicConstraints:[ 
    CA:true 
    PathLen:2147483647 



    Algorithm: SHA1withRSA 
    Signature: 
0000: 24 94 B2 08 80 4C 79 5E 66 CC D4 A4 85 CD 28 9F $....Ly^f.....(. 
0010: 1B 80 E8 F9 04 F7 EA F3 78 AB 73 1A 03 59 ED 77 ........x.s..Y.w 
0020: A9 C9 2A 7B D1 A8 D5 88 72 00 7F 82 04 8D 34 22 ..*.....r.....4" 
0030: 20 E4 1F 4F ED CB 3A 34 CC 2D 85 91 5C 24 DF C5 ..O..:4.-..\$.. 
0040: 5A BE 08 3E 2E 64 87 E6 28 AA D5 FC 4C F6 FA 03 Z..>.d..(...L... 
0050: 96 56 26 E9 CE 1D 7C 60 1B 66 F7 75 39 69 27 76 .V&....`.f.u9i'v 
0060: 28 B5 88 8E 51 40 13 5C 94 05 CC 3F 9C 56 4E 27 ([email protected]\...?.VN' 
0070: D9 4A 87 FA 0F DE 7F 8C 0A 46 77 3B C0 25 57 8A .J.......Fw;.%W. 

, 

    Version: V3 
    Subject: CN=Neon 
    Signature Algorithm: SHA1withRSA, OID = 1.2.840.113549.1.1.5 

    Key: Sun RSA public key, 1024 bits 
    modulus: 101561805201350912995790593526575119513151168158665152335461285366261351789268704157740436057113460399435904858902325860168207278136991174436556015812872375521572209765853124764558849092076972847896755938071801863244158743746567917559665570200348977261495405005075200724506808480138652079420561951562003264931 
    public exponent: 65537 
    Validity: From: Tue Nov 21 13:17:50 PKT 2017, 
       To: Wed Nov 21 13:17:50 PKT 2018 
    Issuer: CN=FastNet 
    SerialNumber: 5ee7fb6e 


    Algorithm: SHA1withRSA 
    Signature: 
0000: 2D 04 84 DF C6 57 BB 12 0B 34 EF 04 61 15 2E 16 -....W...4..a... 
0010: FB 71 F2 4C A0 B5 88 0B DD CC 10 7D AE C1 AB 54 .q.L...........T 
0020: 7A D4 90 D2 DF FD A7 16 E6 AF D4 CF 6F 44 90 7A z...........oD.z 
0030: C6 77 3F 26 30 9B A8 0A 6A 15 17 56 10 FA 64 D0 .w?&0...j..V..d. 
0040: 7E F3 39 98 CD 3F D4 03 4C 83 5B 64 73 26 22 B5 ..9..?..L.[ds&". 
0050: 0A DB 7B 9A 73 B1 4B 17 45 BF 49 28 F8 2D 01 EA ....s.K.E.I(.-.. 
0060: 89 78 8A 90 1A E5 00 96 15 59 B8 C9 3A CA 3F 35 .x.......Y..:.?5 
0070: DA D2 EE C1 96 B1 18 F5 ED F2 6A D0 15 8A 61 13 ..........j...a. 

내가 원하는

public static void main(String[] args){ 
    try{ 
     //Generate ROOT certificate 
     CertAndKeyGen keyGen=new CertAndKeyGen("RSA","SHA1WithRSA",null); 
     keyGen.generate(1024); 
     PrivateKey rootPrivateKey=keyGen.getPrivateKey(); 

     X509Certificate rootCertificate = keyGen.getSelfCertificate(new X500Name("CN=PTA"), (long) 365 * 24 * 60 * 60); 

     //Generate intermediate certificate 
     CertAndKeyGen keyGen1=new CertAndKeyGen("RSA","SHA1WithRSA",null); 
     keyGen1.generate(1024); 
     PrivateKey middlePrivateKey=keyGen1.getPrivateKey(); 

     X509Certificate middleCertificate = keyGen1.getSelfCertificate(new X500Name("CN=FastNet"), (long) 365 * 24 * 60 * 60); 

     //Generate leaf certificate 
     CertAndKeyGen keyGen2=new CertAndKeyGen("RSA","SHA1WithRSA",null); 
     keyGen2.generate(1024); 
     PrivateKey topPrivateKey=keyGen2.getPrivateKey(); 

     X509Certificate topCertificate = keyGen2.getSelfCertificate(new X500Name("CN=Neon"), (long) 365 * 24 * 60 * 60); 

     rootCertificate = createSignedCertificate(rootCertificate,rootCertificate,rootPrivateKey); 
     middleCertificate = createSignedCertificate(middleCertificate,rootCertificate,rootPrivateKey); 
     topCertificate = createSignedCertificate(topCertificate,middleCertificate,middlePrivateKey); 

     X509Certificate[] chain = new X509Certificate[3]; 
     //chain[0]=topCertificate; 
     //chain[1]=middleCertificate; 
     //chain[2]=rootCertificate; 

     chain[2]=topCertificate; 
     chain[1]=middleCertificate; 
     chain[0]=rootCertificate; 

     System.out.println(Arrays.toString(chain)); 
    }catch(Exception ex){ 
     ex.printStackTrace(); 
    } 
} 

private static X509Certificate createSignedCertificate(X509Certificate cetrificate,X509Certificate issuerCertificate,PrivateKey issuerPrivateKey){ 
    try{ 
     Principal issuer = issuerCertificate.getSubjectDN(); 
     String issuerSigAlg = issuerCertificate.getSigAlgName(); 

     byte[] inCertBytes = cetrificate.getTBSCertificate(); 
     X509CertInfo info = new X509CertInfo(inCertBytes); 
     info.set(X509CertInfo.ISSUER, (X500Name) issuer); 

     //No need to add the BasicContraint for leaf cert 
     if(!cetrificate.getSubjectDN().getName().equals("CN=Neon")){ 
      CertificateExtensions exts=new CertificateExtensions(); 
      BasicConstraintsExtension bce = new BasicConstraintsExtension(true, -1); 
      exts.set(BasicConstraintsExtension.NAME,new BasicConstraintsExtension(false, bce.getExtensionValue())); 
      info.set(X509CertInfo.EXTENSIONS, exts); 
     } 

     X509CertImpl outCert = new X509CertImpl(info); 
     outCert.sign(issuerPrivateKey, issuerSigAlg); 

     return outCert; 
    }catch(Exception ex){ 
     ex.printStackTrace(); 
    } 
    return null; 
} 

나는 출력이 얻을 크롬 브라우저에 통합. 이 텍스트를 .cer 또는 .crt로 변환하면 그것은 나에게 오류를 줬다.

+0

텍스트 묶음을 인증서로 변환 할 수 없습니다. 올바른 형식이어야합니다. openssl을 사용하여 인증서를 생성하거나 크롬에서 기존 인증서를 내보내고 텍스트를 비교하십시오. 또한 개인 키를 저장하지 않으므로 브라우저에서 가져올 수있는 경우에도 인증서는 쓸모가 없습니다. – user1516873

+1

@ user1516873 OP는 서버의 개인 키를 사용하여 무언가를 수행하면됩니다. x509로 트러스트를 정렬 할 때 필요한 것은 브라우저/OS 트러스트에 설치할 인증서입니다. –

답변

2

실제 인증서가 아닌 인증서 요약을 저장합니다.

createSignedCertificate으로 생성 된 각 인증서의 경우 인증서의 DER로 인코딩 된 바이트를 검색하려면 . getEncoded()으로 전화해야합니다.

일단 바이트가 있으면 root.cer과 같은 파일에 각 바이트 배열을 씁니다.

+0

어떻게 DER로 인코딩 된 파일을 만들 수 있습니까? –

+0

'.getEncoded()'로부터받은 바이트 배열은 DER로 인코딩됩니다. 출력 스트림을 준비하고 바이트를 씁니다. –