SSL客户端不验证证书
来源:互联网 发布:it helpdesk面试题 编辑:程序博客网 时间:2024/04/30 08:59
以前用C#写了个程序,连接SSL的服务器,其中涉及到证书验证。在C#中,提供了X509证书的验证回调,也就是说我们可以通过这个回调实现我们自己的证书验证过程。最近有把程序用Java重写的打算,就在网上找关于Java中SSL的资料,通过查看javax.net.ssl的相关文档,找到方法如下:
public static void SslSocket() throws Exception { SSLContext context = SSLContext.getInstance("SSL"); // 初始化 context.init(null, new TrustManager[]{new X509TrustManager() { public void checkClientTrusted(X509Certificate[] x509Certificates, String s) throws CertificateException { } public void checkServerTrusted(X509Certificate[] x509Certificates, String s) throws CertificateException { } public X509Certificate[] getAcceptedIssuers() { return null; } } }, new java.security.SecureRandom()); SSLSocketFactory factory = context.getSocketFactory(); SSLSocket sslSocket = (SSLSocket) factory.createSocket("localhost", 443); OutputStream output = sslSocket.getOutputStream(); InputStream input = sslSocket.getInputStream(); byte[] bytes = "hello".getBytes(); output.write(bytes); output.flush(); byte[] buf = new byte[1024]; int len = input.read(buf); String ss = new String(buf, 0, len); System.out.println(ss); }
在JSSE中,证书信任管理器类就是实现了接口X509TrustManager的类。我们可以自己实现该接口,让它信任我们指定的证书。
接口X509TrustManager有下述三个公有的方法需要我们实现:
void checkClientTrusted(X509Certificate[] chain, String authType) throws CertificateException
该方法检查客户端的证书,若不信任该证书则抛出异常。由于我们不需要对客户端进行认证,因此我们只需要执行默认的信任管理器的这个方法。JSSE中,默认的信任管理器类为TrustManager。
void checkServerTrusted(X509Certificate[] chain, String authType) throws CertificateException
该方法检查服务器的证书,若不信任该证书同样抛出异常。通过自己实现该方法,可以使之信任我们指定的任何证书。在实现该方法时,也可以简单的不做任何处理,即一个空的函数体,由于不会抛出异常,它就会信任任何证书。
X509Certificate[] getAcceptedIssuers()
返回受信任的X509证书数组。
0 0
- SSL客户端不验证证书
- SSL时,客户端验证证书过程
- Android SSL 验证服务器证书 Hostname 不匹配错误。
- SSL证书验证详解
- ssl 客户端无法显示证书
- ios7 ssl证书验证问题
- App绕过SSL证书验证
- SSL证书验证(采用AFNetwork)
- SSL证书生成,签名,验证
- 解决vSphere Client提示“由于客户端无法验证服务器的SSL证书,请求失败
- SSL CA客户端证书双向认证IIS配置及代码验证
- IIS SSL客户端证书(忽略/接受/必须)之三——思考验证(1)
- IIS SSL客户端证书(忽略/接受/必须)之三——思考验证(2)
- IIS SSL客户端证书(忽略/接受/必须)之三——思考验证(3)
- DV SSL证书 - 域名验证型SSL证书
- svn客户端证书验证缓存
- PHP获取SSL客户端证书信息
- vdsm的SSL证书验证过程
- document.body.scrollTop用法
- Java多线程——线程管理
- 安装hadoop集群
- 模拟登陆开心网
- Java同样的汉字在服务器和本地的电脑上URLencode 出来的结果不一致
- SSL客户端不验证证书
- 小菜鸟的JS学习之路——No.4(数据类型 2)
- MySQL允许root帐号远程登录
- KMP算法详解
- 解决:Error running app: Instant Run requires 'Tools | Android | Enable ADB integration' to be enabled.
- Android数据加密之异或加密算法
- Atitit rss没落以及替代品在线阅读器
- 在spring中使用JDBC
- poj 1017 装箱子问题