4

JAVA を使用して WS クライアントを開発していますが、SSL 認証に問題があります。WS は WCF で作成され、私はサーバーにアクセスできません。WS は HTTPS を介して動作し、最初にクライアントにインストールする必要があるクライアント証明書を使用します。サーバー担当者から PFX 証明書が送られてきて、OS に正常にインストールされ (私は OS X を使用しています)、ブラウザ経由で WS にアクセスできました (以前は WS にアクセスできなかった Safari または FF の両方を試しました)。 )。OS のどのアプリもこの証明書を使用すると思っていましたが、JAVA アプリを試してみるとうまくいきませんでした。最初は、次のエラーがスローされていました。

「javax.net.ssl.SSLHandshakeException: sun.security.validator.ValidatorException: PKIX パスの構築に失敗しました: sun.security.provider.certpath.SunCertPathBuilderException: 要求されたターゲットへの有効な証明書パスが見つかりません」

これを解決するには、証明書を CER ファイルにエクスポートし、keytool コマンド ライン ツールを使用して、JAVA が使用する「cacerts」keyStore に証明書を追加しました。しかし、このエラーが解消された後、「403、禁止されています」というメッセージが表示されるようになりました。これは明らかに、サイトに SSL クライアント証明書を使用していないためですが、送信する方法を見つけることができませんでした。どんな助けでも大歓迎です。

以下は、WS に投稿するために使用するコードです。

URL url = new URL(p_url);

HttpsURLConnection conn = (HttpsURLConnection) url.openConnection();
conn.setDoOutput(true);

conn.setRequestMethod("POST");
conn.setRequestProperty("Content-Type", contentType);

OutputStream out = conn.getOutputStream(); // on this line it shows the error
4

3 に答える 3

5

SSLContext(クライアント証明書 + 秘密鍵を含むキーストアで初期化されたを使用して)特定のものを作成しKeyManager、そこから を派生SSLSocketFactoryさせて に設定するHttpsURLConnectionか、グローバル設定を使用することができます。

次のシステム プロパティを設定できます (グローバル設定用)。

  • javax.net.ssl.keyStore=path/to/keystore.pfx
  • javax.net.ssl.keyStoreType=PKCS12
  • javax.net.ssl.keyStorePassword=xxxxxxxxx

または、この回答で説明されているように、独自のKeyManagerFactory/を作成することもできます。KeyManager

サーバー証明書を にインポートしたので、 の引数にcacerts使用します(デフォルト値が取得されます)。nullTrustManager[]SSLContext.init()

さらに、OSX を使用しているため、 を直接使用できますKeychainStore。これを行うには....keyStore=NONEkeyStoreType=KeychainStoreとを使用keyStorePassword=-します (OS からキーが必要になったときにキーへのアクセスが許可されるため、任意のパスワードでかまいません)。ただし、Lion で動作するかどうかはわかりません。ストアに複数の証明書と秘密鍵がある場合、失敗する可能性があることに注意してください (この問題を参照してください)。

于 2012-01-20T23:08:42.683 に答える
0

独自の SSL SocketFactory をセットアップする必要があるようです。

http://vafer.org/blog/20061010073725/

2006 年以降は改善されていると思いますので、コマンド ラインで一連のプロパティを指定するだけでよい場合があります。

http://stackoverflow.com/questions/875467/java-client-certificates-over-https-ssl
于 2012-01-20T22:20:43.770 に答える
0

送信されたキーストアを Java アプリケーションにロードする必要があります。オブジェクト
内のファイルシステムからファイルとして読み込んで使用できます。Keystoreこのと、特にKeyManageriecreateKeyManagersメソッドに関する部分を読んでください。

もう 1 つのオプションは、Windows からキーストアをロードすることです。Windows-MYプロバイダーについて読む

于 2012-01-20T22:21:11.880 に答える