私は証明書に関してかなり無知ですが、私が間違っていることについては助言をいただきたいと思います...残念なことに、StackOverflowの残りの部分またはWeb上の他の部分で解決策を見つけることができませんでした。Javaから証明書を要求するURLにアクセスする
レスポンスを取得するURL(HTTPSを使用)があります。 (私の場合の画像が、私はそれはそれほど重要だと確信しています)
は、ここに私がやったことだ:
1. HTTPコード403と、Webブラウザ
それ応答からURLへのアクセス「禁断の」 。
URLにアクセスするために必要な証明書(* .pfxファイル)が提供されています。
2.証明書をインストールし、PFXファイルにブラウザ
ダブルクリックから再試行するには、「証明書のインポートウィザード」(Windowsの10)を開きます。続けて再起動してください。
ここでChromeはリソースの詳細を取得します。 Firefoxにはまだ403が表示されているので、[オプション]> [詳細]> [証明書]> [証明書を表示]の順にクリックします。今度は、FFもリソースを正常に返します。 JVM
下に証明書をインストールする
3.私は今、Javaを使用して同じURLを呼びたいです。私はまだレガシー目的のためにこのプロジェクトのJava 7を使用しています。私は、keytool
CLIコマンドを使用して、証明書をJavaキーストアにインポートする必要があることを理解しています。しかし、このコマンドはDER X509形式の証明書を必要とします。だから、私は再びこの形式にクロムからの証明書をエクスポートします。 keytool -import -alias MY_ALIAS -keystore C:/PROGRA~1/Java/jdk1.7.0_80/jre/lib/security/cacerts -file my_cert.cer
keytool -list -v -keystore C:/PROGRA~1/Java/jdk1.7.0_80/jre/lib/security/cacerts
を行い、必要な証明書の包含のために検査:
は今のコマンドを実行します。
今、私は私のJavaプログラムを実行します。
import java.io.BufferedReader;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.net.InetSocketAddress;
import java.net.Proxy;
import java.net.URL;
import java.net.URLConnection;
public class TestUrlRead {
private static final String PROXY_URL = ...;
private static final int PROXY_PORT = ...;
private static final String IMAGE_URL = ...;
public static void main(String[] args) throws Exception {
Proxy proxy = new Proxy(Proxy.Type.HTTP, new InetSocketAddress(PROXY_URL, PROXY_PORT));
URL url = new URL(IMAGE_URL);
URLConnection con = url.openConnection(proxy);
con.setDoOutput(true);
con.connect();
InputStream webIn = con.getInputStream(); // <-- causes IOException
// read and use webIn
inReader.close();
}
}
スローされた例外がある:
Exception in thread "main" java.io.IOException: Server returned HTTP response code: 403 for URL: ...
at sun.net.www.protocol.http.HttpURLConnection.getInputStream(HttpURLConnection.java:1627)
at sun.net.www.protocol.https.HttpsURLConnectionImpl.getInputStream(HttpsURLConnectionImpl.java:254)
at TestUrlRead.main(TestUrlRead.java:33)
応答とタイミングはこれが証明書なしでブラウザに似ていることを示唆しています。私は間違って何をしていますか?
UrlConnectionのキーストアを構成する必要があります。 https://stackoverflow.com/questions/3734613/how-to-request-a-url-that-requires-a-client-certificate-for-authentication – pedrofb