- 浏览: 274509 次
- 性别:
- 来自: 北京
文章分类
最新评论
-
Xujian0000abcd:
说的太好啦~赞一个~
shell if语句中的并列 -
Jimmy.song:
终于在楼主这里找到答案,很受益,谢谢~
使用diff或者vimdiff比较远程文件(夹)与本地文件(夹)
来自http://www.cnblogs.com/genghechuang/archive/2011/10/26/2225042.html
项目需要用https与服务器进行连接,获取系统需要的一些配置参数。以前是用http进行连接的,客户端代码比较简单,直接使用URL类进行连接并获取输入流即可。试着在浏览器中输入相应的https连接地址,提示证书确认,确认以后就访问到内容了。
改 成https以后碰到了一些问题。原以为Java可能已经封装好了,所以把直接把原来的http连接改成https,结果抛出异 常:java.lang.UnsupportedClassVersionError: test/url/URLTest (Unsupported major.minor version 49.0)。查了一下,是JVM不支持这个协议(《java网络编程》上有说明)。换了一个jdk,这个问题好了。调用 vurl.getProtocol()可以获取相应的协议了。
接着出现 了第二个异常:javax.net.ssl.SSLException: java.lang.RuntimeException: Unexpected error: Java.security.InvalidAlgorithmParameterException: the trustAnchors parameter must be non-empty。没办法,接着google,发现这个问题跟安全连接的证书有关(安全方面的东西不是很了解,只知道这个公钥,用于验证)。查了一 下,jdk果然提供了跟证书相关的东西。首先要从服务器那得到证书,想了一下,ie好像可以。试着用ie连接地址,然后出现了证书确认的提示框,点击查看 证书-详细信息,点击复制到文件,选择base64编码,导出后就可以用记事本打开了,大概样子如下:
-----BEGIN CERTIFICATE-----
MIIDITCCAoqgAwIBAgIQS6WuWd7dHMeAfIkikfDiQzANBgkqhkiG9w0BAQQFADBM
MQswCQYDVQQGEwJaQTElMCMGA1UEChMcVGhhd3RlIENvbnN1bHRpbmcgKFB0eSkg
THRkLjEWMBQGA1UEAxMNVGhhd3RlIFNHQyBDQTAeFw0wNjA1MTUyMzE4MTFaFw0w
j8thQJ7StDhAISTBTx/LE0qPlQLfkT3WQOsRb5sQoW/OkV4w9m0TXhWkLsIYngDD
2DJnR/y4HprZmo7M/3wStwO/UiDPIfTzd90SFfCU+pDV41logQ==
-----END CERTIFICATE-----
不用动这个文件,以后直接导入即可。
PS: 如果已经点击了证书的确认,可能浏览器就直接打开链接了。这样情况下,可以接着点击ie有下脚的“锁”形符号,即可看见证书。证书搞到手了,接着要然 Java环境能够认识它。这里调用的是jdk带的一个exe,keytool.exe(%JAVA_HOME%/bin下有,所以配了java环境变量的 话直接能在命令行调用了)。这里我们输入导入命令即可:
%JAVA_HOME%\bin\keytool -import -file service.crt -keystore D:/test/urltest/crt
三个参数分别代表:导入操作,导入的证书文件,导入证书存放的位置(PS:这个路径可以使用相对路径也可以是绝对路径,但是相对路径我没有实验成功)。导入过程中会提示用户输入密码,这个密码随便就行,不过位数不能太少:)
证书是导入成功了,但是问题ms还是没解决,新的异常出现了:
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
没 辙,接着google,还好问题不是很麻烦。上面虽然生成了证书,但是还要告诉程序证书的具体位置,涉及一个系统变量要配置。在程序中加入一句话即 可:System.setProperty("javax.net.ssl.trustStore","D:/test/urltest/crt");或 者在运行java时加入参数:-Djavax.net.ssl.trustStore=D:/test/urltest/crt.
做了这么多,这个时候是黎明前最黑暗的时候。最后这个问题搞了2小时.......
异常:java.net.UnknownHostException: 222.222.222.222。 没啥好说了的,google。找来找去,找到一个blog说了这么一句:在生成证书的时候会提示你“你的姓名”,这里别写你的名字,而要写一个ip或者一 个你对应网站的网址。抛出的异常提示的错误确实是我的https请求中的ip,这样的话可能是此ip和证书中的“名字”不相同造成的。再次使用ie打开证 书,在“常规”里面,看到这么一个东西(我直接用https://mail.google.com试的,因为连它的时候没有出现任何证书确认)
颁发给:www.google.com
找到url了,打开我的证书,哈哈,确实也有这么一个东西,爽。
更 郁闷的来了,url是找到了,可是,此url是个无效的地址.......输入到ie中返回无法连接。这下知道为什么google不用确认而这个证书需要 确认了。因为此url连不通。怎么办?天无绝人之路,还是让我找到了。其实现在我要做的就是一个域名和ip绑定的问题,但是这个绑定不是DNS来做,而是 本机(windows系统)来做。查了一下,果然有,就在C:\WINDOWS\system32\drivers\etc下有一个host文件,打开 它,可以看到这么一行
127.0.0.1 localhost
^_^,原来localhost是这样绑定127.0.0.1的啊,如此就好。我试着加入一行
222.222.222.222 www.sample.test
把原来的https连接的ip换成了那个域名,OK!问题搞定,连接成功。
后记:
在整个调试过程中我一直使用 https://mail.google.com 做为参照来调试。使用这个url的话至于jvm支持,就能直接连接。出现上面的后几个异常,估计都是与域名有关。因为这个域名是一个DNS不能识别的。
这两天朋友使用时又发现这样一个异常:sun.security.validator.ValidatorException: No trusted certificate found 这个异常也是由于没有找到证书造成的,看看证书的路径设置对不对
Java客户端调用Https Webservice
出处地址:http://hi.baidu.com/sunshibing/blog/item/08f873f0d41e67c37931aa84.html
Java 要调用远程Https webservice 必需具用远程服务器提供的客户端信任书及密钥.
将client.keystore和client.truststore拷贝到classes\test目录下.
package test;
import org.apache.axis.client.Call;
import org.apache.axis.client.Service;
public class TestEcVoteNotice
{
public static void main(String [] args) throws Exception {
System.setProperty("javax.net.ssl.keyStore", "test\\client.keystore");
System.setProperty("javax.net.ssl.keyStorePassword", "abc");
System.setProperty("javax.net.ssl.trustStore", "test\\client.truststore");
System.setProperty("javax.net.ssl.trustStorePassword", "abc");
//System.setProperty("javax.net.debug", "ssl");
//System.setProperty("https.protocols", "TLSv1");
//System.setProperty("java.protocol.handler.pkgs","javax.net.ssl");
String endpoint = "https://localhost:" +"8443"+ "/axis/services/EcVoteNotice";
//String endpoint = "http://localhost:" +"8080"+ "/axis/services/EcVoteNotice";
Service service = new Service();
Call call = (Call) service.createCall();
call.setTargetEndpointAddress( new java.net.URL(endpoint) );
call.setOperationName("toStringP");
String res = (String) call.invoke( new Object[] {"Box"} );
call.setOperationName("toString");
String res2 = (String) call.invoke( new Object[] {} );
System.out.println( res+"/"+res2 );
}
}
在classes目录下执行.
java -cp %AXISCLASSPATH% test.TestEcVoteNotice
Java客户端如何调用Https Webservice
来自:http://qq0819.blog.hexun.com/11419409_d.html
最近在做系统改造,服务器增加了SSL访问,那么对于通过https访问Webservice接口,java应该如何实现呢。通过查找相关资料,好不容易找到了解决方法,大体步骤如下。
1、获取加密数字证书
因为是自己设备颁发的证书,所以先获取数字证书,访问https://+域名,根据提示安装证书,然后导出证书,保存为*.cer文件;
2、安装jdk,我使用的是jdk1.4的;
3、执行keytool命令,生成keystore文件
打开windows命令符窗口,执行如下命令
keytool -import -alias aliasname -file *.cer -keystore *.keystore
keytool命令可以从网上查找,或者使用keytool -h命令获取说明。
4、添加代码
在调用接口方法之前,添加如下代码:
System.setProperty("javax.net.ssl.trustStore", "*.keystore");
System.setProperty("java.protocol.handler.pkgs","com.sun.net.ssl.internal.www.protocol");
Security.addProvider(new com.sun.net.ssl.internal.ssl.Provider());
如果没有上述3条语句,会报如下异常错误:java.security.cert.CertificateException: Couldn't find trusted certificate
好了,一切OK, 通过以上步骤即可实现调用https webservice。
项目需要用https与服务器进行连接,获取系统需要的一些配置参数。以前是用http进行连接的,客户端代码比较简单,直接使用URL类进行连接并获取输入流即可。试着在浏览器中输入相应的https连接地址,提示证书确认,确认以后就访问到内容了。
改 成https以后碰到了一些问题。原以为Java可能已经封装好了,所以把直接把原来的http连接改成https,结果抛出异 常:java.lang.UnsupportedClassVersionError: test/url/URLTest (Unsupported major.minor version 49.0)。查了一下,是JVM不支持这个协议(《java网络编程》上有说明)。换了一个jdk,这个问题好了。调用 vurl.getProtocol()可以获取相应的协议了。
接着出现 了第二个异常:javax.net.ssl.SSLException: java.lang.RuntimeException: Unexpected error: Java.security.InvalidAlgorithmParameterException: the trustAnchors parameter must be non-empty。没办法,接着google,发现这个问题跟安全连接的证书有关(安全方面的东西不是很了解,只知道这个公钥,用于验证)。查了一 下,jdk果然提供了跟证书相关的东西。首先要从服务器那得到证书,想了一下,ie好像可以。试着用ie连接地址,然后出现了证书确认的提示框,点击查看 证书-详细信息,点击复制到文件,选择base64编码,导出后就可以用记事本打开了,大概样子如下:
-----BEGIN CERTIFICATE-----
MIIDITCCAoqgAwIBAgIQS6WuWd7dHMeAfIkikfDiQzANBgkqhkiG9w0BAQQFADBM
MQswCQYDVQQGEwJaQTElMCMGA1UEChMcVGhhd3RlIENvbnN1bHRpbmcgKFB0eSkg
THRkLjEWMBQGA1UEAxMNVGhhd3RlIFNHQyBDQTAeFw0wNjA1MTUyMzE4MTFaFw0w
j8thQJ7StDhAISTBTx/LE0qPlQLfkT3WQOsRb5sQoW/OkV4w9m0TXhWkLsIYngDD
2DJnR/y4HprZmo7M/3wStwO/UiDPIfTzd90SFfCU+pDV41logQ==
-----END CERTIFICATE-----
不用动这个文件,以后直接导入即可。
PS: 如果已经点击了证书的确认,可能浏览器就直接打开链接了。这样情况下,可以接着点击ie有下脚的“锁”形符号,即可看见证书。证书搞到手了,接着要然 Java环境能够认识它。这里调用的是jdk带的一个exe,keytool.exe(%JAVA_HOME%/bin下有,所以配了java环境变量的 话直接能在命令行调用了)。这里我们输入导入命令即可:
%JAVA_HOME%\bin\keytool -import -file service.crt -keystore D:/test/urltest/crt
三个参数分别代表:导入操作,导入的证书文件,导入证书存放的位置(PS:这个路径可以使用相对路径也可以是绝对路径,但是相对路径我没有实验成功)。导入过程中会提示用户输入密码,这个密码随便就行,不过位数不能太少:)
证书是导入成功了,但是问题ms还是没解决,新的异常出现了:
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
没 辙,接着google,还好问题不是很麻烦。上面虽然生成了证书,但是还要告诉程序证书的具体位置,涉及一个系统变量要配置。在程序中加入一句话即 可:System.setProperty("javax.net.ssl.trustStore","D:/test/urltest/crt");或 者在运行java时加入参数:-Djavax.net.ssl.trustStore=D:/test/urltest/crt.
做了这么多,这个时候是黎明前最黑暗的时候。最后这个问题搞了2小时.......
异常:java.net.UnknownHostException: 222.222.222.222。 没啥好说了的,google。找来找去,找到一个blog说了这么一句:在生成证书的时候会提示你“你的姓名”,这里别写你的名字,而要写一个ip或者一 个你对应网站的网址。抛出的异常提示的错误确实是我的https请求中的ip,这样的话可能是此ip和证书中的“名字”不相同造成的。再次使用ie打开证 书,在“常规”里面,看到这么一个东西(我直接用https://mail.google.com试的,因为连它的时候没有出现任何证书确认)
颁发给:www.google.com
找到url了,打开我的证书,哈哈,确实也有这么一个东西,爽。
更 郁闷的来了,url是找到了,可是,此url是个无效的地址.......输入到ie中返回无法连接。这下知道为什么google不用确认而这个证书需要 确认了。因为此url连不通。怎么办?天无绝人之路,还是让我找到了。其实现在我要做的就是一个域名和ip绑定的问题,但是这个绑定不是DNS来做,而是 本机(windows系统)来做。查了一下,果然有,就在C:\WINDOWS\system32\drivers\etc下有一个host文件,打开 它,可以看到这么一行
127.0.0.1 localhost
^_^,原来localhost是这样绑定127.0.0.1的啊,如此就好。我试着加入一行
222.222.222.222 www.sample.test
把原来的https连接的ip换成了那个域名,OK!问题搞定,连接成功。
后记:
在整个调试过程中我一直使用 https://mail.google.com 做为参照来调试。使用这个url的话至于jvm支持,就能直接连接。出现上面的后几个异常,估计都是与域名有关。因为这个域名是一个DNS不能识别的。
这两天朋友使用时又发现这样一个异常:sun.security.validator.ValidatorException: No trusted certificate found 这个异常也是由于没有找到证书造成的,看看证书的路径设置对不对
Java客户端调用Https Webservice
出处地址:http://hi.baidu.com/sunshibing/blog/item/08f873f0d41e67c37931aa84.html
Java 要调用远程Https webservice 必需具用远程服务器提供的客户端信任书及密钥.
将client.keystore和client.truststore拷贝到classes\test目录下.
package test;
import org.apache.axis.client.Call;
import org.apache.axis.client.Service;
public class TestEcVoteNotice
{
public static void main(String [] args) throws Exception {
System.setProperty("javax.net.ssl.keyStore", "test\\client.keystore");
System.setProperty("javax.net.ssl.keyStorePassword", "abc");
System.setProperty("javax.net.ssl.trustStore", "test\\client.truststore");
System.setProperty("javax.net.ssl.trustStorePassword", "abc");
//System.setProperty("javax.net.debug", "ssl");
//System.setProperty("https.protocols", "TLSv1");
//System.setProperty("java.protocol.handler.pkgs","javax.net.ssl");
String endpoint = "https://localhost:" +"8443"+ "/axis/services/EcVoteNotice";
//String endpoint = "http://localhost:" +"8080"+ "/axis/services/EcVoteNotice";
Service service = new Service();
Call call = (Call) service.createCall();
call.setTargetEndpointAddress( new java.net.URL(endpoint) );
call.setOperationName("toStringP");
String res = (String) call.invoke( new Object[] {"Box"} );
call.setOperationName("toString");
String res2 = (String) call.invoke( new Object[] {} );
System.out.println( res+"/"+res2 );
}
}
在classes目录下执行.
java -cp %AXISCLASSPATH% test.TestEcVoteNotice
Java客户端如何调用Https Webservice
来自:http://qq0819.blog.hexun.com/11419409_d.html
最近在做系统改造,服务器增加了SSL访问,那么对于通过https访问Webservice接口,java应该如何实现呢。通过查找相关资料,好不容易找到了解决方法,大体步骤如下。
1、获取加密数字证书
因为是自己设备颁发的证书,所以先获取数字证书,访问https://+域名,根据提示安装证书,然后导出证书,保存为*.cer文件;
2、安装jdk,我使用的是jdk1.4的;
3、执行keytool命令,生成keystore文件
打开windows命令符窗口,执行如下命令
keytool -import -alias aliasname -file *.cer -keystore *.keystore
keytool命令可以从网上查找,或者使用keytool -h命令获取说明。
4、添加代码
在调用接口方法之前,添加如下代码:
System.setProperty("javax.net.ssl.trustStore", "*.keystore");
System.setProperty("java.protocol.handler.pkgs","com.sun.net.ssl.internal.www.protocol");
Security.addProvider(new com.sun.net.ssl.internal.ssl.Provider());
如果没有上述3条语句,会报如下异常错误:java.security.cert.CertificateException: Couldn't find trusted certificate
好了,一切OK, 通过以上步骤即可实现调用https webservice。
发表评论
-
关于UnsupportedOperationException异常
2012-10-31 09:43 1042我们在使用collection框 ... -
CXF wsdl2Java
2012-07-15 18:37 1356一. 简介 Apache CXF 是一个Service框架, ... -
ava.lang.UnsupportedClassVersionError: Bad version number in .class file
2012-05-02 16:47 0异常备忘:java.lang.UnsupportedClass ... -
java 客户端用https链接服务器
2011-03-31 12:10 2027项目需要用https与服务器进行连接,获取系统需要的一些配置参 ... -
Http Client
2011-07-21 18:01 943HttpClient简介 HTTP 协议可能是现在 Inte ... -
fatjar的使用
2011-03-28 09:55 868这个文件是eclipse的插件,只要copy到eclipse的 ... -
第七章 特殊类
2010-09-25 13:19 0String类 1.String 字符串常量 慢 ... -
第六章 高级语言的特点
2010-09-25 12:04 1203this关键字 1.用于属性和形参重名 2.用 ... -
第五章 类和对象
2010-09-19 14:07 826封装:1.私有化属性成 ... -
第四章 数组
2010-09-19 11:19 800定义: int arr[] = new int[n]; ... -
第三章 表达式及流程控制
2010-09-19 10:43 801表达式: ++ --:前 ... -
第二章 标识符
2010-09-19 10:15 1011标识符起名:1.以字母、下划线("_" ... -
第一章 java简介
2010-09-16 14:58 9211995.5.23正式出现java1.0 ...
相关推荐
本示例将详细介绍如何使用Apache CXF和Spring框架来开发基于HTTPS的安全Web服务,包括服务端和客户端的实现。 Apache CXF是一个开源的Java框架,它支持创建和消费各种Web服务,包括SOAP和RESTful API。而Spring框架...
在Android客户端,使用KSOAP2库调用WebService的示例: ```java SoapObject request = new SoapObject(NAMESPACE, METHOD_NAME); request.addProperty(PARAM_NAME, PARAM_VALUE); SoapSerializationEnvelope ...
本实例将详细讲解如何使用Apache Axis1.4工具来生成Java版的WebService服务端和客户端。 首先,让我们理解WebService的基本概念。WebService是一种基于HTTP协议的网络服务,它通过SOAP(Simple Object Access ...
2. **生成客户端代理类**:使用Axis的`wsdl2java`工具,从Web Service的WSDL(Web Service描述语言)文件生成Java客户端代理类。这一步可以通过命令行或者Ant脚本完成。 3. **配置HTTPS**:在生成的客户端代码中,...
本篇将详细介绍如何使用CXF框架搭建WebService服务端和客户端,并讨论相关jar包的作用。 一、CXF框架介绍 Apache CXF是一个强大的Java Web服务框架,它支持多种Web服务规范,如SOAP、RESTful、WS-*等。CXF使得...
总之,"Xfire客户端调用webservice jar包"涉及到的是Java技术栈中Web服务客户端的实现,包括使用特定的jar包来实现与服务器的通信,以及如何有效地调用和处理Web服务接口的细节。这个过程需要对Java编程、Web服务...
4. **SOAP(Simple Object Access Protocol)处理**:Web服务通常使用SOAP协议进行数据交换,客户端代码需要能够生成和解析SOAP消息。 5. **异常处理**:客户端代码需要有良好的错误处理机制,当与Web服务通信出现...
客户端生成工具是实现Web服务交互的关键组件,它能够帮助开发者自动创建与WebService接口进行通信的客户端代码,大大简化了开发流程。本文将详细介绍关于Web服务客户端生成工具的相关知识点。 1. **Web服务标准与...
本文将深入讲解如何使用C# WinFrom客户端结合WebService实现自动更新升级的功能。 首先,我们要理解C# WinFrom客户端。C#是一种面向对象的编程语言,广泛应用于Windows桌面应用开发,WinForm则是C#中的用户界面框架...
在处理SSL(安全套接层)相关问题时,比如在文件“wbs_ssl”中可能涉及的内容,WebService客户端可能需要配置SSL上下文以支持HTTPS连接。这包括设置信任的证书库、处理自签名证书、配置SSL参数等。例如,在Java中,...
虽然现在使用较少,但在早期Web服务中,UDDI帮助客户端找到服务的WSDL。 4. **HTTP/HTTPS**:作为传输层,HTTP(HyperText Transfer Protocol)或其安全版本HTTPS(HTTP over SSL/TLS)用于承载SOAP消息。客户端...
在“DemoClient”中,我们可能看到的是用Java、Python、C#或其他语言实现的客户端,它们都能有效地调用SOAP服务。 **总结** “WebService客户端Demo”是理解并实践SOAP通信的一个理想起点。通过这个示例,我们可以...
5. **安全性措施**:使用HTTPS等安全协议加密传输,确保数据安全;同时,可以采用权限控制,限制非法访问。 四、WebbWinUpload实现 WebbWinUpload可能是一个具体的实现工具或框架,用于帮助开发者在Windows环境中...
- 编写客户端代码,调用HTTPS方式访问的WebService。 6. **JKS格式证书部署**: - 导出客户端公钥证书。 - 安装客户端公钥证书。 - 配置Tomcat服务,确保HTTPS服务正确配置并运行。 #### 三、注意事项 - 在...
在本案例中,"webservice客户端client,made by .net"是一个使用Microsoft的.NET Framework开发的Web服务客户端工具。这个客户端使得开发者能够便捷地与Web服务进行交互,测试和调用Web服务提供的各种功能。 首先,...
本示例工程涵盖了WebService服务端和客户端的实现,帮助开发者更好地理解和应用WebService技术。 服务端开发: 在服务端,我们通常会创建一个SOAP(Simple Object Access Protocol)服务,它是WebService最常见的一...
调用HTTPS服务时,我们需要创建一个自定义的`SSLSocketFactory`,以便使用我们刚刚导入的证书。这通常在`HttpsURLConnection`或`HttpClient`的配置中完成,如下所示: ```java KeyStore trustStore = KeyStore....
2. **SOAP(Simple Object Access Protocol)**: 传输协议,使用HTTP或HTTPS来传递XML消息。 3. **UDDI(Universal Description, Discovery, and Integration)**: 一种黄页服务,用于发布和查找WebService。 **EJB...
这个"CXF动态webservice客户端demo"是为了演示如何使用CXF库创建一个动态调用Web服务接口的客户端应用程序。 首先,我们需要了解Web服务的基本概念。Web服务基于SOAP(Simple Object Access Protocol)协议,通过...
本文将详细介绍如何通过四个步骤完成WebService服务端与客户端的调用。 步骤一:创建WebService服务端 1. 选择开发工具:首先,你需要一个支持WebService开发的集成开发环境(IDE),如Eclipse或IntelliJ IDEA。以...