-
client调用多个不同的基于HTTPS的webservices时,System.setProperty(javax.net.ssl.XXX)不起作用?30
在同一个web应用里,
作为client访问基于HTTPS的webservices,client这边通过设置以下系统参数,是可以成功的,
System.setProperty("javax.net.ssl.keyStore", keystoreFile);
System.setProperty("javax.net.ssl.keyStorePassword",keystorePassword);
System.setProperty("javax.net.ssl.trustStore", truststoreFile);
System.setProperty("javax.net.ssl.trustStorePassword",truststorePassword);
但是,现在clinet还要访问另外一个也是基于HTTPS的web services,当然证书是不一样的,
这时client能再次设置这些系统参数为另外的值么?访问能成功么?
找到之前的一个相关的帖子,好像没有结论?http://www.iteye.com/problems/9652
多谢!
问题补充:
注释掉第一次的调用,第二次的调用是成功的,所以相关参数肯定是设置对了。
但是只要运行两次调用(调不同的webservice),即使中间clearProperty,还是不行。
还尝试过颠倒两次调用的顺序,结果也总是第二次的调用不成功。
问题补充:
to pJun,System.getProperty的结果是第二次设置的值。thx
问题补充:
是不是不应该采取这种设置系统参数的方式啊?
有其他方法么?
问题补充:
HTTPClient能不能动态的设置keystore/keystorepasswd/truststore/truststorepasswd呢?
问题补充:
换了一种方式,使用了http://hc.apache.org/httpclient-3.x/sslguide.html里提供的AuthSSLProtocolSocketFactory
调用的代码也是按照其注释写的,但是感觉只是调用了一下构造函数,并没有实质的动作,调用结果也是失败的:PKIX path building failed: sun.security.provider.certpath.SunCertPathBuilderException: unable to find valid certification path to requested target
下面是代码:HttpClient client = new HttpClient(new MultiThreadedHttpConnectionManager()); client.getHttpConnectionManager().getParams().setSoTimeout(3000); client.getHttpConnectionManager().getParams().setMaxTotalConnections(5); Protocol authhttps = null; try { authhttps = new Protocol( "https", new AuthSSLProtocolSocketFactory( new URL( "file:/C:/Documents and Settings/test/Desktop/tmp/keystore"), "mypasswd", new URL( "file:/C:/Documents and Settings/test/Desktop/tmp/truststore"), "mypasswd"), 7743); } catch (MalformedURLException e1) { // TODO Auto-generated catch block e1.printStackTrace(); } client.getHostConfiguration().setHost(wsHost,wsPort, authhttps); DefaultHttpMethodRetryHandler retryhandler = new DefaultHttpMethodRetryHandler( recoverTimes, true); client.getParams().setParameter(HttpMethodParams.RETRY_HANDLER, retryhandler); PostMethod post = new PostMethod(wsURL); RequestEntity entity = new StringRequestEntity(requestXML, "text/xml", "UTF-8"); post.setRequestEntity(entity); HttpClientResponse httpClientResponse = null; try { int result = client.executeMethod(post); logger.log(Level.INFO, "result ="+ result); String responseXML = post.getResponseBodyAsString(); } catch (Exception ex) { logger.warning(ex.toString()); return; } finally { post.releaseConnection(); }
JDK1.5
问题补充:
To lovewhzlq ,
//和///都试了一下,错误还是一样。
问题补充:
最初重复设置两次系统参数时,也是抛这种类型的异常……
问题补充:
To pJun, 3个斜杠试过了,也不行。
是必须调用注册么? Protocol.registerProtocol("https", authhttps);
注不注册有区别么?
我再试试不用URL表示本地文件路径吧。。。。也许就能找到文件了。
问题补充:
需要调用registerProtocol,否则AuthSSLProtocolSocketFactory不起作用。谢谢大家。2009年7月13日 12:51
9个答案 按时间排序 按投票排序
-
采纳的答案
当然可以,
看它的文档
http://hc.apache.org/httpclient-3.x/sslguide.html2009年7月13日 14:56
-
unable to find valid certification path to requested target
这个异常信息应该很明显说,不能找到有效的证书路径2009年7月13日 16:56
-
new AuthSSLProtocolSocketFactory(
new URL(
"file://C:/Documents and Settings/test/Desktop/tmp/keystore"),
"mypasswd",
new URL(
"file://C:/Documents and Settings/test/Desktop/tmp/truststore"),
"mypasswd"), 7743);
这个写错了吧,好像是"//"还是"///",有点忘了,自己试一下吧2009年7月13日 16:51
-
没看到你写的调用代码,只能在这里胡猜了哦.
引用http://www.iteye.com/problems/9652
看这里的点点代码,估计还是Service创建的时候有问题.引用
# Service service = new Service();
# Call call = (Call)service.createCall();
或许就只能获得某个默认的Service,比如你们配置的A.
换个确定的实例化方法试试看,我看API里面有不少构造器来的.
Constructor Summary Service() Constructs a new Service object - this assumes the caller will set the appropriate fields by hand rather than getting them from the WSDL. Service(EngineConfiguration config) Constructs a new Service object as above, but also passing in the EngineConfiguration which should be used to set up the AxisClient. Service(EngineConfiguration engineConfiguration, AxisClient axisClient) Constructs a Service using the supplied configuration and engine directly. Service(java.io.InputStream wsdlInputStream, QName serviceName) Constructs a new Service object for the service in the WSDL document in the wsdlInputStream and serviceName parameters. Service(Parser parser, QName serviceName) Constructs a new Service object for the service in the WSDL document Service(QName serviceName) Constructs a new Service object - this assumes the caller will set the appropriate fields by hand rather than getting them from the WSDL. Service(java.lang.String wsdlLocation, QName serviceName) Constructs a new Service object for the service in the WSDL document pointed to by the wsdlLocation and serviceName parameters. Service(java.net.URL wsdlDoc, QName serviceName) Constructs a new Service object for the service in the WSDL document pointed to by the wsdlDoc URL and serviceName parameters.
试试看看喽.
2009年7月13日 15:13
-
本来就不应该采用这种方式,系统参数是全局性的,会影响所有的调用
你应该是每次新建一个Properties对象,然后设置这些参数,再传给环境变量
一定有相应的设置方法2009年7月13日 14:47
-
引用
我觉得先要确认下如下结果.
第二次设置后: System.getProperty()的结果是否是第二次设置的值.
我的意思可能LZ没有能理解,我是想LZ确认下,第二次设置后System里面的值是否是第二次设置的结果,还是第二次设置结束后还是第一次设置的结果.
像这样:public class ProTest { public static void main(String[] args) { String old= System.setProperty("path.separator", "--"); String first = System.getProperty("path.separator"); String first2 = System.setProperty("path.separator", "+++"); String second = System.getProperty("path.separator"); System.out.println("old:"+old); System.out.println("first:"+first); System.out.println("first2:"+first2); System.out.println("second:"+second); } }
在LZ的环境下确认这个结果.
2009年7月13日 14:19
-
问题貌似就是第二次System.setProperty()时没有设置成功,与客户端访问https的webservices没有什么关系.
我觉得先要确认下如下结果.
第二次设置后: System.getProperty()的结果是否是第二次设置的值.
可以做一个尝试:
如果没有设置上,在System.setProperty前先调用下System.clearProperty()在试试看是否有效.
不知LZ是否确认过,请尝试之.再更新结果,再来看看问题是否还在. 希望能有用.2009年7月13日 13:20
相关推荐
访问带https请求忽略ssl证书,避免url.openStream报错javax.net.ssl.SSLHandshakeException url = new URL(imageUrl); if("https".equalsIgnoreCase(url.getProtocol())){ SslUtils.ignoreSsl(); } //不添加...
在Java编程中,`javax.net.ssl.SSLHandshakeException` 是一个常见的错误,通常发生在进行安全套接层(SSL)或传输层安全(TLS)协议握手时出现问题。这个异常通常是由于客户端和服务器之间的证书不匹配、信任锚点...
在Java开发中,调用HTTPS发布的Web Service接口是一项常见的任务,尤其在企业级应用中,HTTPS提供了安全的数据传输。本文将详细介绍如何使用Apache Axis库来实现这一功能,并提供相关步骤和注意事项。 首先,理解...
然而,当你遇到“javax.net.ssl.SSLException: java.lang.RuntimeException: Could not generate DH keypair”的错误时,这意味着在建立SSL/TLS连接时,Diffie-Hellman(DH)密钥交换算法遇到了问题。DH是一种非对称...
System.setProperty("javax.net.ssl.trustStorePassword", "your_password"); ``` 在实际应用中,你可能需要处理更复杂的场景,如证书链、CA签名的证书、支持多个协议版本等。同时,你还需要注意避免SSL/TLS漏洞,...
这一库主要提供了`javax.net.ssl`包,包括了SSL/TLS相关的各种类,如`SSLSocket`、`SSLServerSocket`、`SSLEngine`等,它们是构建安全网络连接的基础。`SSLSocket`用于创建客户端到服务器的安全连接,而`...
NULL 博文链接:https://xusaomaiss.iteye.com/blog/723167
解决webMagic0.7.3 出现javax.net.ssl.SSLException: Received fatal alert: protocol_version的问题-附件资源
Files contained in javax.servlet.jar: META-INF/MANIFEST.MF javax/servlet/http/LocalStrings.properties javax.servlet.http.HttpSessionBindingListener.class javax.servlet....
MQTTv5版的客户端库,原地址:...本资源合入了解决低于android7.0报错Caused by: java.lang.ClassNotFoundException: Didn't find class "javax.net.ssl.SNIHostName"的问题。
Files contained in javax.persistence.jar: META-INF/MANIFEST.MF javax.persistence.Access.class javax.persistence.AccessType.class javax.persistence.AssociationOverride.class javax.persistence....
javax.jms.BytesMessage.class javax.jms.Connection.class javax.jms.ConnectionConsumer.class javax.jms.ConnectionFactory.class javax.jms.ConnectionMetaData.class javax.jms.DeliveryMode.class javax.jms....
System.setProperty("javax.net.ssl.trustStore", "path/to/myTruststore"); System.setProperty("javax.net.ssl.trustStorePassword", "myPassword"); ``` 接下来,我们将讨论如何使用httpUtils工具发送HTTPS...
此外,`javax.crypto.Cipher`类在.NET Core中可能需要额外的引用或适配,因为它是Java平台的一部分,而在.NET中通常使用`System.Security.Cryptography.Aes`类。 总的来说,这个AES加密DEMO展示了如何在.NET环境中...
System.setProperty("javax.xml.stream.XMLInputFactory", "com.ctc.wstx.stax.WstxInputFactory"); System.setProperty("javax.xml.stream.XMLOutputFactory", ...
javax.net.ssl.SSLHandshakeException: Received fatal alert: handshake_failure的一个解决方案-附件资源
javax.jar javax.jar javax.jar javax.jar javax.jar javax.jar javax.jar javax.jar javax.jar javax.jar javax.jar javax.jar javax.jar javax.jar javax.jar javax.jar javax.jar javax.jar javax.jar javax.jar ...
加密是报:javax.net.ssl.SSLException: java.lang.RuntimeException: Could not generate DH keypair 此处提供 bcprov-ext-jdk15on-154.jar 和 bcprov-jdk15on-154.jar 压缩包中有使用说明
例如,当你在JSP中使用`${}`语法来引用一个Bean的属性或者调用一个方法时,底层就是由`javax.el.jar`中的类来完成实际的解析和执行工作。 版本号`2.2.4`表示这两个库是EL 2.2规范的第四个次要版本。在EL 2.2中,...
Classes contained in javax.jms.jar: javax.transaction.xa.XAResource.class javax.jms.BytesMessage.class javax.jms.Message.class javax.jms.JMSException.class javax.jms.Destination.class javax.jms....