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