相关疑难解决方法(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万
查看次数

使用Jersey Client忽略自签名的ssl证书

我正在使用Jersey Client库对运行在jboss上的休息服务运行测试.我使用自签名证书在服务器上运行https(在localhost上运行).

但是每当我使用https url运行测试时,我都会收到以下错误:

com.sun.jersey.api.client.ClientHandlerException: 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 com.sun.jersey.client.urlconnection.URLConnectionClientHandler.handle(URLConnectionClientHandler.java:131)
    at com.sun.jersey.api.client.Client.handle(Client.java:629)
    at com.sun.jersey.oauth.client.OAuthClientFilter.handle(OAuthClientFilter.java:137)
    at com.sun.jersey.api.client.WebResource.handle(WebResource.java:601)
    at com.sun.jersey.api.client.WebResource.access$200(WebResource.java:74)
    at com.sun.jersey.api.client.WebResource$Builder.get(WebResource.java:459)
    at test.helper.Helper.sendSignedRequest(Helper.java:174)
    ... And so on
Run Code Online (Sandbox Code Playgroud)

我知道这是因为我的自签名证书不在java密钥库中.我有什么方法可以Client不检查ssl证书的有效性,并且无论如何都使用它?

此代码将仅针对测试服务器运行,因此我不想在每次设置新测试服务器时都不必添加新的可信证书.

这是拨打电话的代码:

OAuthParameters params = new OAuthParameters();

// baseline OAuth parameters for access to resource
params.signatureMethod(props.getProperty("signature_method"));
params.consumerKey(props.getProperty("consumer_key"));
params.setToken(props.getProperty("token"));
params.setVersion("1.0");
params.nonce();

// OAuth secrets to access resource
OAuthSecrets secrets = new OAuthSecrets();
secrets.consumerSecret(props.getProperty("consumer_secret"));
secrets.setTokenSecret(props.getProperty("token_secret"));

// Jersey client to make …
Run Code Online (Sandbox Code Playgroud)

java ssl jersey ssl-certificate

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

使用HTTPS的Web服务

我有一个外部Web服务,它可以通过https工作,我可以使用wsimport生成java类但是当我调用该服务时,我会收到以下异常:

Exception in thread "main" com.sun.xml.internal.ws.client.ClientTransportException: HTTP transport error: java.net.UnknownHostException: ECM01
at com.sun.xml.internal.ws.transport.http.client.HttpClientTransport.getOutput(Unknown Source)
at com.sun.xml.internal.ws.transport.http.client.HttpTransportPipe.process(Unknown Source)
at com.sun.xml.internal.ws.transport.http.client.HttpTransportPipe.processRequest(Unknown Source)...
Caused by: java.net.UnknownHostException: ECM01
at java.net.PlainSocketImpl.connect(Unknown Source)
at java.net.SocksSocketImpl.connect(Unknown Source)
at java.net.Socket.connect(Unknown Source)
at java.net.Socket.connect(Unknown Source)
at sun.net.NetworkClient.doConnect(Unknown Source)
Run Code Online (Sandbox Code Playgroud)

我调用服务的类是这样的:

public static void main(String[] args) {
    ColleagueServiceService cs = new ColleagueServiceService();
    ColleagueService service = cs.getColleagueServicePort();

    try {
        service.getColleagues("user", "password", 1);
    } catch (Exception_Exception e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    }
}
Run Code Online (Sandbox Code Playgroud)

我尝试使用SoapUI来调用webservice,但它显示了另一个异常:

Tue Dec 18 09:40:06 BRST 2012:ERROR:org.apache.http.conn.HttpHostConnectException: …
Run Code Online (Sandbox Code Playgroud)

java wsdl web-services

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

如何为Spring RestTemplate设置值得信任的证书

我在我的应用程序中使用Spring RestTemplate来访问外部Web服务.但是,此Web服务已启用SSL,具有自签名证书(域等等)也无效.这只是在本地网络上,所以我不必担心一些安全问题.我想让Spring接受这个证书.这是我到目前为止所做的:

1.)我已将JBOSS 7配置为使用此密钥库

<connector name="https" protocol="HTTP/1.1" socket-binding="https" scheme="https" enable-lookups="false" secure="true">
    <ssl name="ssl" key-alias="my-private-key" password="rmi+ssl" certificate-key-file="../standalone/configuration/server-keystore.jks" protocol="TLSv1" verify-client="false"/>
</connector>
Run Code Online (Sandbox Code Playgroud)

2.)这是我的RestTemplate Bean的配置(我在我的类中使用自动装配)

<bean id="stringHttpConverter" class="org.springframework.http.converter.StringHttpMessageConverter"></bean>

<bean id="httpClientParams" class="org.apache.commons.httpclient.params.HttpClientParams">
    <property name="authenticationPreemptive" value="true"/>
    <property name="connectionManagerClass" value="org.apache.commons.httpclient.MultiThreadedHttpConnectionManager"/>
</bean>

<bean id="httpClient" class="org.apache.commons.httpclient.HttpClient">
    <constructor-arg ref="httpClientParams"/>
</bean>

<bean id="httpClientFactory" class="org.springframework.http.client.CommonsClientHttpRequestFactory">
    <constructor-arg ref="httpClient"/>
</bean>

<bean id="restTemplate" class="org.springframework.web.client.RestTemplate">
    <constructor-arg ref="httpClientFactory"/>
    <property name="messageConverters">
        <list>
            <!-- <ref bean="marshallingConverter" /> -->
            <ref bean="stringHttpConverter" />              
        </list>
    </property>
</bean>
Run Code Online (Sandbox Code Playgroud)

我已将服务器证书导入密钥库,它肯定在那里.还有什么我需要做的?我已经在这里检查了所有类似的问题,但没有一个有帮助.谢谢.

security ssl spring keystore resttemplate

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

强制SSL客户端套接字发送证书

我正在尝试编写一个客户端(实际上是一个中间件,它是一个实体的客户端,但也充当其他人的服务器).在其客户端容量中,它应该与另一台服务器(VMware的VirtualCenter)通信,并要求它代表它做一些事情.

为了提供更多上下文,VirtualCenter允许应用程序注册为扩展.所述申请可以在注册时注册其证书(setCertificate).之后,应用程序可以使用其证书(loginExtensionByCertificate()方法)登录VirtualCenter ,从而无需存储用户名和密码.但是,为了使其正常工作,客户端(我的应用程序)必须发送证书作为其SSL连接的一部分,即使服务器(VirtualCenter)没有特别要求它.

我正在用Java编写我的应用程序.创建了我自己的密钥管理器,将其连接到我的密钥库并指定要使用的别名.然后初始化我的ssl上下文以使用该密钥管理器.在创建的套接字中,我确实看到他们的SSLContext中有我的密钥管理器.但是,我没有看到密钥管理器被调用来获取证书.出于某种原因,套接字不觉得需要发送证书.

我知道服务器可能会要求客户端提供其证书.在这种情况下,它不会发生.我想知道是否有办法强制创建的套接字提供证书,无论服务器是否要求它.

java vmware ssl

5
推荐指数
2
解决办法
7091
查看次数

JAVA - SSL - 客户端证书

我一直在使用JAVA开发一个WS客户端,我遇到了SSL身份验证问题.WS是在WCF上创建的,我无法访问服务器,它们通过HTTPS工作并使用需要首先在客户端上安装的客户端证书.服务器人员发给我一个PFX证书,我成功安装在操作系统上(我正在使用OS X)然后我可以通过浏览器访问WS(Safari或FF都是我尝试过的,以前无法访问WSs ).我认为操作系统中的任何应用程序都会使用此证书,但是当我尝试使用我的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
Run Code Online (Sandbox Code Playgroud)

java ssl https web-services client-certificates

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

Web服务提供者和消费者之间的证书机制

服务器和客户端在Web服务调用中放置ssl证书机制的确切步骤是什么?谁(客户端/服务器/两者)将生成.keystore,.p7b/.cer文件?我google了很多但找不到答案.就我而言,我是运行java应用程序的客户端,它使用soap webservice调用.我有一个由WebService提供者提供的.p7b文件.我知道在哪里放置文件(.keystore,.cer)以及如何在应用程序中使用它.

但是,我的问题是

  1. 我是否需要生成密钥库文件,还是应该从Web服务提供商处获取?如果我需要生成,怎么样?我需要私钥/密码吗?
  2. 我需要一个.cer文件,那么如何使用keytool将.p7b转换为.cer文件?

提前谢谢你的帮助.

java ssl web-services ssl-certificate

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

基于SSL的轴和使用PKCS#12密钥库的双向身份验证

我有PKCS#12密钥库,我已成功导入我的浏览器,用于访问需要双向SSL身份验证的服务器.完美地到达那里的任何https URL.

但是,我无法访问同一服务器中的URL,并且在使用Axis 1.4时无法访问同一主机中的URL.给定的Axis faultString是:

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

我的javax.net.ssl.{keyStore,keyStorePassword,keyStoreType}房产似乎设置得很好.

我该如何解决这个问题?

java ssl axis keystore pkcs#12

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

Java程序禁用SSL认证存在安全风险

我们的团队会抓取网站以使我们的信息保持最新。我在抓取 HTTPS 页面时遇到了安全异常。问题在于 Java 在接受页面自签名证书时存在问题。

我没有保留要接受的证书列表(这在将来可能很难维护),而是使用 neu242 提供的解决方法来禁用 SSL 证书验证

public static void disableCertificateValidation() 
{
    // Create a trust manager that does not validate certificate chains
      TrustManager[] trustAllCerts = new TrustManager[] { 
        new X509TrustManager() {
          public X509Certificate[] getAcceptedIssuers() { 
            return new X509Certificate[0]; 
          }


        @Override
        public void checkClientTrusted(X509Certificate[] arg0, String arg1) throws CertificateException
        {
            // TODO Auto-generated method stub

        }
        @Override
        public void checkServerTrusted(X509Certificate[] arg0, String arg1) throws CertificateException
        {
            // TODO Auto-generated method stub

        }
      }}; …
Run Code Online (Sandbox Code Playgroud)

java security https

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