SSL客户端不验证证书
2017-01-02 20:39
99 查看
以前用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);
}
X509证书信任管理器类的实现及应用
在JSSE中,证书信任管理器类就是实现了接口X509TrustManager的类。我们可以自己实现该接口,让它信任我们指定的证书。
接口X509TrustManager有下述三个公有的方法需要我们实现:
void checkClientTrusted(X509Certificate[] chain, String authType) throws CertificateException
该方法检查客户端的证书,若不信任该证书则抛出异常。由于我们不需要对客户端进行认证,因此我们只需要执行默认的信任管理器的这个方法。JSSE中,默认的信任管理器类为TrustManager。
void checkServerTrusted(X509Certificate[] chain, String authType) throws CertificateException
该方法检查服务器的证书,若不信任该证书同样抛出异常。通过自己实现该方法,可以使之信任我们指定的任何证书。在实现该方法时,也可以简单的不做任何处理,即一个空的函数体,由于不会抛出异常,它就会信任任何证书。
X509Certificate[] getAcceptedIssuers()
返回受信任的X509证书数组。
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);
}
X509证书信任管理器类的实现及应用
在JSSE中,证书信任管理器类就是实现了接口X509TrustManager的类。我们可以自己实现该接口,让它信任我们指定的证书。
接口X509TrustManager有下述三个公有的方法需要我们实现:
void checkClientTrusted(X509Certificate[] chain, String authType) throws CertificateException
该方法检查客户端的证书,若不信任该证书则抛出异常。由于我们不需要对客户端进行认证,因此我们只需要执行默认的信任管理器的这个方法。JSSE中,默认的信任管理器类为TrustManager。
void checkServerTrusted(X509Certificate[] chain, String authType) throws CertificateException
该方法检查服务器的证书,若不信任该证书同样抛出异常。通过自己实现该方法,可以使之信任我们指定的任何证书。在实现该方法时,也可以简单的不做任何处理,即一个空的函数体,由于不会抛出异常,它就会信任任何证书。
X509Certificate[] getAcceptedIssuers()
返回受信任的X509证书数组。
相关文章推荐
- 重温WCF之WCF传输安全(十三)(4)基于SSL的WCF对客户端采用证书验证(转)
- WCF传输安全4:基于SSL的WCF对客户端采用证书验证
- SSL时,客户端验证证书过程
- 【实践】WCF传输安全4:基于SSL的WCF对客户端采用证书验证
- IIS SSL客户端证书(忽略/接受/必须)之三——思考验证(3)
- IIS SSL客户端证书(忽略/接受/必须)之三——思考验证(1)
- IIS SSL客户端证书(忽略/接受/必须)之三——思考验证(3)
- SSL双向认证以及证书的制作和使用-https+客户端身份验证
- 通过使用客户端证书调用 Web 服务进行身份验证(zz)
- 通俗的理解HTTPS以及SSL中的证书验证
- Docker 生产环境之安全性 - 用证书验证仓库客户端
- webService双向验证SSL客户端添加代码
- android ssl双向验证 X509证书信任管理器类的实现及应用
- Win2003证书服务配置/客户端(服务端)证书申请/IIS站点SSL设置
- 重温WCF之WCF传输安全(十三)(3)基于SSL的WCF对客户端验证(转)
- HTTPS 客户端验证 服务端证书流程
- Android SSL 验证服务器证书 Hostname 不匹配错误。
- [C#]在.NET调用加了SSL验证的WebService-根据验证过程远程证书无效
- tomcat 配置SSL双向验证证书
- [Java] 绕过证书验证调 HTTPS 接口时报 “SSLHandshakeException: DHPublicKey does not comply to algorithm constraints”的解决办法