相关疑难解决方法(0)

解决javax.net.ssl.SSLHandshakeException:sun.security.validator.ValidatorException:PKIX路径构建失败错误?

编辑: -尝试格式化问题并在我的博客中以更明显的方式接受答案

这是原始问题.

我收到此错误:

详细消息sun.security.validator.ValidatorException:PKIX路径构建失败:
sun.security.provider.certpath.SunCertPathBuilderException:无法找到请求目标的有效证书路径

导致javax.net.ssl.SSLHandshakeException:sun.security.validator.ValidatorException:PKIX路径构建失败:sun.security.provider.certpath.SunCertPathBuilderException:无法找到所请求目标的有效证书路径

我使用Tomcat 6作为网络服务器.我有两个HTTPS Web应用程序安装在不同端口上但位于同一台机器上的不同Tomcats上.说App1(port 8443)App2(port 443).App1连接到App2.当App1所连接到App2我得到上述错误.我知道这是一个非常常见的错误,所以在不同的论坛和网站上遇到了很多解决方案.我有server.xml两个Tomcats 的以下条目:

keystoreFile="c:/.keystore" 
keystorePass="changeit"
Run Code Online (Sandbox Code Playgroud)

每个站点都说同样的原因,即app2提供的证书不在app1 jvm的可信存储中.当我试图在IE浏览器中访问相同的URL时,这似乎也是正确的,它可以工作(加热,这个网站的安全证书存在问题.在这里我说继续这个网站).但是当Java客户端(在我的情况下)遇到相同的URL时,我得到上述错误.所以把它放在信任库中我试过这三个选项:

选项1

System.setProperty("javax.net.ssl.trustStore", "C:/.keystore");
System.setProperty("javax.net.ssl.trustStorePassword", "changeit");
Run Code Online (Sandbox Code Playgroud)

Option2 在环境变量中设置如下

CATALINA_OPTS -- param name
-Djavax.net.ssl.trustStore=C:\.keystore -Djavax.net.ssl.trustStorePassword=changeit ---param value
Run Code Online (Sandbox Code Playgroud)

选项3 在环境变量中设置如下

JAVA_OPTS -- param name
-Djavax.net.ssl.trustStore=C:\.keystore -Djavax.net.ssl.trustStorePassword=changeit ---param value
Run Code Online (Sandbox Code Playgroud)

但没有任何效果.

最后工作的 是执行如何使用Apache HttpClient处理无效SSL证书中建议的Java方法由Pascal Thivent执行,即执行程序InstallCert.

但这种方法适用于devbox设置,但我无法在生产环境中使用它.

我很奇怪,为什么上面提到的三种方法时,我已经中提到的相同值没有工作server.xmlapp2服务器和相同的价值观信任设置

System.setProperty("javax.net.ssl.trustStore", "C:/.keystore") and System.setProperty("javax.net.ssl.trustStorePassword", "changeit"); …

java ssl https

392
推荐指数
11
解决办法
101万
查看次数

如何获取默认java安装的cacerts的位置?

我正在研究如何获取cacerts默认java安装的位置,当您没有JAVA_HOME或已JRE_HOME定义时.

我需要一个至少适用于OS X和的解决方案Linux.

是.java -v假设工作:)

java security

75
推荐指数
6
解决办法
12万
查看次数

SSL证书验证:javax.net.ssl.SSLHandshakeException

我试图通过调用HTTPS REST API Jersey Client.在开发过程中,我偶然发现了以下错误:

Exception in thread "main" com.sun.jersey.api.client.ClientHandlerException: javax.net.ssl.SSLHandshakeException: java.security.cert.CertificateException: No name matching mvn.signify.abc.com found
    at com.sun.jersey.client.urlconnection.URLConnectionClientHandler.handle(URLConnectionClientHandler.java:149)
    at com.sun.jersey.api.client.Client.handle(Client.java:648)
    at com.sun.jersey.api.client.WebResource.handle(WebResource.java:670)
    at com.sun.jersey.api.client.WebResource.access$200(WebResource.java:74)
    at com.sun.jersey.api.client.WebResource$Builder.get(WebResource.java:503)
    at com.lftechnology.sbworkbench.utility.utils.PingFederateUtility.main(PingFederateUtility.java:32)
Caused by: javax.net.ssl.SSLHandshakeException: java.security.cert.CertificateException: No name matching mvn.signify.abc.com found
Run Code Online (Sandbox Code Playgroud)

所以我用Google搜索了一下,发现了大量的解决方案,实际上是有效的.

  1. 使用Jersey客户端的HTTPS
  2. https://gist.github.com/outbounder/1069465
  3. 如何修复"java.security.cert.CertificateException:没有主题替代名称出现"错误?
  4. http://www.mkyong.com/webservices/jax-ws/java-security-cert-certificateexception-no-name-matching-localhost-found/
  5. http://java.globinch.com/enterprise-java/security/fix-java-security-certificate-exception-no-matching-localhost-found/

他们处于不同的领域,但他们有一个共同的解决方案来解决它.

脚本

我目前在开发环境中使用自创的自签名证书.因此它必然会出现问题.

上述解决方案侧重于跳过/允许验证所有证书.

但是当我将它移动到生产环境时,我可以从可信赖的来源访问有效签名证书.

  1. 当我转向生产时,这些解决方案是否有任何帮助?
  2. 可以跳过SSL验证吗?
  3. 为开发和生产环境实现通用解决方案的另一种替代方法是什么?

PS

我使用的解决方案是,

try
{
    // Create a trust manager that does not validate certificate chains
    TrustManager[] trustAllCerts = new TrustManager[] {new X509TrustManager() {
        public java.security.cert.X509Certificate[] getAcceptedIssuers() …
Run Code Online (Sandbox Code Playgroud)

java security ssl https

8
推荐指数
2
解决办法
2万
查看次数

Java CertificateException“找不到与IP地址匹配的使用者替代名称...”

我正在尝试在我的Web服务器中实现自签名证书,并且它已经在使用firefox和chrome(都来自服务器本身和远程计算机)了……但是我无法使其与Java一起使用。我已经创建了一个包含证书的密钥库文件,但是每次尝试连接到服务器时,它都会给我一个SSLHandshakeException:javax.net.ssl.SSLHandshakeException: java.security.cert.CertificateException: No subject alternative names matching IP address 192.168.178.71 found

我用于此测试的代码是:

public static void main(String[] args) {
         System.setProperty("javax.net.ssl.keyStore",                    HTTPStest.class.getResource("keystore.jks").getFile());
            System.setProperty("javax.net.ssl.keyStorePassword",           "lead"); 
        URL url;
            InputStream is = null;
            BufferedReader br;
            String line;

            try {
                url = new URL("https://192.168.178.71/");
                is = url.openStream();  // throws an IOException
                br = new BufferedReader(new InputStreamReader(is));

                while ((line = br.readLine()) != null) {
                    System.out.println(line);
                }
            } catch (MalformedURLException mue) {
                 mue.printStackTrace();
            } catch (IOException ioe) {
                 ioe.printStackTrace();
            } finally {
                try {
                    if (is != …
Run Code Online (Sandbox Code Playgroud)

java ip ssl certificate

8
推荐指数
2
解决办法
4万
查看次数

如何使用HTTP客户端传递客户端证书?

我想在服务A和B之间使用相互SSL身份验证.我目前正在实现从Java中的服务A传递客户端证书.我正在使用Apache DefaultHttpClient来执行我的请求.我能够从内部凭据管理器检索我的服务A的客户端证书,并将其保存为字节数组.

DefaultHttpClient client = new DefaultHttpClient();
byte [] certificate = localCertManager.retrieveCert();
Run Code Online (Sandbox Code Playgroud)

我在这方面的经验很少,我很感激你的帮助!

我想也许它应该以某种方式通过HTTP客户端或可能在标头中的参数传递.

如何使用HTTP客户端传递客户端证书?

apache ssl https ssl-certificate apache-commons-httpclient

6
推荐指数
2
解决办法
2万
查看次数

服务器访问错误:java.security.cert.CertificateException:找不到匹配repo1.maven.org的主题备用DNS名称

我正在做:sbt clean,我开始收到以下错误:

服务器访问错误:java.security.cert.CertificateException:找不到匹配repo1.maven.org的主题备用DNS名称

最近几个小时前就开始工作了.我该如何解决这个问题?我不能做一个构建.

maven sbt

6
推荐指数
1
解决办法
1321
查看次数

Kafka java消费者SSL握手错误:java.security.cert.CertificateException:不存在主题备用名称

我正在运行 kafka 2.13-2.4.1 并配置用 java 编写的 kafka 客户端(消费者)和 kafka 集群(3 个节点,每个节点有一个代理)之间的 SSL 连接。我通过Confluence 的文档使用了官方文档,该文档具有单向身份验证(客户端没有证书),但它不起作用,所以我不得不使用两种身份验证,然后消费者和生产者控制台都通过 SSL 进行良好的通信,但是当我使用我的java消费者应用程序时:

package kafkaconsumerssl;
import java.time.Duration;
import java.util.Arrays;
import java.util.Properties;

import org.apache.kafka.clients.consumer.KafkaConsumer;
import org.apache.kafka.common.KafkaException;
import org.apache.kafka.clients.consumer.ConsumerRecord;
import org.apache.kafka.clients.consumer.ConsumerRecords;

public class KafkaConsumerSSLTest {

    public static void main(String[] args) throws KafkaException {
        Properties props = new Properties();
                props.put("security.protocol", "SSL");
                props.put("ssl.endpoint.identification.algorithm=", "");
                props.put("ssl.truststore.location","/var/private/ssl/kafka.client.truststore.jks");
                props.put("ssl.truststore.password","*******");
                props.put("ssl.keystore.location", "/var/private/ssl/kafka.client.keystore.jks");
                props.put("ssl.keystore.password", "********"); 
                props.put("ssl.key.password", "*******");
                props.put("acks", "all");
                props.put("retries", "0");

                props.setProperty("zk.connnect", "172.31.32.219:2181,172.31.41.226:2181,172.31.33.133:2181");
                props.setProperty("group.id", "ConsumersTest");
                props.setProperty("auto.offset.reset","earliest");
                props.setProperty("enable.auto.commit", "true");
                    props.setProperty("auto.commit.interval.ms", "1000");
                props.setProperty("key.deserializer", "org.apache.kafka.common.serialization.StringDeserializer");
                    props.setProperty("value.deserializer", "org.apache.kafka.common.serialization.StringDeserializer"); …
Run Code Online (Sandbox Code Playgroud)

java ssl apache-kafka kafka-consumer-api apache-kafka-security

4
推荐指数
1
解决办法
2万
查看次数

错误:java.security.cert.CertificateException:非法的域名:abc_xyz.stg.myweb.com

嗨团队我在调用api时发现以下异常

https://abc_xyz.stg.myweb.com/api/AuthorizedUser?username=admin&password=admin

java.security.cert.CertificateException:非法的给定域名

使用Jersey从服务器获取响应时 当我收到邮递员的回复时,一切都很好.

为什么它是非法域名,是否浏览器不拒绝打开这个.

如果我的域名不包含下划线,则此异常不会上升.这是域名中的下划线问题吗?

java ssl

3
推荐指数
2
解决办法
2127
查看次数

在io.netty.handler.ssl.Sslcontext中禁用主机名验证

有没有办法禁用io.netty.handler.ssl.Sslcontext的主机名验证?

我有以下代码:

sslContext = SslContextBuilder
        .forClient()
        .sslProvider(SslProvider.JDK)
        .trustManager(InsecureTrustManagerFactory.INSTANCE)
        .build();

DefaultAsyncHttpClientConfig.Builder builder = new DefaultAsyncHttpClientConfig.Builder();
builder.setSslContext(sslContext);
AsyncHttpClientConfig asyncHttpClientConfig = builder.build();
Run Code Online (Sandbox Code Playgroud)

这在信任所有证书的本地主机上很好用,但是我需要连接到本地ip才能在服务上进行一些测试,但我遇到了这个异常:

java.util.concurrent.CompletionException: java.net.ConnectException: General SSLEngine problem
    at java.util.concurrent.CompletableFuture.encodeThrowable(CompletableFuture.java:292)
    at java.util.concurrent.CompletableFuture.completeThrowable(CompletableFuture.java:308)
    at java.util.concurrent.CompletableFuture.uniApply(CompletableFuture.java:593)
    at java.util.concurrent.CompletableFuture$UniApply.tryFire(CompletableFuture.java:577)
    at java.util.concurrent.CompletableFuture.postComplete(CompletableFuture.java:474)
    at java.util.concurrent.CompletableFuture.completeExceptionally(CompletableFuture.java:1977)
    at org.asynchttpclient.netty.NettyResponseFuture$1.run(NettyResponseFuture.java:269)
    at org.asynchttpclient.netty.NettyResponseFuture$2.execute(NettyResponseFuture.java:277)
    at org.asynchttpclient.future.ExecutionList.executeListener(ExecutionList.java:125)
    at org.asynchttpclient.future.ExecutionList.execute(ExecutionList.java:115)
    at org.asynchttpclient.future.AbstractListenableFuture.runListeners(AbstractListenableFuture.java:80)
    at org.asynchttpclient.netty.NettyResponseFuture.abort(NettyResponseFuture.java:252)
    at org.asynchttpclient.netty.channel.NettyConnectListener.onFailure(NettyConnectListener.java:162)
    at org.asynchttpclient.netty.channel.NettyConnectListener$1.onFailure(NettyConnectListener.java:131)
    at org.asynchttpclient.netty.SimpleFutureListener.operationComplete(SimpleFutureListener.java:26)
    at io.netty.util.concurrent.DefaultPromise.notifyListener0(DefaultPromise.java:514)
    at io.netty.util.concurrent.DefaultPromise.notifyListeners0(DefaultPromise.java:507)
    at io.netty.util.concurrent.DefaultPromise.notifyListenersNow(DefaultPromise.java:486)
    at io.netty.util.concurrent.DefaultPromise.notifyListeners(DefaultPromise.java:427)
    at io.netty.util.concurrent.DefaultPromise.tryFailure(DefaultPromise.java:129)
    at io.netty.handler.ssl.SslHandler.notifyHandshakeFailure(SslHandler.java:1235)
    at io.netty.handler.ssl.SslHandler.setHandshakeFailure(SslHandler.java:1230)
    at io.netty.handler.ssl.SslHandler.setHandshakeFailure(SslHandler.java:1205)
    at io.netty.handler.ssl.SslHandler.unwrap(SslHandler.java:1060)
    at io.netty.handler.ssl.SslHandler.decode(SslHandler.java:900)
    at io.netty.handler.codec.ByteToMessageDecoder.callDecode(ByteToMessageDecoder.java:411)
    at io.netty.handler.codec.ByteToMessageDecoder.channelRead(ByteToMessageDecoder.java:248)
    at …
Run Code Online (Sandbox Code Playgroud)

java ssl netty asynchttpclient

2
推荐指数
1
解决办法
3867
查看次数