PEM(X.509) 証明書 (ディスク上の privateKey.pem ファイルに格納されている) を使用して、Java のソケット経由で送信されるメッセージに署名しようとしていますが、近い例を見つけるのに苦労しています。私は通常、このプロジェクトを支援するために介入するだけの C++ の人間なので、API に慣れていないときに機能するコードにすべてをまとめるのは少し困難でした。
残念ながら、私は Java (1.6.0 Update 16) に標準で付属するメソッドに限定されているため、BouncyCastleのPEMReaderを使用して同様の例を見つけましたが、この特定のプロジェクトではあまり役に立ちませんでした。
私の privateKey.pem キーはパスフレーズで保護されており、次の形式になっています。
-----BEGIN RSA PRIVATE KEY-----
Proc-Type: 4,ENCRYPTED DEK-Info:
DES-EDE3-CBC,63A862F284B1280B
[...]
tsjQI4H8lhOBuk+NelHu7h2+uqbBQzwkPoA8IqbPXUz+B/MAGhoTGl4AKPjfm9gu
OqEorRU2vGiSaUPgDaRhdPKK0stxMxbByUi8xQ2156d/Ipk2IPLSEZDXONrB/4O5
[...]
-----END RSA PRIVATE KEY-----
それらのキーは、OpenSSL を使用して生成されました。
openssl.exe genrsa -out private_key.pem 4096
実行前にこのキーを DER やその他の形式に変換することはできません。キーは簡単に交換できる必要があり、形式は PEM のままであるため、必要な変換はコード内で内部的に行う必要があります。
私は完全には確信が持てないことが混在していると聞いたので、ここ SO の集合的な精神がその断片をまとめるのに役立つことを望んでいました.
PEM 証明書は、使用可能な DER 証明書に変換するために Base64 Decoded が必要であると聞いたことがあります。MiGBase64と呼ばれる Base64 デコード ツールを持っていますが、このデコードがいつどのように行われる必要があるのか完全にはわかりません。
存在する 15 種類のキー、KeyStore、KeyGenerator、Certificate などを追跡しようとしている Java API ドキュメントで迷子になりましたが、必要なものを適切に特定するのに十分な知識がありません。使用、およびそれらを一緒に使用する方法。
基本的なアルゴリズムは非常に単純に見えます。そのため、同様に単純な実装を作成できなかったことに特に苛立ちを感じていました。
1) ファイルから privateKey.pem を読み取る
2) パスフレーズを使用して秘密鍵を XXX クラスにロードし、鍵を復号化する
3) Signature クラスで鍵オブジェクトを使用してメッセージに署名する
これに関するヘルプ、特にサンプルコードは大歓迎です。ほとんどの「近い」例は、BouncyCastle を使用して新しいキーを生成するか、ここでは適用できないさまざまな形式のキー/クラスを使用しているため、この問題の有用な例を見つけるのに苦労しています。
これは本当に単純な問題のように思えますが、私は頭がおかしくなっています。本当に単純な答えはありますか?