6

X509Certificate があり、次のようにファイルに書き込み/出力します。(証明書の内容を読みたいので、エンコードされたバイトを書いていません)

X509Certificate cer = generateCertificate(); // cer is DER encoded
writeToFile( cer.toString() ); // cer.toString() converts DER to UTF/ASCII???

後で、このファイル (上記) を文字列として読み取り、新しい X509Certificate を作成したいと考えています。

String cerStr = readCerFromFile(); // Read what is written above. In ASCII/ UTF format
ByteArrayInputStream bais = null;
try {
    CertificateFactory cf = CertificateFactory.getInstance("X.509");
    bais = new ByteArrayInputStream(cerStr.getBytes());
    return (X509Certificate) cf.generateCertificate(bais);
} ...

これにより、次の例外がスローされます。

Java.security.cert.CertificateParsingException: Invalid DER-encoded certificate data

そして、私が cerStr を DER 形式に変換していないことは明らかです (また、 DER に変換できるかどうかはわかりません)。エンコードされていない文字列から X509Certicate を作成する方法を説明してください。

前もって感謝します。!

4

4 に答える 4

4

簡単に言えば、できません。DER は、簡単にString. cer.getEncoded()GregS がコメントで説明したように、単純に DER でエンコードされた証明書を保存することをお勧めします。

証明書の内容を表示するには、オペレーティング システムが認識するファイル拡張子を付けて保存し、ダブルクリックします。プレーン テキスト情報をコマンド ラインで出力したい場合は、openssl などを使用します。

openssl x509 -text -noout -inform DER -in mycertificate.crt

これは、多くの Unix フレーバー (Linux、Apple) に標準で含まれているかオプションであり、Windows でも実行できます。

于 2012-07-15T22:48:55.590 に答える
1

証明書を生データcert.getEncoded()(.Net ではcert.RawData) として取得すると、DER 形式でエンコードされます。非公式に言えば、これは証明書の特別なバイナリ表現にすぎません。

しかし、証明書の適切な文字列表現が存在します。DER の証明書の生の表現を Base64 形式の文字列に変換できます。私はJAVAを知らないので、.Netでは次のようになりますConvert.ToBase64dString(cert.RawData)

両方の形式の証明書を拡張子が.cerまたは.crtのファイルに保存し、標準の OS 証明書ビューアーを使用して開くことができます。

于 2012-08-02T19:16:16.963 に答える
0

Javaでできること

    String sCert = javax.xml.bind.DatatypeConverter.printBase64Binary(certificate.getEncoded()); 

.Net で

Convert.ToBase64String(Certificate.RawData);
于 2016-04-01T17:26:02.247 に答える
0

貧乏人の答え(私は非常に低いレベルです)

// pfx バイト ストリームを作成します... byte[] selfSigned = CertificateCreator.CreateSelfSignCertificatePfx(distinguishedName, new DateTime(2013, 4, 1), new DateTime(2013, 12, 31), insecurePassword);

// 証明書インスタンスを作成します X509Certificate2 cert = new X509Certificate2(selfSigned, insecurePassword);

// .cer としてエクスポート [DER] selfSigned = cert.Export(X509ContentType.Cert);

// ファイルに書き込みます.. System.IO.File.WriteAllBytes(certificateFilename+".cer"), selfSigned);

于 2013-04-04T18:37:46.957 に答える