JCEのないJavaでS / MIME
-
19-09-2019 - |
質問
私は、S / MIMEで電子メールを署名するアプレットを書くしようとしています。
もちろん、私は唯一の必須のものと一つの小さな瓶を作りたいです。 明らかにそれを行うためのJavaの道が周りに巨大な神聖な署名弾む城JCE jarを持つが含まれます。
質問です:JCEに触れると、それは「認証」「プロバイダ」に文句を言うことなく、S / MIMEを取得する最も簡単な方法は何ですか?たぶん、JCEに依存しないS / MIMEの実装はありますか?多分JCEを触れることなく自分の軽量APIを使用して弾む城S / MIMEを使用することは可能でしょうか?たぶん、他の方法はありますか?
むしろ理論的な可能性の問題、ではありませんので、何も関係なく、Sunが承認するかどうかの作業から、純粋なJavaのオープンソースの暗号化アルゴリズムを防ぐことはできないことを私に明らかである:?方法は少なくとも痛いです。
もちろん、私はいつも、Bouncy Castleの純粋なJavaのJCEの実装をつかんjava.security1にそのパッケージの名前を変更し、私は必要な変更を行うことにより、早期に醜い行くことができます - しかし、この方法は今、あまりにも痛い見えます。
。UPDATE の直接弾む城を使用したと私の現在の問題:私は、今度は私の弾む城が構築拒否するSecretKeyFactoryを、使用することを含むキーストアから鍵をロードしよう
。解決 2
これは、JCEを使用せずにメッセージに署名するために非常に簡単です。 本当の問題は、PKCS#12キーを読んでいた。
私はこれをしませんでした: * JDKPKCS12KeyStoreクラスを上書きコピー。 *どこでもにおいて、(SPI-Sを返す)bcProvider.getService()のnewInstance()と)(Security.getInstanceを置き換え *(BC源で)それらSPI-Sに必要なメソッドは、公共の代わりに保護しました。
これはハックのように見えますが、実際に動作しているようです。
他のヒント
BC S / MIMEは、CMSパッケージの上に書かれているので、問題は本当にすべての暗号が軽量クラスを使用して行われるので、CMSパッケージを変更するにデボルブます。
弾む城の.NETバージョンのため、多かれ少なかれ成功し、すでに行われている同様の何か。私たちは、CMSのものがJCEまたは軽量のいずれかで動作することができるようにJavaのバージョンをリファクタリングする(確かにそれは遅いプロセスです)しようとしています。同じ問題は、あまりにも、例えばBCのAPIの他の部分に影響を及ぼしPKCS#12キーストアは、JCEプロバイダに組み込まれ、OpenPGPのパッケージはこれらの.NETポートはまた、軽量APIにそれらを書き直しなど、JCEに書き込まれます。
あなたの問題は、しかし、一般的な場合よりもおそらく簡単です。おそらくあなただけCMSSignedDataGeneratorとサポートクラスを必要としています。おそらくaddSignerのすべての無数のバリエーションを必要とするか、または生成しません。あなただけのアップフロントあなたのダイジェスト/署名アルゴリズムを決定する場合は、すべてのプロバイダのものは、特定の軽量実装にハードコードされた呼び出しに置き換えることは容易になります。
代わりに、キーストアの、多分あなただけ(PEMは、おそらくエンコード)PKCS#8ファイル中の1つの秘密鍵を格納して逃げることができました。同様に、証明書の