3

axis2 で作成された「Hello World」Web サービスがあります。httpsこのサービスを自己署名証明書で使用できるクライアント API を作成したいと考えています。自己署名証明書myCertificate.cerkeystoreそれを含む があります。

ここに私のクライアントAPIがあります:

public class MyApi{

public Object callMyService(){

Axis2TestStub stub = new Axis2TestStub(
"https://localhost:8443/axis2/services/Axis2Test");

System.setProperty("javax.net.ssl.trustStore",
"src/main/resources/myKeystore.jks")
System.setProperty("javax.net.ssl.trustStorePassword", "changeit");

Hello request = new Hello();
request.setMot("World");
HelloResponse response = stub.hello(request);
Object mot = response.get_return();
return mot;

それは機能しますが、それを含むのでmyCertificate.cerはなく、使用したいと思います。keystore誰かがそれを行う方法を知っていますか? httpsプロトコルをオーバーライドしようとしましたが成功しませんでした:

HttpSecureProtocol myHttpsProtocol = new HttpSecureProtocol();
myHttpsProtocol .setCheckHostname(false);
myHttpsProtocol .addTrustMaterial(new TrustMaterial("myCertificate.cer"));
Protocol customHttps = new Protocol("https", 
(ProtocolSocketFactory) myHttpsProtocol , 8443);
Protocol.registerProtocol("https", customHttps);
4

2 に答える 2

3

自己署名証明書を使用して https 経由でこのサービスを使用できるクライアント API を作成したいと考えています。自己署名証明書 myCertificate.cer とそれを含むキーストアがあります。

サーバー キー ストアには、サーバーの自己署名証明書と秘密鍵が含まれており、サーバーがメッセージに署名し、資格情報をクライアントに返すために使用されます。

クライアント側では、サーバー証明書をクライアントのトラスト ストアにインポートする必要があります(通常、クライアントのトラスト ストアに秘密鍵を入れたくないので、スタンドアロンの証明書ファイルを抽出します。つまり、秘密鍵と次に、そのサーバー証明書をトラスト ストアにインポートします)。

それは機能しますが、それを含むキーストアではなく、myCertificate.cer を使用したいと思います。

これはキー ストアではなくトラスト ストアであり、クライアントのトラスト ストアに証明書を追加する必要があります。これは、自己署名証明書はルート CA によって署名されておらず、デフォルトでは信頼されていないためです。したがって、信頼のチェーンを作成する必要があります。

これで、クライアント API の JAR でトラスト ストアを配布できるようになりました。このアプローチについては、このスレッドで説明しています(最大の問題は、サーバー証明書の有効期限が切れたときに JAR を再配布する必要があることです)。個人的には、このソリューションはあまり好きではありません。

私見ですが、トラスト ストアを省略したい場合の適切な解決策は、信頼ストアにルート CA 証明書が既にある広く知られている証明書ベンダー (Verisign、Thawte など) から実際の証明書を購入することです。

于 2010-02-08T20:30:06.517 に答える
2

アプリを実行しているJDKのcacertsファイルに証明書を追加するだけです。これを行えば、他に何もする必要はありません。上記のコードは必要ありません。以下のようなコマンドを実行して、証明書をキーストアに追加します。

C:/<jdk-version/bin/keytool -import -alias myalias -file mycert.crt -keystore C:/<jdk-version>/jre/lib/security/cacerts
于 2010-02-08T18:59:00.913 に答える