2016-06-20 8 views
0

私はJava(バウンシーキャッスルライブラリを使用)をCA証明書にコーディングしました。私は特定の秘密鍵でエンドエンティティ証明書に署名する必要があります。特定の秘密鍵を使用してCA証明書によってエンドエンティティcerteficateに署名する方法

  X500Principal dnNameIssuer = new X500Principal("CN=\"" + hashedValue + " CA\", OU=PKI, O=\"" + hashedValue + ", Inc\", L=Darmstadt, ST=Hessen, C=DE"); 
      X500Principal dnNameSubject = dnName; 
      serialNumber = new BigInteger("123127956789") ; 
      keyus = new KeyUsage(KeyUsage.digitalSignature); 

      ContentSigner signer = new JcaContentSignerBuilder("SHA512withECDSA").build(myprivateKey); 



      Date D1 = new Date(System.currentTimeMillis() - 24 * 60 * 60 * 1000); 
      Date D2 = new Date(System.currentTimeMillis() - 24 * 60 * 60 * 1000); 
      AuthorityKeyIdentifier AKI = new AuthorityKeyIdentifier(keyBytesPublic); 

      X509v3CertificateBuilder certBldr = new JcaX509v3CertificateBuilder(certroot,serialNumber, D1, D2, dnName, mypublicKey); 
      certBldr.addExtension(X509Extension.authorityKeyIdentifier, true, AKI); 
      certBldr.addExtension(X509Extension.subjectAlternativeName, false,new GeneralNames(new GeneralName(GeneralName.rfc822Name,"PNeODZ3wV5m2UXmJiovxdwPKZdCkB87ESsk7H8vTZKU="))); 
      certBldr.addExtension(X509Extensions.KeyUsage, true, keyus); 
      certBldr.addExtension(new ASN1ObjectIdentifier("2.5.29.19"), false, new BasicConstraints(false)); 


        // Build/sign the certificate. 
        X509CertificateHolder certHolder = certBldr.build(signer); 

        X509Certificate Endcert = new JcaX509CertificateConverter().setProvider("BC").getCertificate(certHolder); 
       ` 

私はエラーあなたが私を助けることができるenter image description here

を得た: はここに私のコードです。または、誰かが私のために喜ぶCA証明書によってエンドエンティティ証明書に署名する別の方法があるとき。

おかげ

答えて

0

エラーは、未解決の依存関係によるものです。あなたは、これに似たもの

<dependency> 
    <groupId>org.bouncycastle</groupId> 
    <artifactId>bcpkix-jdk15on</artifactId> 
    <version>1.49</version> 
</dependency> 

あなたはあなたのコードに多少の誤差があります

X500Principal dnNameIssuer = new X500Principal("CN=\"" + hashedValue + " CA\", OU=PKI, O=\"" + hashedValue + ", Inc\", L=Darmstadt, ST=Hessen, C=DE"); 

文字列を作成しないようにする必要があります。この日付が過去

Date D1 = new Date(System.currentTimeMillis() - 24 * 60 * 60 * 1000); 
Date D2 = new Date(System.currentTimeMillis() - 24 * 60 * 60 * 1000); 

にこれに類似したもの(+ 1日)

Date D1 = new Date(); 
Date D2 = new Date(System.currentTimeMillis() + VALIDITY_PERIOD); 

を作成しているX509

X509Certificate cacert =... 
X500Name issuer = X500Name.getInstance(cacert.getSubjectX500Principal().getEncoded()); 

から抽出されたCA証明書発行者名を使用しますkeyUsageにkeyEnciphermentを追加するのも一般的です。

keyus = new KeyUsage(KeyUsage.digitalSignature | KeyUsage.keyEncipherment); 

そしてまた、あなたがプロジェクトEJBCAにCAの完全な例を持ってcacert

X509ExtensionUtils extUtils = new X509ExtensionUtils( 
new SHA1DigestCalculator()); 
certBldr.addExtension(Extension.authorityKeyIdentifier, false, 
    extUtils.createAuthorityKeyIdentifier(caCert)) 

とauthorityKeyIdentifierを作成します。 This isあなたが必要とするクラス。

もここ(hereから抽出された)E最終エンティティCERT

public static X509CertificateHolder buildEndEntityCert(X500Name subject, 
     AsymmetricKeyParameter entityKey, AsymmetricKeyParameter caKey, 
     X509CertificateHolder caCert, String ufn) throws Exception 
{ 
    SubjectPublicKeyInfo entityKeyInfo = SubjectPublicKeyInfoFactory. 
      createSubjectPublicKeyInfo(entityKey); 

    if(subject==null) 
     subject = new X500Name("CN = BETaaS Gateway Certificate"); 

    X509v3CertificateBuilder certBldr = new X509v3CertificateBuilder(
      caCert.getSubject(), 
     BigInteger.valueOf(1), 
     new Date(System.currentTimeMillis()), 
     new Date(System.currentTimeMillis() + VALIDITY_PERIOD), 
     subject, 
     entityKeyInfo); 

    X509ExtensionUtils extUtils = new X509ExtensionUtils(
      new SHA1DigestCalculator()); 

    certBldr.addExtension(Extension.authorityKeyIdentifier, false, 
     extUtils.createAuthorityKeyIdentifier(caCert)) 
    .addExtension(Extension.subjectKeyIdentifier, false, 
      extUtils.createSubjectKeyIdentifier(entityKeyInfo)) 
    .addExtension(Extension.basicConstraints, true, 
      new BasicConstraints(false)) 
    .addExtension(Extension.keyUsage, true, new KeyUsage(
      KeyUsage.digitalSignature | KeyUsage.keyEncipherment)) 
    .addExtension(Extension.subjectAlternativeName, false, new GeneralNames(
      new GeneralName(GeneralName.rfc822Name, ufn))); 

    AlgorithmIdentifier sigAlg = algFinder.find(ALG_NAME); 
    AlgorithmIdentifier digAlg = new DefaultDigestAlgorithmIdentifierFinder().find(sigAlg); 

    ContentSigner signer = new BcECDSAContentSignerBuilder(sigAlg, digAlg).build(caKey); 

    return certBldr.build(signer); 
} 
を作成するための完全な例であります
関連する問題