Pem形式の証明書をJavaキーストアに変換する必要があります。
これをWindowsサーバーのTomcatで使用するには
私はそれらのファイルを持っています:
cert_request.csr
-----BEGIN CERTIFICATE REQUEST-----
...
-----END CERTIFICATE REQUEST-----
cert_public_key.pem
-----BEGIN CERTIFICATE-----
...
-----END CERTIFICATE-----
cert_private_key.pem
-----BEGIN ENCRYPTED PRIVATE KEY-----
...
-----END ENCRYPTED PRIVATE KEY-----
cert.txt
contains an 16 digit key
私はpemファイルを結合しようとしました(2つのファイルを結合することによって一緒にチェーンされました)、これをopensslで変換して
私も変更しようとしました
-----BEGIN ENCRYPTED PRIVATE KEY-----
...
-----END ENCRYPTED PRIVATE KEY-----
に
-----BEGIN RSA PRIVATE KEY-----
...
-----END RSA PRIVATE KEY-----
上記の3つの方法を試してみました
有効な証明書を取得するにはどうすればよいですか?
編集:
Cert_public_key.pemとcert_private_key.pemを組み合わせてcert_comb.pemにしました
-----BEGIN CERTIFICATE-----
...
-----END CERTIFICATE-----
-----BEGIN ENCRYPTED PRIVATE KEY-----
...
-----END ENCRYPTED PRIVATE KEY-----
結合したファイルは明確ではありませんが、opensslを使用して証明書と秘密鍵をPKCS#12に結合すると機能するはずです。
cat cert_public_key.pem cert_private_key.pem >combined.pem
openssl pkcs12 -export -in combined.pem -out cert.p12
またはオンザフライですが、(更新:)秘密鍵を最初にする必要があります。
cat cert_private_key.pem cert_public_key.pem | openssl pkcs12 -export -out cert.p12
証明書にチェーン証明書が必要な場合-CSRを送信したときにCAから通知されているはずであり、CSRが発行した-今すぐ含めることも最も簡単です。
次に、(1)some Javaプログラムは実際にpkcs12をキーストアとして直接使用できますが、(2)JKSが必要であるか好む場合はkeytoolを使用します。
keytool -importkeystore -srckeystore cert.p12 -srcstoretype pkcs12 -destkeystore cert.jks
結果のJKSでエイリアスを気にする場合は、変換後に修正するのが最も簡単です。
また、暗号化されたPEMのラベルを変更するだけでは、暗号化が解除されません。また、ラベルを一般的なPKCS#8からRSAに変更しても、実際に一致するようにデータが変更されます(ただし、少しだけ異なります)。復号化された秘密鍵を含む別のPEMファイルが必要な場合:
openssl pkey -in encryptedpk8 -out clearpk8.pem # 1.0.0 up
openssl pkcs8 -in encryptedpk8 -out clearpk8.pem # 1.0.0 up
openssl pkcs8 -topk8 -nocrypt -in encryptedpk8 -out clearpk8.pem # below 1.0.0
openssl rsa -in encryptedpk8 -out clearrsa.pem
最初の質問:証明書リクエストしかありませんか?実際の証明書ではありませんか?署名する必要があります。自己署名するか、外部の当事者に署名させることができます。
実際の証明書がある場合は、これを使用して秘密鍵ファイルと証明書ファイルを解析できます。
// parse the private key
KeyFactory keyFactory = KeyFactory.getInstance("RSA"); // might not be RSA
PKCS8EncodedKeySpec spec = new PKCS8EncodedKeySpec(byteArray);
PrivateKey privateKey = keyFactory.generatePrivate(spec);
// parse cert
CertificateFactory factory = CertificateFactory.getInstance("X.509");
X509Certificate cert = factory.generateCertificate(certInputStream);
// add it to the keystore
store.setKeyEntry(alias, privateKey, password, new X509Certificate[] { cert });
[〜#〜]更新[〜#〜]
私の知る限り、コマンドラインのkeytoolはcsrへの署名などの高度なオプションをサポートしていません。標準のJavaはこれをサポートしていません。弾む城のような外部ライブラリが必要です。これは簡単ではありません。例:
JcaPKCS10CertificationRequest pkcs10 = new JcaPKCS10CertificationRequest(csrBytes);
X509v3CertificateBuilder builder = new JcaX509v3CertificateBuilder(
issuer,
generateSerialId(),
new Date(),
until,
subject,
pkcs10.getPublicKey()
);
X509CertificateHolder holder = builder.build(getContentSigner(privateKey, type));
X509Certificate cert = getCertificate(holder);
...
ContentSigner getContentSigner(PrivateKey privateKey) {
AsymmetricKeyParameter keyParameter = PrivateKeyFactory.createKey(privateKey.getEncoded());
AlgorithmIdentifier sigAlgId = new DefaultSignatureAlgorithmIdentifierFinder().find("SHA256WITHRSA"); // or what you want
AlgorithmIdentifier digAlgId = new DefaultDigestAlgorithmIdentifierFinder().find(sigAlgId);
return new BcRSAContentSignerBuilder(sigAlgId, digAlgId).build(keyParameter);
}