0

標準のJava/SAAJ機能を使用して、SOAPメッセージを作成し、Webサービス(WS)呼び出しを実行しています。これまでのところ、通信はHTTPトランスポート全体で暗号化されておらず、エンドポイントでのWSの呼び出しは、次のアプローチを使用して正常に機能しています。

SOAPConnectionFactory scf = SOAPConnectionFactory.newInstance();
SOAPConnection con = scf.createConnection();
URL endpoint = new URL(endpointUrl); // configured HTTP URL

// "message" is passed as parameter (a SOAPMessage object)
SOAPMessage response = con.call(message, endpoint);
con.close();

現在、クライアントは、Blowfishを使用してすべてのトラフィックを暗号化することを望んでいます。次の簡単なアプローチを使用して任意のデータを暗号化できることを知っています(この例ではランダムな秘密鍵を使用しています)。

KeyGenerator kgen = KeyGenerator.getInstance("Blowfish");
SecretKey skey = kgen.generateKey();
byte[] raw = skey.getEncoded();
SecretKeySpec skeySpec = new SecretKeySpec(raw, "Blowfish");

Cipher cipher = Cipher.getInstance("Blowfish");
cipher.init(Cipher.ENCRYPT_MODE, skeySpec);
String inputString = "This is just an example";
byte[] encrypted = cipher.doFinal(inputString.getBytes());

Cipher decCipher = Cipher.getInstance("Blowfish");
decCipher.init(Cipher.DECRYPT_MODE, skeySpec);
byte[] decrypted = decCipher.doFinal(encrypted);

assertEquals(inputString, new String(decrypted));

ただし、欠落しているリンクは次のとおりです。Blowfishを使用してペイロードを暗号化し、応答を受信したときに復号化できるように、これら2つの部分を組み合わせるにはどうすればよいですか。

Javaが提供する標準機能(SOAPMessageなどSOAPConnection)は、暗号化をまったくサポートしていないようです。Springがそれを助けるかもしれないインスタンスをWebServiceTemplateサポートしているのを見てきました。ClientInterceptorただし、その場合、spring-wsを使用するようにWSコードを書き直す必要があります。そして、私は彼らのリファレンスドキュメントで、spring-wsを使用してこの種の暗号化を行う方法を説明する例をまだ見つけていません。

通信を暗号化する簡単な方法がありませんか?はいの場合、それは何ですか?そうでない場合、クライアントが求めていることを達成するためにどのような良いオプションがありますか?

更新:安全なトランスポートとしてHTTPSを使用することはオプションではありません。

どうもありがとうございました。

4

1 に答える 1

1

この記事は非常に長いため、ここで要約することは困難ですが、Webサービス・セキュリティーを使用することをお勧めします。IBMにはそれに関するすばらしい記事があります。

http://www.ibm.com/developerworks/java/library/j-jws5/index.html

ただし、Blowfishの場合、クライアント側とサーバー側で同じキーが必要になるため、いくつかの問題が発生します。そのため、ジャンプドライブでキーをウォークオーバーできない限り、誰かがキーを傍受するリスクがあります。例。

データを調べて、暗号化する必要のある部分を確認したい場合は、RSAを使用して対称鍵を暗号化し、それをSOAPサービスのパラメーターとして渡し、その鍵を使用して、必要なフィールドを暗号化します。保護されています。

公開鍵暗号化を使用してこれを行うことにより、呼び出しごとにBlowfish鍵を変更でき、鍵を回復するために(サーバー上の)秘密鍵が必要になるため、鍵交換は引き続き安全です。

于 2012-07-30T10:47:47.267 に答える