0

ここに記載されているように、JSCEP を使用して証明書署名要求を EJBCA に登録しようとしています: https://github.com/jscep/jscep

同じ形式の csr と秘密鍵 (ポート 8443 での ssl 認証用) を使用して Web コンソールから csr を送信できますが、JSCEP 経由で試してみると、EJBCA ログに次のエラーが記録されます。

SCEP 要求の処理中にエラーが発生しました。: org.cesecore.certificates.ca.SignRequestException: 要求にパスワードがありません。

Web UI を介して入力する必要があるようなエンド エンティティのユーザー名と登録コードが必要だと推測していますが、JSCEP API のどこにもその情報を入力する場所がありません。秘密鍵で十分かもしれませんが、UI が両方を必要としていたため、これは少し奇妙に思えます。

CSRにパスワードが必要であることも意味していると思いますが、そうではありませんが、UIでは問題が発生しなかったため、なぜそうなるのかわかりません。

キーストア (p12 ファイルから解析され、パスワードが含まれる) と csr は両方とも、プログラムで生成されるのではなく、ファイルから解析されます。csr は、キーを持っていないサード パーティからのものです。

jscep クライアント経由の登録リクエストは次のようになります。

client.enrol(証明書、privateKey、リクエスト、config.getCaProfile());

証明書と秘密鍵はどちらも p12 ファイルから取得され、リクエストは渡された csr (pkcs12) から解析されます。caProfile は、https::8443/ejbca/adminweb/ のホームページの表にリストされている CA 名です。

パラメータが間違っている場合や、どこかにパスワードを含める必要がある場合は、API でどのようにすればよいか教えてください。

4

1 に答える 1

3

プログラムで構築されたcsrに対してこれを実行できるようになり、エンドツーエンドで機能するため、問題は解決したと考えています。サードパーティの csr を使用する作業がまだ残っていますが、それは大したことではありません。

コードは以下です。

    KeyPairGenerator keyPairGenerator = KeyPairGenerator.getInstance("RSA");
    keyPairGenerator.initialize(1024);
    KeyPair entityKeyPair = keyPairGenerator.genKeyPair();

    PublicKey entityPubKey = entityKeyPair.getPublic();
    X500Principal requesterSubject = new X500Principal("CN=endEntityName");
    PKCS10CertificationRequestBuilder csrBuilder = new JcaPKCS10CertificationRequestBuilder(requesterSubject, entityPubKey); 

    DERPrintableString password = new DERPrintableString("endEntityPassword");
    csrBuilder.addAttribute(PKCSObjectIdentifiers.pkcs_9_at_challengePassword, password);

    PrivateKey entityPrivKey = entityKeyPair.getPrivate();
    JcaContentSignerBuilder csrSignerBuilder = new JcaContentSignerBuilder("SHA1withRSA");
    ContentSigner csrSigner = csrSignerBuilder.build(entityPrivKey);
    PKCS10CertificationRequest csr = csrBuilder.build(csrSigner);
于 2016-10-28T17:39:41.183 に答える