HttpClient 4.5 利用HTTPS提交POST请求

本文介绍了如何在HttpClient 4.5中利用HTTPS提交POST请求,并确保证书验证的安全性。通过实现X509TrustManager和HostnameVerifier接口,自定义SSLContext以避免中间人攻击和非法重定向。详细步骤包括导入自签名证书、检查服务器证书与本地证书的一致性以及验证主机名,以增强HTTPS连接的安全性。
摘要由CSDN通过智能技术生成

最近在写一个测试服务器的程序,其中需要使用HTTPS协议,向服务器提交多个请求,由于服务器的证书是自己做的,因此要做证书的验证等工作。在网上查了许多例子,发现都不太合适,因为大部分代码都没做证书验证,所以容易受到中间人攻击。这里查阅了许多文档,并编写了自己的代码,做一个总结。

我这里使用了HttpClient 4.5版本。

参考了Oracle的文档:http://docs.oracle.com/javase/7/docs/technotes/guides/security/jsse/JSSERefGuide.html,SSL相关概念和协议内容在该文档中已经非常详细的介绍了,这里也不再赘述。

接下来直接上代码了。

首先需要实现一个X509TrustManager接口,这个接口是用来判断服务器提供的证书是否可以被客户端信任。这个类需要一个证书,我们可以通过浏览器的导出证书功能,将服务器上我们自己创建的证书导出在本地。在MyX509TrustManager的构造方法中,利用CertificateFactory生成一个Certificate实例。checkClientTrusted是用来检查客户端的证书的,这里我们只需要检测服务器端的证书就可以了,因此checkClientTrusted方法体就不添加代码了。checkServerTrusted是用来检查服务器端证书的合法性的,我们在这里对它进行一些处理。我这里用了一个非常简单的方法,就是比较服务器端发送来的证书和自己本地的证书是否一致。如果没有一样的证书,就直接抛出异常。

package com.uestc.test.upload;

import java.io.BufferedInputStream;
import java.io.FileInputStream;
import java.io.IOException;
import java.security.cert.Certificate;
import java.security.cert.CertificateException;
import java.security.cert.CertificateFactory;
import
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值