Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/384.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/amazon-web-services/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 没有可用的X509TrustManager实现_Java_Amazon Web Services_Ssl - Fatal编程技术网

Java 没有可用的X509TrustManager实现

Java 没有可用的X509TrustManager实现,java,amazon-web-services,ssl,Java,Amazon Web Services,Ssl,我正在调用一个AWSAPI,我一直遇到以下错误 Exception in thread "main" com.amazonaws.AmazonClientException: Unable to execute HTTP request: java.security.cert.CertificateException: No X509TrustManager implementation available at com.amazonaws.http.AmazonHttpClien

我正在调用一个AWSAPI,我一直遇到以下错误

Exception in thread "main" com.amazonaws.AmazonClientException: Unable to execute HTTP request: java.security.cert.CertificateException: No X509TrustManager implementation available
       at com.amazonaws.http.AmazonHttpClient.executeHelper(AmazonHttpClient.java:709)
       at com.amazonaws.http.AmazonHttpClient.doExecute(AmazonHttpClient.java:449)
       at com.amazonaws.http.AmazonHttpClient.executeWithTimer(AmazonHttpClient.java:411)
       at com.amazonaws.http.AmazonHttpClient.execute(AmazonHttpClient.java:360)
       at com.amazonaws.services.kms.AWSKMSClient.doInvoke(AWSKMSClient.java:2723)
       at com.amazonaws.services.kms.AWSKMSClient.invoke(AWSKMSClient.java:2693)
       at com.amazonaws.services.kms.AWSKMSClient.generateDataKey(AWSKMSClient.java:1488)
       at com.infor.aws.KMSTest.createDEK(KMSTest.java:217)
       at com.infor.aws.KMSTest.main(KMSTest.java:144)
Caused by: javax.net.ssl.SSLHandshakeException: java.security.cert.CertificateException: No X509TrustManager implementation available
       at sun.security.ssl.Alerts.getSSLException(Alerts.java:192)
       at sun.security.ssl.SSLSocketImpl.fatal(SSLSocketImpl.java:1949)
       at sun.security.ssl.Handshaker.fatalSE(Handshaker.java:302)
       at sun.security.ssl.Handshaker.fatalSE(Handshaker.java:296)
       at sun.security.ssl.ClientHandshaker.serverCertificate(ClientHandshaker.java:1509)
       at sun.security.ssl.ClientHandshaker.processMessage(ClientHandshaker.java:216)
       at sun.security.ssl.Handshaker.processLoop(Handshaker.java:979)
       at sun.security.ssl.Handshaker.process_record(Handshaker.java:914)
       at sun.security.ssl.SSLSocketImpl.readRecord(SSLSocketImpl.java:1062)
       at sun.security.ssl.SSLSocketImpl.performInitialHandshake(SSLSocketImpl.java:1375)
       at sun.security.ssl.SSLSocketImpl.startHandshake(SSLSocketImpl.java:1403)
       at sun.security.ssl.SSLSocketImpl.startHandshake(SSLSocketImpl.java:1387)
       at org.apache.http.conn.ssl.SSLConnectionSocketFactory.createLayeredSocket(SSLConnectionSocketFactory.java:394)
       at org.apache.http.conn.ssl.SSLConnectionSocketFactory.connectSocket(SSLConnectionSocketFactory.java:353)
       at com.amazonaws.http.conn.ssl.SdkTLSSocketFactory.connectSocket(SdkTLSSocketFactory.java:132)
       at org.apache.http.impl.conn.DefaultHttpClientConnectionOperator.connect(DefaultHttpClientConnectionOperator.java:141)
       at org.apache.http.impl.conn.PoolingHttpClientConnectionManager.connect(PoolingHttpClientConnectionManager.java:353)
       at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
       at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
       at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
       at java.lang.reflect.Method.invoke(Method.java:498)
       at com.amazonaws.http.conn.ClientConnectionManagerFactory$Handler.invoke(ClientConnectionManagerFactory.java:76)
       at com.amazonaws.http.conn.$Proxy2.connect(Unknown Source)
       at org.apache.http.impl.execchain.MainClientExec.establishRoute(MainClientExec.java:380)
       at org.apache.http.impl.execchain.MainClientExec.execute(MainClientExec.java:236)
       at org.apache.http.impl.execchain.ProtocolExec.execute(ProtocolExec.java:184)
       at org.apache.http.impl.client.InternalHttpClient.doExecute(InternalHttpClient.java:184)
       at org.apache.http.impl.client.CloseableHttpClient.execute(CloseableHttpClient.java:82)
       at org.apache.http.impl.client.CloseableHttpClient.execute(CloseableHttpClient.java:55)
       at com.amazonaws.http.apache.client.impl.SdkHttpClient.execute(SdkHttpClient.java:72)
       at com.amazonaws.http.AmazonHttpClient.executeOneRequest(AmazonHttpClient.java:854)
       at com.amazonaws.http.AmazonHttpClient.executeHelper(AmazonHttpClient.java:697)
       ... 8 more
Caused by: java.security.cert.CertificateException: No X509TrustManager implementation available
       at sun.security.ssl.DummyX509TrustManager.checkServerTrusted(SSLContextImpl.java:1119)
       at sun.security.ssl.ClientHandshaker.serverCertificate(ClientHandshaker.java:1491)
       ... 35 more
我在Stackoverflow上浏览了多个线程,并添加了所有必需的truststore、truststoretype系统属性。这个我已经试过了。但一切都不起作用。有人见过这个吗?我是这样调用它的

TrustManagerFactory tmf = TrustManagerFactory
                                   .getInstance(TrustManagerFactory.getDefaultAlgorithm());

KeyStore ks  = KeyStore.getInstance("BCFKS");
ks.load(new FileInputStream("<jre-home>\\\\lib\\\\security\\\\cacerts"), "changeit".toCharArray());
tmf.init(ks);

 // Get hold of the trust manager
X509TrustManager x509Tm = null;
for (TrustManager tm : tmf.getTrustManagers()) {
     if (tm instanceof X509TrustManager) {
          x509Tm = (X509TrustManager) tm;
          break;
     }
}
TrustManagerFactory tmf=TrustManagerFactory
.getInstance(TrustManagerFactory.getDefaultAlgorithm());
KeyStore ks=KeyStore.getInstance(“BCFKS”);
load(新文件输入流(“\\\\lib\\\\security\\\\cacerts”),“changeit.toCharArray());
tmf.init(ks);
//找到信托经理
X509TrustManager x509Tm=null;
for(TrustManager tm:tmf.getTrustManagers()){
if(X509TrustManager的tm实例){
x509Tm=(X509TrustManager)tm;
打破
}
}

当我们在设置信任存储密码后将AWS客户端初始化移动到一个位置时,这一问题得到了解决。在我的代码中,我创建AWS客户端太早了

在调试了几个小时后,我发现它是一个损坏的密钥库。检查是否可以使用keytool命令列出密钥库的内容。

您是如何调用它的?BCFKS for bouncy castle?如果要使用默认类型的ks,
KeyStore ks=KeyStore.getInstance(KeyStore.getDefaultType())
Yes BCFKS for bouncy castleTry打印所有信任管理器,并查看是否有多个。第一个似乎是
DummyX509TrustManager
。如果provider为null,您是否尝试将其设置为Security?如果为null,则
Security.addProvider(newyourprovider())