- 浏览: 84227 次
- 性别:
- 来自: 深圳
文章分类
最新评论
首先是服务端如何支持https的问题,步骤如下。
1、生成服务端证书,cmd命令:
keytool -genkey -alias tomcat
-keyalg RSA
或者
keytool -genkey -alias jboss -keyalg RSA
按照提示输入一些信息,如果是本机调试,用户名最好输入localhost,否则会出现不匹配异常。
完成后,系统默认把文件放在我的文档里面,名字默认是.keystore。
把文件复制到jboss-5.1.0.GA\server\default\conf下面。
2、在jboss-5.1.0.GA\server\default\deploy\jbossweb.sar\打开server.xml,找到如下:
<!-- SSL/TLS Connector configuration using the admin devl guide
keystore-->
<Connector protocol="HTTP/1.1" SSLEnabled="true"
port="443" address="${jboss.bind.address}"
scheme="https" secure="true" clientAuth="false"
keystoreFile="${jboss.server.home.dir}/conf/.keystore"
keystorePass="123456" sslProtocol = "TLS" />
jboss默认有这些,但是注释了,如果没有就添加进去。需要注意下面几个属性值:
port是端口号,默认是8443。
keystoreFile="${jboss.server.home.dir}/conf/.keystore"是keystore文件路径。keystorePass是提示中输入的密码。
3、将系统部署后,启动,浏览器中输入https://localhost:443/projectName
理论上会提示证书不安全,点通过、继续、忽略之类的一个提示,就可以访问了。
同时不影响原来的http://localhost:8080/projectName访问。
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
然后是使用httpClient如何访问的问题。
使用https访问时,需要证书验证的。https也是通过证书验证的方式使的所提供的服务更具有安全性。上面的浏览器能够直接访问,是因为浏览器能够自动处理证书的问题,使用httpClient访问https时,只能人为的去处理证书了。有两种方式。
一、第一个是通过浏览器导出证书.cer文件,导入到在httpClient所运行的jdk中,jdk信任该证书后,就可以访问了。
二、将服务端的.keystore文件拿到客户端,程序中通过下面两行来手动信任该证书。
System.setProperty("javax.net.ssl.trustStore", "D:/B/.keystore");
System.setProperty("javax.net.ssl.trustStorePassword","123456");;
~~~~~~~~~~~~~~~~~~
第二种方式只能用于自身调试,因为在系统实际运行中,客户端不可能实时的去拿服务端的.keystore文件。详细介绍一下第一种方式。
1、通过浏览器导出证书。
在浏览器中输入https://localhost:443/projectName,根据提示导出证书。
操作过程中,发现ie8找不到导出的按钮,我用的是filefox,输入地址后,会看到证书不信任提示,按照提示一步步导出,“添加例外——查看——详细信息——导出”,保存类型选择“X509含链证书(PEM)”,即后缀为.crt
打开crt文件,选择“详细信息——复制到文件——一顿下一步”,生成.cer文件。
2、将证书导入到jdk中。
cmd中进入到jdk1.6.0_21\jre\lib\security文件夹中,命令:
keytool -import -noprompt
-keystore cacerts -storepass changeit -alias zhy0105 -file D:/B/abcd.cer
提示输入密码时,密码输入:changeit
zhy0105是自定义名称,最后是证书cer文件的全路径。操作成功后会提示:“认证已添加至keystore中”。
3、注意问题。
(1)第一步会因为浏览器的不同和版本不同会有所偏差,上面这个过程只是针对于firefox,还不知道点几。据说有的浏览器可以直接导出.cer文件。
(2)注意jdk的路径:jdk1.6.0_21\jre\lib\security,是jdk下面的jre,不是和jdk平级的那个jre文件夹。别搞错了...
(3)一定要保证导入证书的jdk就是myeclipse中所配置的jdk,myeclipse中默认的jdk是它本身自带的。
如果在myeclipse中用本身自带的jdk运行httpClient,导入证书的jdk是自己安装的。运行肯定会报错,异常我贴在最下面。证书导入成功,httpClient还是访问不了https,这个问题困扰了我三天。
(4)Window7中,如果jdk安装在了c盘,系统默认是不允许修改文件的,cmd中导入证书时会提示拒绝访问,需要在文件夹中的文件属性里面修改一下权限,在执行就可以了。
~~~~~~~~~~~~~~~~~~~~~~~
以上问题处理完后,程序中就直接按照平时访问http的代码来写就可以了。
贴个以post方式访问并且带附件上传的样例
import java.io.FileNotFoundException; import java.io.IOException; import java.util.HashMap; import java.util.Iterator; import java.util.Map; import org.apache.commons.httpclient.DefaultHttpMethodRetryHandler; import org.apache.commons.httpclient.HttpClient; import org.apache.commons.httpclient.HttpException; import org.apache.commons.httpclient.HttpStatus; import org.apache.commons.httpclient.methods.PostMethod; import org.apache.commons.httpclient.methods.multipart.MultipartRequestEntity; import org.apache.commons.httpclient.methods.multipart.Part; import org.apache.commons.httpclient.methods.multipart.StringPart; import org.apache.commons.httpclient.params.HttpMethodParams; import org.apache.log4j.Logger; public class HttpsUtils { private static final Logger log = Logger.getLogger(HttpsUtils.class); public static void main(String[] args) throws FileNotFoundException { String reqURL = "https://xpa-ag.huawei.com/Service/LoginServlet2.jsp"; Map<String, String> params = new HashMap<String, String>(); params.put("uid", "03B70CC19E8595F568DC950A1D2BD128"); params.put("password", "3301CC07C2E136070E3FAC012A132109"); sendSSLPostRequest(reqURL, params); } public static String sendSSLPostRequest(String reqURL, Map<String, String> params) { String result = null; HttpClient httpClient = new HttpClient(); PostMethod method = new PostMethod(reqURL); Part[] parts = new Part[params.size()]; Iterator<Map.Entry<String, String>> it = params.entrySet().iterator(); int i = 0; while (it.hasNext()) { Map.Entry<String, String> entry = it.next(); parts[i++] = new StringPart(entry.getKey(), entry.getValue()); } method.setRequestEntity(new MultipartRequestEntity(parts, method.getParams())); // 使用系统提供的默认的恢复策略 method.getParams().setParameter(HttpMethodParams.RETRY_HANDLER, new DefaultHttpMethodRetryHandler()); try { // 执行method int statusCode = httpClient.executeMethod(method); if (statusCode != HttpStatus.SC_OK) { System.err.println("Method failed: " + method.getStatusLine()); } // 读取内容 byte[] responseBody = method.getResponseBody(); // 处理内容 result = new String(responseBody); System.out.println(result); } catch (HttpException e) { // 发生致命的异常,可能是协议不对或者返回的内容有问题 log.error(e.getMessage()); e.printStackTrace(); } catch (IOException e) { // 发生网络异常 log.error(e.getMessage()); e.printStackTrace(); } finally { // 释放连接 method.releaseConnection(); } return result; } }
另外,如果系统测试所部署的服务器是linux,和开发环境中还有中转服务器的话,把下面这一行放在httpClient对象定义之后就行了。
httpClient.getHostConfiguration().setProxy("10.100.XX.XXX",8080);
转自:http://from-null.iteye.com/blog/859795
发表评论
-
tomcat控制台提示找不到sdklog日志文件
2013-01-04 16:24 2059在tomcat的bin文件夹下加入:sdkclient_deb ... -
Linux下安装Tomcat
2012-09-21 10:46 1254Tomcat是一个免费的开源的Serlvet容器,它是Apac ... -
myeclise内存溢出问题
2012-09-18 23:13 8931.myeclipse.ini内存设置: -Xmx384m - ... -
JAVA闭包
2011-11-25 10:19 957一、闭包的定义。 有很多不同的人都对闭包过进行了定义,这 ... -
红薯 10 个很棒的 jQuery 代码片段
2011-11-23 10:04 1035[代码] 图片预加载 01 (function($) { 02 ... -
Spring配置文件中,PROPAGATION_REQUIRED的意思
2011-10-21 13:15 1323Spring在TransactionDefinition接口中 ... -
Apache Jboss/Tomcat集群
2011-08-25 17:31 2696集群配置方案: 1. 结构简绍: 该方案采取前端一台apa ... -
Tomcat集群与负载均衡
2011-08-25 10:45 938Tomcat集群与负载均衡(专门术语简介) 在单一的服 ... -
type=image 提交机制
2011-08-08 15:41 826image不用写onclick事件,image按钮会自动触发提 ... -
Java内存管理的9个小技巧
2011-06-03 17:28 765很多人都说“Java完了,只等着衰亡吧!”,为什么呢?最简单的 ...
相关推荐
标题中的“使用httpClient访问https+443端口号”指的是使用Apache HttpClient库来发起HTTPS(安全超文本传输协议)请求,目标服务器的默认端口是443。HTTPS是一种基于SSL/TLS的安全通信协议,用于在客户端和服务器...
总之,使用HttpClient访问Servlet能够简化Java应用之间的通信,特别是在分布式系统中。正确理解和应用HttpClient的各种特性和配置,能够帮助我们构建高效、可靠的网络通信方案。在实际开发中,还需要根据具体项目...
android HttpClient访问某些Https时,出现了问题,无法访问,好像是要安全验证。此Demo解决了此问题,HttpClient能够Https和Http类型的URL了。 在eclipse下打开工程若有乱码,请把eclipse的字符编码改成UTF-8。
#### 1.1 配置HttpClient访问HTTPS(不验证证书) ```java // 创建HttpClient实例 HttpClient httpClient = new DefaultHttpClient(); // 创建HttpGet请求 HttpGet httpGet = new HttpGet("https://example.com");...
使用HttpClient4.5实现https请求忽略SSL证书验证工具类
根据提供的文件信息,我们可以深入探讨如何使用`httpclient`库来进行`https`访问,并了解其中涉及的关键概念和技术细节。 ### 标题与描述解析:使用`httpclient`进行`https`访问 #### 1. `httpclient`简介 `...
HttpClient之Https应用实例~ 包含: HttpClient 使用代理访问Https HttpClient 信任所有主机-对于任何证书都不做检查 HttpClient 允许所有证书的校验(包括过期证书)
不会的可以在评论区留言哈,这是我自己做项目用到的。所以绝对可用!同时共享出来给到大家
【标题】:“httpclient4.1访问https的配置方法” 【描述】:“本教程将指导你如何利用Apache HttpClient 4.1实现对HTTPS服务的访问,首先需要在Tomcat服务器上配置SSL支持。我们将涵盖SSL证书的生成、Tomcat服务器...
本项目涉及的是使用Apache HttpClient 4.3.3和Jsoup 1.7.3这两个开源库来实现对CSDN(China Software Developer Network)网站的模拟登录,并在成功登录后抓取用户的个人主页内容。下面将详细阐述这两个库的功能以及...
本篇文章将深入探讨如何使用HttpClient来处理这种情况。 HttpClient是一个强大的Java库,用于执行HTTP请求。然而,当遇到需要客户端证书的HTTPS接口时,普通的配置可能无法工作,因为默认情况下HttpClient不会携带...
这篇名为“简单的httpClient访问”的博文可能是介绍如何使用HttpClient进行基础的HTTP请求。HttpClient库提供了丰富的功能,包括GET、POST请求,设置请求头,处理响应,以及支持HTTPS等。接下来,我们将深入探讨...
- 使用HttpClient获取原始HTML源码,避免Jsoup直接访问网页可能遇到的JavaScript执行问题。 - 将HttpClient获取的HTML内容传递给Jsoup进行解析,提取所需数据。 - 这种方式适合处理包含复杂JavaScript渲染的页面...
HttpClient代理访问网络
Java中使用HttpClient进行HTTPS接口调用的方法是通过继承DefaultHttpClient类,忽略证书校验过程。首先,创建一个SSLClient类,继承DefaultHttpClient类,并在构造函数中初始化SSLContext和TrustManager。然后,使用...
本实例描述了Android平台下使用Apache开源项目的HttpClient访问网络的示例。分别使用HttpClient下的两个子实现类,DefaultHttpClient和AndroidHttpClient分别进行演示。
HttpClient是个很不错的开源框架(org.appache.http),封装了访问http的请求头,参数,内容体,响应等等,使用起来更方面更强大。 HttpURLConnection是java的标准类,可以实现简单的基于URL请求、响应功能,什么都...
本主题将深入探讨如何使用HttpClient和Spring的RestTemplate工具来实现这一目标。这两种方法都是可靠的,但在不同场景下各有优缺点。 首先,让我们了解HTTP和HTTPS的基本概念。HTTP(超文本传输协议)是用于在Web上...
HttpClient与JSoup结合使用,可以实现更高级的网页访问和数据获取。 **结合使用JSoup和HTTPClient** 将JSoup与HTTPClient结合,可以创建一个高效且灵活的网页爬虫。首先,HTTPClient负责发起HTTP请求,获取网页的...
- **创建HttpClient实例**:首先,我们需要创建一个HttpClient对象,例如使用`HttpClientBuilder`或`HttpClients.createDefault()`方法。 - **构建HttpGet请求**:使用`HttpGet`类创建一个HTTP GET请求,指定要...