取り扱いなどの無効なSSLの証明書はApacheのHttpClient?[重複]
-
11-09-2019 - |
質問
この質問に答えはこちら
っていない、あるいは問題など多くの答えがこの問題について...ができるのか...
い:ubuntu9.10-デスクトップ-amd64+NetBeans6.7.1設置されてからoffにします。rep.が必要で接続する一部のサイトのHTTPS.んに使用さHttpClient.
からのチュートリアルを読ん:
"あなたは、JSSEのインストールが正常に完了を確保HTTP通信にSSLを必要として
簡単なプレHTTPコミュニケーション" 一部の例:
HttpClient httpclient = new HttpClient();
GetMethod httpget = new GetMethod("https://www.verisign.com/");
try {
httpclient.executeMethod(httpget);
System.out.println(httpget.getStatusLine());
} finally {
httpget.releaseConnection();
}
現在までに書いています:
HttpClient client = new HttpClient();
HttpMethod get = new GetMethod("https://mms.nw.ru");
//get.setDoAuthentication(true);
try {
int status = client.executeMethod(get);
System.out.println(status);
BufferedInputStream is = new BufferedInputStream(get.getResponseBodyAsStream());
int r=0;byte[] buf = new byte[10];
while((r = is.read(buf)) > 0) {
System.out.write(buf,0,r);
}
} catch(Exception ex) {
ex.printStackTrace();
}
その結果をセットにしたエラー:
javax.net.ssl.SSLHandshakeException: sun.security.validator.ValidatorException: PKIX path building failed: sun.security.provider.certpath.SunCertPathBuilderException: unable to find valid certification path to requested target
at sun.security.ssl.Alerts.getSSLException(Alerts.java:192)
at sun.security.ssl.SSLSocketImpl.fatal(SSLSocketImpl.java:1627)
at sun.security.ssl.Handshaker.fatalSE(Handshaker.java:204)
at sun.security.ssl.Handshaker.fatalSE(Handshaker.java:198)
at sun.security.ssl.ClientHandshaker.serverCertificate(ClientHandshaker.java:994)
at sun.security.ssl.ClientHandshaker.processMessage(ClientHandshaker.java:142)
at sun.security.ssl.Handshaker.processLoop(Handshaker.java:533)
at sun.security.ssl.Handshaker.process_record(Handshaker.java:471)
at sun.security.ssl.SSLSocketImpl.readRecord(SSLSocketImpl.java:904)
at sun.security.ssl.SSLSocketImpl.performInitialHandshake(SSLSocketImpl.java:1132)
at sun.security.ssl.SSLSocketImpl.writeRecord(SSLSocketImpl.java:643)
at sun.security.ssl.AppOutputStream.write(AppOutputStream.java:78)
at java.io.BufferedOutputStream.flushBuffer(BufferedOutputStream.java:82)
at java.io.BufferedOutputStream.flush(BufferedOutputStream.java:140)
at org.apache.commons.httpclient.HttpConnection.flushRequestOutputStream(HttpConnection.java:828)
at org.apache.commons.httpclient.HttpMethodBase.writeRequest(HttpMethodBase.java:2116)
at org.apache.commons.httpclient.HttpMethodBase.execute(HttpMethodBase.java:1096)
at org.apache.commons.httpclient.HttpMethodDirector.executeWithRetry(HttpMethodDirector.java:398)
at org.apache.commons.httpclient.HttpMethodDirector.executeMethod(HttpMethodDirector.java:171)
at org.apache.commons.httpclient.HttpClient.executeMethod(HttpClient.java:397)
at org.apache.commons.httpclient.HttpClient.executeMethod(HttpClient.java:323)
at simpleapachehttp.Main.main(Main.java:41)
Caused by: sun.security.validator.ValidatorException: PKIX path building failed: sun.security.provider.certpath.SunCertPathBuilderException: unable to find valid certification path to requested target
at sun.security.validator.PKIXValidator.doBuild(PKIXValidator.java:302)
at sun.security.validator.PKIXValidator.engineValidate(PKIXValidator.java:205)
at sun.security.validator.Validator.validate(Validator.java:235)
at sun.security.ssl.X509TrustManagerImpl.validate(X509TrustManagerImpl.java:147)
at sun.security.ssl.X509TrustManagerImpl.checkServerTrusted(X509TrustManagerImpl.java:230)
at sun.security.ssl.X509TrustManagerImpl.checkServerTrusted(X509TrustManagerImpl.java:270)
at sun.security.ssl.ClientHandshaker.serverCertificate(ClientHandshaker.java:973)
... 17 more
Caused by: sun.security.provider.certpath.SunCertPathBuilderException: unable to find valid certification path to requested target
at sun.security.provider.certpath.SunCertPathBuilder.engineBuild(SunCertPathBuilder.java:191)
at java.security.cert.CertPathBuilder.build(CertPathBuilder.java:255)
at sun.security.validator.PKIXValidator.doBuild(PKIXValidator.java:297)
... 23 more
けんけんこんばんはいを簡単なSSL接続?(おそらくないのKeyManagerおよび信頼マネージャ。です。)
解決
https://mms.nw.ru 用途自己署名証明書が含まれていないデフォルトの設定の信頼マネージャ。
る必要がありまで、かつ以下のいずれかの:
設定のSSLContextとTrustManagerを受け入れる意cert(下記参照)
設定のSSLContext適切な信頼れるお店でおcert
追加の証明書でこのサイトのデフォルトのjavaの信頼ます。
ここではサンプルプログラムを作成し(主に価値がない)SSLすることで対応してくれcert:
import java.net.URL;
import java.security.SecureRandom;
import java.security.cert.CertificateException;
import java.security.cert.X509Certificate;
import javax.net.ssl.HostnameVerifier;
import javax.net.ssl.HttpsURLConnection;
import javax.net.ssl.KeyManager;
import javax.net.ssl.SSLContext;
import javax.net.ssl.SSLSession;
import javax.net.ssl.TrustManager;
import javax.net.ssl.X509TrustManager;
public class SSLTest {
public static void main(String [] args) throws Exception {
// configure the SSLContext with a TrustManager
SSLContext ctx = SSLContext.getInstance("TLS");
ctx.init(new KeyManager[0], new TrustManager[] {new DefaultTrustManager()}, new SecureRandom());
SSLContext.setDefault(ctx);
URL url = new URL("https://mms.nw.ru");
HttpsURLConnection conn = (HttpsURLConnection) url.openConnection();
conn.setHostnameVerifier(new HostnameVerifier() {
@Override
public boolean verify(String arg0, SSLSession arg1) {
return true;
}
});
System.out.println(conn.getResponseCode());
conn.disconnect();
}
private static class DefaultTrustManager implements X509TrustManager {
@Override
public void checkClientTrusted(X509Certificate[] arg0, String arg1) throws CertificateException {}
@Override
public void checkServerTrusted(X509Certificate[] arg0, String arg1) throws CertificateException {}
@Override
public X509Certificate[] getAcceptedIssuers() {
return null;
}
}
}
他のヒント
https://mms.nw.ru が、証明書を使いなが発行した認証局。その結果を追加する必要がありますの証明書を信頼されるJavaキーストアとしての説明 を見つけることができず有効な証明書パスを求めの対象:
する場合、クライアント動作 SSLを有効にサーバの実行 httpsプロトコルを取得しましたエラー 'を見つけることができず有効な認証 パスへの要求ターゲット"の場合 サーバ証明書が発行されないよ 認証局が自 署名または発行した民間のCMSです。
パニックにならないでください.すべての必要ない 追加のサーバ証明書を 信頼されるJavaキーストアが貴社のクライアント はJavaで記述された.るでしょう どんな風にしてできない場合はアクセス を機に、サーバ れます。ある単純なプログラム させていただきますのでをダウンロードしてください Java プログラム 走
% java InstallCert _web_site_hostname_
このプログラムの開への接続 指定されたホストを開始SSL 握手を交わした。ほかの例外 スタックトレースのエラーが発生した フォームを目指しています。証明書を使用 のサーバーです。現在で捕鯨を追加す 証明書を信頼されるKeyStore.
いささかの変更を、心を入力 q.またの追加 証明書を入力'1'、またはその他の 番号の追加その他の証明書 でもCA証明書、通常 んでいます。いただ してお好みのプログラム 表示の完全な証明書と その後追加しましたJavaのキーストアの名前 'jssecacerts'現在の ディレクトリです。
ご利用にあたりのプログラムのいずれか 設定のJSSEを用いて信託 店舗またはコピーで $JAVA_HOME/jre/lib/securityディレクトリです。したい場合はすべてのJavaアプリケーションのシームレスに を認識する証明書として信頼される だけでなくJSSE、このまま 上書きしcacertsファイル ディレクトリです。
して、JSSEできる 完全ハンドシェークのホスト るかを確認することができるの プログラムです。
より詳細をチェックでき Leelandのブログ せんりき 有効な証明書パスを要請 目標'
のほか、パスカルThiventの正しい答えるか、保存の証明書からFirefox(証明書->詳細->輸出) openssl s_client
に取り込むことにより信頼のお店です。
するだけでなくこの場合に証明をいたします。ついでに最初に接続したときに、少なくともいわれている場合はエラーには、証明書の変化は予想以降に接続します。
輸入で信頼のお店使用します:
keytool -importcert -keystore truststore.jks -file servercert.pem
デフォルトでは、デフォルトの信頼るべき店 lib/security/cacerts
そのパスワード changeit
, 参照 JSSEの参照ガイド ます。
だいたいできる証明書の世界が、これらの接続では、この作成 SSLContext
す:
TrustManagerFactory tmf = TrustManagerFactory
.getInstance(TrustManagerFactory.getDefaultAlgorithm());
KeyStore ks = KeyStore.getInstance("JKS");
FileInputStream fis = new FileInputStream("/.../truststore.jks");
ks.load(fis, null);
// or ks.load(fis, "thepassword".toCharArray());
fis.close();
tmf.init(ks);
SSLContext sslContext = SSLContext.getInstance("TLS");
sslContext.init(null, tmf.getTrustManagers(), null);
その後、必要なセットアップすることができApache HTTPト3.xを実施している場合はその SecureProtocolSocketFactory
この SSLContext
.(例はあるもの こちらの).
Apache HTTPト4.x(以外の初版はサービスへのリンクを渡すことで、 SSLContext
.
はApacheのHttpClient 4.5方法:
org.apache.http.ssl.SSLContextBuilder sslContextBuilder = SSLContextBuilder.create();
sslContextBuilder.loadTrustMaterial(new org.apache.http.conn.ssl.TrustSelfSignedStrategy());
SSLContext sslContext = sslContextBuilder.build();
org.apache.http.conn.ssl.SSLConnectionSocketFactory sslSocketFactory =
new SSLConnectionSocketFactory(sslContext, new org.apache.http.conn.ssl.DefaultHostnameVerifier());
HttpClientBuilder httpClientBuilder = HttpClients.custom().setSSLSocketFactory(sslSocketFactory);
httpClient = httpClientBuilder.build();
注:org.apache.http.conn.ssl.SSLContextBuilder
が に廃止されており、org.apache.http.ssl.SSLContextBuilder
は新しいもの(通知conn
は後者のパッケージ名から欠落している)である。
から http://hc.apache.org/httpclient-3.x/sslguide.html:
Protocol.registerProtocol("https",
new Protocol("https", new MySSLSocketFactory(), 443));
HttpClient httpclient = new HttpClient();
GetMethod httpget = new GetMethod("https://www.whatever.com/");
try {
httpclient.executeMethod(httpget);
System.out.println(httpget.getStatusLine());
} finally {
httpget.releaseConnection();
}
がMySSLSocketFactoryして行われます)。 こちらの.で参照 TrustManager
, るを修正することができ信頼すべてが必ずこのことを考え!)
Apache HttpClient4.5+&Java8:
SSLContext sslContext = SSLContexts.custom()
.loadTrustMaterial((chain, authType) -> true).build();
SSLConnectionSocketFactory sslConnectionSocketFactory =
new SSLConnectionSocketFactory(sslContext, new String[]
{"SSLv2Hello", "SSLv3", "TLSv1","TLSv1.1", "TLSv1.2" }, null,
NoopHostnameVerifier.INSTANCE);
CloseableHttpClient client = HttpClients.custom()
.setSSLSocketFactory(sslConnectionSocketFactory)
.build();
が合わない場合にはHttpClient用ConnectionManager探求のための接続例このように:
PoolingHttpClientConnectionManager connectionManager = new
PoolingHttpClientConnectionManager();
CloseableHttpClient client = HttpClients.custom()
.setConnectionManager(connectionManager)
.build();
の HttpClients.custom().setSSLSocketFactory(sslConnectionSocketFactory)
効きません, の問題が解決されます。
このHttpClientが使用されconnectionManager探求のための接続の指定されたconnectionManagerん登録当社のカスタマイズSSLConnectionSocketFactory.を解決することにご登録いただき、カスタマイズSSLConnectionSocketFactoryのconnectionManager.正しいコードのようになります:
PoolingHttpClientConnectionManager connectionManager = new
PoolingHttpClientConnectionManager(RegistryBuilder.
<ConnectionSocketFactory>create()
.register("http",PlainConnectionSocketFactory.getSocketFactory())
.register("https", sslConnectionSocketFactory).build());
CloseableHttpClient client = HttpClients.custom()
.setConnectionManager(connectionManager)
.build();
は、Java証明書ストアを持っていたら(使って、の上記で作成した偉大なのInstallCertクラス)は、Javaで「は、javax.net.ssl.trustStore」のparamを渡すことによって、それを使用するには、Javaを得ることができます起動。
例:
java -Djavax.net.ssl.trustStore=/path/to/jssecacerts MyClassName
あなたは自己署名テスト本命とに実行することがもう一つの問題はこれです:
にjava.io.IOException:HTTPSホスト名が間違っている:でなければなりません...
このエラーは、HTTPSのURLにアクセスしようとしている場合に発生します。あなたはすでにあなたのJREのキーストアへのサーバー証明書をインストールしている場合があります。しかし、このエラーは、サーバー証明書の名前がURLに記載されているサーバーの実際のドメイン名と一致しないことを意味します。あなたは非CA発行された証明書を使用しているとき、これは通常起こります。
この例では、証明書のサーバ名を無視してHttpsURLConnectionのDefaultHostnameVerifierを書き込む方法を示します:
http://www.java-samples.com/showtutorial.php? tutorialid = 211 の
ここで答えを貼り付ける:
4.5.5はApacheのHttpClientでの
無効なSSLを処理する方法Apacheのクライアントとの証明書4.5.5ですか
HttpClient httpClient = HttpClients
.custom()
.setSSLContext(new SSLContextBuilder().loadTrustMaterial(null, TrustAllStrategy.INSTANCE).build())
.setSSLHostnameVerifier(NoopHostnameVerifier.INSTANCE)
.build();
簡単にあなたがすべてのチェックを投げずに、実行時に信頼ホストを追加する方法については、こちらのコードを試してください:<のhref = "http://code.google.com/p/self-signed-cert-trust-マネージャ/」のrel = "nofollowを"> http://code.google.com/p/self-signed-cert-trust-manager/ を。
EasySSLProtocolSocketFactoryは私に問題を与えていました。
まず、あなたがそれを登録する必要があります:
Protocol.registerProtocol("https", new Protocol("https", new TrustAllSSLSocketFactory(), 443));
HttpClient client = new HttpClient();
...
次にProtocolSocketFactoryを実装します:
class TrustAllSSLSocketFactory implements ProtocolSocketFactory {
public static final TrustManager[] TRUST_ALL_CERTS = new TrustManager[]{
new X509TrustManager() {
public void checkClientTrusted(final X509Certificate[] certs, final String authType) {
}
public void checkServerTrusted(final X509Certificate[] certs, final String authType) {
}
public X509Certificate[] getAcceptedIssuers() {
return null;
}
}
};
private TrustManager[] getTrustManager() {
return TRUST_ALL_CERTS;
}
public Socket createSocket(final String host, final int port, final InetAddress clientHost,
final int clientPort) throws IOException {
return getSocketFactory().createSocket(host, port, clientHost, clientPort);
}
@Override
public Socket createSocket(final String host, final int port, final InetAddress localAddress,
final int localPort, final HttpConnectionParams params) throws IOException {
return createSocket(host, port);
}
public Socket createSocket(final String host, final int port) throws IOException {
return getSocketFactory().createSocket(host, port);
}
private SocketFactory getSocketFactory() throws UnknownHostException {
TrustManager[] trustAllCerts = getTrustManager();
try {
SSLContext context = SSLContext.getInstance("SSL");
context.init(null, trustAllCerts, new SecureRandom());
final SSLSocketFactory socketFactory = context.getSocketFactory();
HttpsURLConnection.setDefaultSSLSocketFactory(socketFactory);
return socketFactory;
} catch (NoSuchAlgorithmException | KeyManagementException exception) {
throw new UnknownHostException(exception.getMessage());
}
}
}
注:これは、HttpClientを3.1とJava 8
でありますこのリンクには、あなたが一歩一歩を持つ必要性を説明しています。あなたは本当に心配していない場合はその証明書を、あなたは下のリンクでの処理を進めることができます。
あなたが、これは危険な操作ですので、あなたが何をしているかをダブルチェックしたい場合があります。
InstallCert
ファイルを生成して行うためにjssecacerts
を使用しました
-Djavax.net.ssl.trustStore=/path/to/jssecacerts
は素晴らしい仕事ます。
私はHTTPClientの3.1.xへのuseingよ、これは私のために動作します。
try {
SSLContext sslContext = SSLContext.getInstance("TLS");
TrustManager trustManager = new X509TrustManager() {
@Override
public void checkClientTrusted(X509Certificate[] x509Certificates, String s) throws CertificateException {
}
@Override
public void checkServerTrusted(X509Certificate[] x509Certificates, String s) throws CertificateException {
}
@Override
public X509Certificate[] getAcceptedIssuers() {
return null;
}
};
sslContext.init(null, new TrustManager[]{trustManager}, null);
SslContextSecureProtocolSocketFactory socketFactory = new SslContextSecureProtocolSocketFactory(sslContext,false);
Protocol.registerProtocol("https", new Protocol("https", (ProtocolSocketFactory) socketFactory, 443));//同样会影响到HttpUtils
} catch (Throwable e) {
e.printStackTrace();
}
public class SslContextSecureProtocolSocketFactory implements SecureProtocolSocketFactory {
private SSLContext sslContext;
private boolean verifyHostname;
public SslContextSecureProtocolSocketFactory(SSLContext sslContext, boolean verifyHostname) {
this.verifyHostname = true;
this.sslContext = sslContext;
this.verifyHostname = verifyHostname;
}
public SslContextSecureProtocolSocketFactory(SSLContext sslContext) {
this(sslContext, true);
}
public SslContextSecureProtocolSocketFactory(boolean verifyHostname) {
this((SSLContext)null, verifyHostname);
}
public SslContextSecureProtocolSocketFactory() {
this((SSLContext)null, true);
}
public synchronized void setHostnameVerification(boolean verifyHostname) {
this.verifyHostname = verifyHostname;
}
public synchronized boolean getHostnameVerification() {
return this.verifyHostname;
}
public Socket createSocket(String host, int port, InetAddress clientHost, int clientPort) throws IOException, UnknownHostException {
SSLSocketFactory sf = this.getSslSocketFactory();
SSLSocket sslSocket = (SSLSocket)sf.createSocket(host, port, clientHost, clientPort);
this.verifyHostname(sslSocket);
return sslSocket;
}
public Socket createSocket(String host, int port, InetAddress localAddress, int localPort, HttpConnectionParams params) throws IOException, UnknownHostException, ConnectTimeoutException {
if(params == null) {
throw new IllegalArgumentException("Parameters may not be null");
} else {
int timeout = params.getConnectionTimeout();
Socket socket = null;
SSLSocketFactory socketfactory = this.getSslSocketFactory();
if(timeout == 0) {
socket = socketfactory.createSocket(host, port, localAddress, localPort);
} else {
socket = socketfactory.createSocket();
InetSocketAddress localaddr = new InetSocketAddress(localAddress, localPort);
InetSocketAddress remoteaddr = new InetSocketAddress(host, port);
socket.bind(localaddr);
socket.connect(remoteaddr, timeout);
}
this.verifyHostname((SSLSocket)socket);
return socket;
}
}
public Socket createSocket(String host, int port) throws IOException, UnknownHostException {
SSLSocketFactory sf = this.getSslSocketFactory();
SSLSocket sslSocket = (SSLSocket)sf.createSocket(host, port);
this.verifyHostname(sslSocket);
return sslSocket;
}
public Socket createSocket(Socket socket, String host, int port, boolean autoClose) throws IOException, UnknownHostException {
SSLSocketFactory sf = this.getSslSocketFactory();
SSLSocket sslSocket = (SSLSocket)sf.createSocket(socket, host, port, autoClose);
this.verifyHostname(sslSocket);
return sslSocket;
}
private void verifyHostname(SSLSocket socket) throws SSLPeerUnverifiedException, UnknownHostException {
synchronized(this) {
if(!this.verifyHostname) {
return;
}
}
SSLSession session = socket.getSession();
String hostname = session.getPeerHost();
try {
InetAddress.getByName(hostname);
} catch (UnknownHostException var10) {
throw new UnknownHostException("Could not resolve SSL sessions server hostname: " + hostname);
}
X509Certificate[] certs = (X509Certificate[])((X509Certificate[])session.getPeerCertificates());
if(certs != null && certs.length != 0) {
X500Principal subjectDN = certs[0].getSubjectX500Principal();
List cns = this.getCNs(subjectDN);
boolean foundHostName = false;
Iterator i$ = cns.iterator();
AntPathMatcher matcher = new AntPathMatcher();
while(i$.hasNext()) {
String cn = (String)i$.next();
if(matcher.match(cn.toLowerCase(),hostname.toLowerCase())) {
foundHostName = true;
break;
}
}
if(!foundHostName) {
throw new SSLPeerUnverifiedException("HTTPS hostname invalid: expected \'" + hostname + "\', received \'" + cns + "\'");
}
} else {
throw new SSLPeerUnverifiedException("No server certificates found!");
}
}
private List<String> getCNs(X500Principal subjectDN) {
ArrayList cns = new ArrayList();
StringTokenizer st = new StringTokenizer(subjectDN.getName(), ",");
while(st.hasMoreTokens()) {
String cnField = st.nextToken();
if(cnField.startsWith("CN=")) {
cns.add(cnField.substring(3));
}
}
return cns;
}
protected SSLSocketFactory getSslSocketFactory() {
SSLSocketFactory sslSocketFactory = null;
synchronized(this) {
if(this.sslContext != null) {
sslSocketFactory = this.sslContext.getSocketFactory();
}
}
if(sslSocketFactory == null) {
sslSocketFactory = (SSLSocketFactory)SSLSocketFactory.getDefault();
}
return sslSocketFactory;
}
public synchronized void setSSLContext(SSLContext sslContext) {
this.sslContext = sslContext;
}
}
のHttpClientのために、私たちはこれを行うことができます
SSLContext ctx = SSLContext.getInstance("TLS");
ctx.init(new KeyManager[0], new TrustManager[] {new DefaultTrustManager()}, new SecureRandom());
SSLContext.setDefault(ctx);
String uri = new StringBuilder("url").toString();
HostnameVerifier hostnameVerifier = new HostnameVerifier() {
@Override
public boolean verify(String arg0, SSLSession arg1) {
return true;
}
};
HttpClient client = HttpClientBuilder.create().setSSLContext(ctx)
.setSSLHostnameVerifier(hostnameVerifier).build()
InstallCert.javaプログラムファイルを使用してSSL証明書を作成するには、Javaの1.7については、以下の指示に従っています。
https://github.com/escline/InstallCertする
Tomcatを再起動する必要があります。
DefaultTrustManagerと一緒に、以下の使用され、それが魅力のようにHTTPClientで働いていました。おかげでトン! @Kevinおよび他のすべての貢献
SSLContext ctx = null;
SSLConnectionSocketFactory sslsf = null;
try {
ctx = SSLContext.getInstance("TLS");
ctx.init(new KeyManager[0], new TrustManager[] {new DefaultTrustManager()}, new SecureRandom());
SSLContext.setDefault(ctx);
sslsf = new SSLConnectionSocketFactory(
ctx,
new String[] { "TLSv1" },
null,
SSLConnectionSocketFactory.getDefaultHostnameVerifier());
} catch (Exception e) {
e.printStackTrace();
}
CloseableHttpClient client = HttpClients.custom()
.setSSLSocketFactory(sslsf)
.build();
私は同じ問題に直面して起こった、すべての私の輸入突然のすべてが欠落していました。私は私の.m2フォルダ内のすべてのコンテンツを削除しようとしました。そして、再インポートするすべてのものにしようと、まだ何も働きました。 最後に、私はIDEはそれが私のブラウザでダウンロードすることができなかったことを不平を言ったためにウェブサイトをオープンしましたしました。そして、それは使用していた証明書を見て、私の
で見ました$ keytool -v -list PATH_TO_JAVA_KEYSTORE
私のキーストアへのパスだった/Library/Java/JavaVirtualMachines/jdk1.8.0_171.jdk/Contents/Home/jre/lib/security/cacerts
その特定の証明書がありませんでした。
あなたがしなければならないすべては再びJAVA JVMキーストアに証明書を入れています。 これは、以下のコマンドを使用して行うことができます。
$ keytool -import -alias ANY_NAME_YOU_WANT_TO_GIVE -file PATH_TO_YOUR_CERTIFICATE -keystore PATH_OF_JAVA_KEYSTORE
それはパスワードを要求した場合、、デフォルトのパスワード「changeitと」を試します 上記のコマンドを実行するときには、権限エラーが発生した場合。 Windowsで管理モードで開きます。 MacとUNIXでsudoを使用します。
あなたが成功したキーを追加した後、 あなたが使用してそれを表示することができます:
$ keytool -v -list /Library/Java/JavaVirtualMachines/jdk1.8.0_171.jdk/Contents/Home/jre/lib/security/cacerts
あなたが見ることができますだけでSHA-1 tehのコマンドを使用して
$ keytool -list /Library/Java/JavaVirtualMachines/jdk1.8.0_171.jdk/Contents/Home/jre/lib/security/cacerts