2011-04-21 7 views
3

난 내 예제 코드는 다음과 같습니다, Bouncy Castle 라이브러리를 사용하여 인증서를 생성 한은잘못된 키 스토어 형식 - 바람둥이

String domainName  ="localhost"; 
    String certPath   ="C://testCert.crt"; 

    KeyPairGenerator keyPairGenerator; 
    try { 
     Security.addProvider(new org.bouncycastle.jce.provider.BouncyCastleProvider()); 

     keyPairGenerator = KeyPairGenerator.getInstance("RSA"); 

     keyPairGenerator.initialize(1024); 
     KeyPair KPair = keyPairGenerator.generateKeyPair(); 

     X509V3CertificateGenerator v3CertGen = new X509V3CertificateGenerator(); 


     v3CertGen.setSerialNumber(BigInteger.valueOf(Math.abs(new SecureRandom().nextInt()))); 
     v3CertGen.setIssuerDN(new X509Principal("CN=" + domainName + ", OU=None, O=None L=None, C=None")); 
     v3CertGen.setNotBefore(new Date(System.currentTimeMillis() - 1000L * 60 * 60 * 24 * 30)); 
     v3CertGen.setNotAfter(new Date(System.currentTimeMillis() + (1000L * 60 * 60 * 24 * 365*10))); 
     v3CertGen.setSubjectDN(new X509Principal("CN=" + domainName + ", OU=None, O=None L=None, C=None")); 

     v3CertGen.setPublicKey(KPair.getPublic()); 
     v3CertGen.setSignatureAlgorithm("MD5WithRSAEncryption"); 

     X509Certificate pkCertificate = v3CertGen.generateX509Certificate(KPair.getPrivate()); 

     KeyStore keystore = KeyStore.getInstance("JKS"); 
     keystore.load(null, null); 
     keystore.setKeyEntry("test", KPair.getPrivate(), "password".toCharArray(), new X509Certificate[] {pkCertificate}); 


     FileOutputStream fos; 

     fos = new FileOutputStream(certPath); 
     fos.write(pkCertificate.getEncoded()); 
     fos.close(); 


    }catch (Exception e1) { 
     e1.printStackTrace(); 
    } 

인증서는 "어떤 컴파일 오류없이 성공적으로 생성하지만 바람둥이 오류의 시작에

생성 심각 : 경로 C와 스토어 형 JKS로드 실패 : /testCert.crt 인한 잘못된 스토어 포맷 "server.xml에 대한

항목은 아래와 같다에

,
<Connector port="443" protocol="HTTP/1.1" SSLEnabled="true" maxHttpHeaderSize="8192" 
      maxThreads="150" minSpareThreads="25" maxSpareThreads="75" enableLookups="false" 
      disableUploadTimeout="true" acceptCount="100" scheme="https" secure="true" 
      clientAuth="false" sslProtocol="TLS" keystoreAlias="test" keystorePass="password" 
      keystoreFile="C:/testCert.crt" /> 

답변

3

인코딩 된 인증서 양식을 파일에 쓰지 않아도됩니다 (fos.write(pkCertificate.getEncoded());은 잘못된 작업 임). 대신 keyStore.store(fos,"password".toCharArray);을 사용하십시오.

+0

감사합니다 .. !!! –