客户端向服务器发送数据时,份两种情况,SSL单向验证和SSL双向验证

1.SSL单向验证时

代码如下:

  1. import java.io.IOException;
  2. import java.util.HashMap;
  3. import java.util.Map;
  4. import org.apache.commons.httpclient.HttpClient;
  5. import org.apache.commons.httpclient.HttpException;
  6. import org.apache.commons.httpclient.HttpStatus;
  7. import org.apache.commons.httpclient.NameValuePair;
  8. import org.apache.commons.httpclient.methods.PostMethod;
  9. import org.apache.commons.httpclient.params.HttpClientParams;
  10. import org.apache.commons.httpclient.params.HttpMethodParams;
  11. import org.apache.commons.logging.Log;
  12. import org.apache.commons.logging.LogFactory;
  13. public class ClientSendData {
  14. static Log log = LogFactory.getLog(ClientSendData.class);
  15. private String Url;
  16. // 初始化数据
  17. public ClientSendData() {
  18. Url = "https://test.yihaodian.com:8443/ims/feedbackToPingAn_getData.action";
  19. }
  20. public String sendData(String data) {
  21. String receivedData = null;
  22. try {
  23. Map<String, String> paramsData = new HashMap<String, String>();
  24. paramsData.put("data", data);
  25. receivedData = send(Url, paramsData);
  26. } catch (Exception e) {
  27. e.printStackTrace();
  28. }
  29. return receivedData;
  30. }
  31. public static String send(String url, Map<String, String> paramsMap) {
  32. String result = null;
  33. PostMethod postMethod = null;
  34. HttpClient httpClient = new HttpClient();
  35. httpClient.getParams().setParameter(
  36. HttpMethodParams.HTTP_CONTENT_CHARSET, "utf-8");
  37. postMethod = new PostMethod(url);
  38. if (paramsMap != null && paramsMap.size() > 0) {
  39. NameValuePair[] datas = new NameValuePair[paramsMap.size()];
  40. int index = 0;
  41. for (String key : paramsMap.keySet()) {
  42. datas[index++] = new NameValuePair(key, paramsMap.get(key));
  43. }
  44. postMethod.setRequestBody(datas);
  45. }
  46. HttpClientParams httparams = new HttpClientParams();
  47. httparams.setSoTimeout(60000);
  48. postMethod.setParams(httparams);
  49. try {
  50. int statusCode = httpClient.executeMethod(postMethod);
  51. if (statusCode == HttpStatus.SC_OK) {
  52. result = postMethod.getResponseBodyAsString();
  53. log.info("发送成功!");
  54. } else {
  55. log.error(" http response status is " + statusCode);
  56. }
  57. } catch (HttpException e) {
  58. log.error("error url=" + url, e);
  59. } catch (IOException e) {
  60. log.error("error url=" + url, e);
  61. } finally {
  62. if (postMethod != null) {
  63. postMethod.releaseConnection();
  64. }
  65. }
  66. return result;
  67. }
  68. public static void main(String[] args) {
  69. ClientSendData t = new ClientSendData();
  70. t.sendData("测试SSL单项连接,向服务端发送数据!");
  71. }
  72. }

可能出现的异常

1.java.net.ConnectException: Connection refused: connect

服务器没有启动

2 .javax.net.ssl.SSLHandshakeException: sun.security.validator.ValidatorException: PKIX path building failed

服务端的证书是不可信的。解决办法见这篇文章 http://zhuyuehua.iteye.com/blog/1102347

3.java.net.SocketException: Software caused connection abort: recv failed

这是由于服务端配置的是SSL双向认证,而客户端发送数据是按照服务器是单向认证时发送的,即没有将客户端证书信息一起发送给服务端。

4.org.apache.commons.httpclient.NoHttpResponseException

这一般是服务端防火墙的原因。拦截了客户端请求。

另外,当服务端负载过重时,也会出现此问题。

5.javax.net.ssl.SSLHandshakeException: Remote host closed connection during handshake

这是由于服务端配置的是SSL双向认证,而客户端发送数据是按照服务器是单向认证时发送的,即没有将客户端证书信息一起发送给服务端。服务端验证客户端证书时,发现客户端没有证书,然后就断开了握手连接。

2.SSL双向验证时

双向验证时,暂时不知道如何用HTTPCLIENT发送数据,如需要双向验证时发送数据,参考我另外的文章。另外,有知道HTTPCLIENT如何在双向验证时发送数据的,恳请指教。

SSL连接出现的问题的更多相关文章

  1. 无法建立SSL连接

    在使用wget工具的过程中,当URL使用HTTPS协议时,经常出现如下错误:“无法建立SSL连接”. 这是因为wget在使用HTTPS协议时,默认会去验证网站的证书,而这个证书验证经常会失败.加上&q ...

  2. 使用sslsplit嗅探tls/ssl连接

    首先发一个从youtube弄到的sslsplit的使用教程 http://v.qq.com/page/x/k/s/x019634j4ks.html 我最近演示了如何使用mitmproxty执行中间人攻 ...

  3. 使用 JSSE 定制 SSL 连接的属性--转载

    当数据在网络上传播的时候,通过使用 SSL 对其进行加密和保护,JSSE 为 Java 应用程序提供了安全的通信.在本篇有关该技术的高级研究中,Java 中间件开发人员 Ian Parkinson 深 ...

  4. 在linux下的apache配置https协议,开启ssl连接

    环境:linux 配置https协议,需要2大步骤: 一.生成服务器证书 1.安装openssl软件 yum install -y openssl mod_ssl 2.生成服务器私匙,生成server ...

  5. 为ownCloud配置SSL连接

    为ownCloud配置SSL连接 在你开始使用ownCloud之前,强烈建议你在ownCloud中启用SSL支持.使用SSL可以提供重要的安全好处,比如加密ownCloud流量并提供适当的验证.在本教 ...

  6. python安装的时候报SSL连接错误的解决办法

    Collecting xlwt   Could not fetch URL https://pypi.python.org/simple/xlwt/: There was a problem conf ...

  7. java ssl 连接AD域

    1.安装证书服务和IIS服务,不需要启动asp.(其会在c盘生成一个crt文件)2.获取crt证书文件 windows 2003:文件位于系统盘根目录 windows 2008: 文件位于C:\Win ...

  8. Mysql ssl 连接

    在Azure创建了一个Mysql5.7服务,因为默认使用ssl连接,需要下载Azure的证书,并使用openssl生成客户端的证书.具体流程参考官方文档 大致步骤: 下载根证书, 安装openssl, ...

  9. 苹果电脑利用wget总是会出现无法建立 SSL 连接的问题

    在做迁徙学习的过程中,需要下载已经训练好的Inception_v3模型,首先我们为了将下载的模型保存到指定的地方,我们需要利用 wget -P 想要保存的目录 模型的网址,例如 wget -P /Vo ...

  10. java连接数据库报了ssl连接的警告

    警告内容:Establishing SSL connection without server's identity verification is not recommended(不建议在没有服务器 ...

随机推荐

  1. elasticsearch相关聚合查询示例

    索引(index):logstash-nginx-*,type:nginx_access 请求路径: 1.按照某个字段进行分组统计访问量 { "query": { "bo ...

  2. bzoj5047 [Lydsy1709月赛]空间传送装置 最短路

    题目传送门 https://lydsy.com/JudgeOnline/problem.php?id=5047 题解 题目中没有说可以停留在一个点等待.问了别人才知道停留是可以的. 那么既然停留是可以 ...

  3. 百度MIP技术快速入门(上)

    前言 「本文假定读者已经有初级的前端开发知识,包括HTML.CSS.」 百度在一年前推出了称为 MIP(Mobile Instant Pages)的前端开发组件,主要目的是加速移动端网页的显示.MIP ...

  4. hdu 5810:Balls and Boxes(期望)

    题目链接 这题似乎就是纯概率论.. E(V)=D(X_i)=npq (p=1/m,p+q=1) #include<bits/stdc++.h> using namespace std; t ...

  5. boost algorithm

    BOost Algorithm provides algorithms that complement the algorithms from the standard library. Unlike ...

  6. ps示例

    博客PS示例 一显示指定真正用户名(RUID)或用户ID的进程 打开另外一个终端 [root@centos72 ~]# id wang uid=1000(wang) gid=1000(wang) gr ...

  7. spring-boot整合shiro实现权限管理

    1.运行环境 开发工具:intellij idea JDK版本:1.8 项目管理工具:Maven 4.0.0 2.GITHUB地址 https://github.com/nbfujx/springBo ...

  8. 【Linux】端口反查进程

    平时时常遇到端口占用的情况,又不知道端口是哪个服务启的. 本文以80端口为例. [root@localhost jenkins]# netstat -tunlp | grep 80 tcp6 0 0 ...

  9. 实验1 C语言环境使用和数据类型 运算符 表达式

    Part1 经过练习我发现自己经长会漏掉分号,有时输入法不同,打出来的括号前后不同,还有转义字符的使用,大小写转化之间的表达.还有打字速度比较慢. Part2 #include<stdio.h& ...

  10. delphi+mysql做的图书管理系统,怎么把mysql数据库也一起打包进去?我用的是delphi的Express组件。

    sqlconnection,sqlquery1这些组件,我连接数据库的时候是用对象编辑器里的属性进行连接的,在sqlconnection中指定了字符集utf8,有些人做的方法是利用代码连接的数据库,如 ...