ssl https java_允许Java使用不受信任的证书进行SSL / HTTPS连接

这段Java代码提供了一个方法,用于在不使用密钥库的情况下信任所有HTTPS证书和主机名。它通过创建一个假的X509TrustManager和HostnameVerifier,从而允许连接到任何服务器,即使服务器的证书不受信任或自签名。这种方法主要用于调试和测试环境,不应在生产环境中使用,因为它可能导致安全风险。
摘要由CSDN通过智能技术生成

从下面的代码这里是一个有用的解决方案。没有密钥库等。只需在初始化服务和端口(在SOAP中)之前调用方法SSLUtilities.trustAllHttpsCertificates()。

import java.security.GeneralSecurityException;

import java.security.SecureRandom;

import java.security.cert.X509Certificate;

import javax.net.ssl.HostnameVerifier;

import javax.net.ssl.HttpsURLConnection;

import javax.net.ssl.SSLContext;

import javax.net.ssl.TrustManager;

import javax.net.ssl.X509TrustManager;

/**

* This class provide various static methods that relax X509 certificate and

* hostname verification while using the SSL over the HTTP protocol.

*

* @author Jiramot.info

*/

public final class SSLUtilities {

/**

* Hostname verifier for the Sun's deprecated API.

*

* @deprecated see {@link #_hostnameVerifier}.

*/

private static com.sun.net.ssl.HostnameVerifier __hostnameVerifier;

/**

* Thrust managers for the Sun's deprecated API.

*

* @deprecated see {@link #_trustManagers}.

*/

private static com.sun.net.ssl.TrustManager[] __trustManagers;

/**

* Hostname verifier.

*/

private static HostnameVerifier _hostnameVerifier;

/**

* Thrust managers.

*/

private static TrustManager[] _trustManagers;

/**

* Set the default Hostname Verifier to an instance of a fake class that

* trust all hostnames. This method uses the old deprecated API from the

* com.sun.ssl package.

*

* @deprecated see {@link #_trustAllHostnames()}.

*/

private static void __trustAllHostnames() {

// Create a trust manager that does not validate certificate chains

if (__hostnameVerifier == null) {

__hostnameVerifier = new SSLUtilities._FakeHostnameVerifier();

} // if

// Install the all-trusting host name verifier

com.sun.net.ssl.HttpsURLConnection

.setDefaultHostnameVerifier(__hostnameVerifier);

} // __trustAllHttpsCertificates

/**

* Set the default X509 Trust Manager to an instance of a fake class that

* trust all certificates, even the self-signed ones. This method uses the

* old deprecated API from the com.sun.ssl package.

*

* @deprecated see {@link #_trustAllHttpsCertificates()}.

*/

private static void __trustAllHttpsCertificates() {

com.sun.net.ssl.SSLContext context;

// Create a trust manager that does not validate certificate chains

if (__trustManagers == null) {

__trustManagers = new com.sun.net.ssl.TrustManager[]{new SSLUtilities._FakeX509TrustManager()};

} // if

// Install the all-trusting trust manager

try {

context = com.sun.net.ssl.SSLContext.getInstance("SSL");

context.init(null, __trustManagers, new SecureRandom());

} catch (GeneralSecurityException gse) {

throw new IllegalStateException(gse.getMessage());

} // catch

com.sun.net.ssl.HttpsURLConnection.setDefaultSSLSocketFactory(context

.getSocketFactory());

} // __trustAllHttpsCertificates

/**

* Return true if the protocol handler property java. protocol.handler.pkgs

* is set to the Sun's com.sun.net.ssl. internal.www.protocol deprecated

* one, false otherwise.

*

* @return true if the protocol handler property is set to the Sun's

* deprecated one, false otherwise.

*/

private static boolean isDeprecatedSSLProtocol() {

return ("com.sun.net.ssl.internal.www.protocol".equals(System

.getProperty("java.protocol.handler.pkgs")));

} // isDeprecatedSSLProtocol

/**

* Set the default Hostname Verifier to an instance of a fake class that

* trust all hostnames.

*/

private static void _trustAllHostnames() {

// Create a trust manager that does not validate certificate chains

if (_hostnameVerifier == null) {

_hostnameVerifier = new SSLUtilities.FakeHostnameVerifier();

} // if

// Install the all-trusting host name verifier:

HttpsURLConnection.setDefaultHostnameVerifier(_hostnameVerifier);

} // _trustAllHttpsCertificates

/**

* Set the default X509 Trust Manager to an instance of a fake class that

* trust all certificates, even the self-signed ones.

*/

private static void _trustAllHttpsCertificates() {

SSLContext context;

// Create a trust manager that does not validate certificate chains

if (_trustManagers == null) {

_trustManagers = new TrustManager[]{new SSLUtilities.FakeX509TrustManager()};

} // if

// Install the all-trusting trust manager:

try {

context = SSLContext.getInstance("SSL");

context.init(null, _trustManagers, new SecureRandom());

} catch (GeneralSecurityException gse) {

throw new IllegalStateException(gse.getMessage());

} // catch

HttpsURLConnection.setDefaultSSLSocketFactory(context

.getSocketFactory());

} // _trustAllHttpsCertificates

/**

* Set the default Hostname Verifier to an instance of a fake class that

* trust all hostnames.

*/

public static void trustAllHostnames() {

// Is the deprecated protocol setted?

if (isDeprecatedSSLProtocol()) {

__trustAllHostnames();

} else {

_trustAllHostnames();

} // else

} // trustAllHostnames

/**

* Set the default X509 Trust Manager to an instance of a fake class that

* trust all certificates, even the self-signed ones.

*/

public static void trustAllHttpsCertificates() {

// Is the deprecated protocol setted?

if (isDeprecatedSSLProtocol()) {

__trustAllHttpsCertificates();

} else {

_trustAllHttpsCertificates();

} // else

} // trustAllHttpsCertificates

/**

* This class implements a fake hostname verificator, trusting any host

* name. This class uses the old deprecated API from the com.sun. ssl

* package.

*

* @author Jiramot.info

*

* @deprecated see {@link SSLUtilities.FakeHostnameVerifier}.

*/

public static class _FakeHostnameVerifier implements

com.sun.net.ssl.HostnameVerifier {

/**

* Always return true, indicating that the host name is an acceptable

* match with the server's authentication scheme.

*

* @param hostname the host name.

* @param session the SSL session used on the connection to host.

* @return the true boolean value indicating the host name is trusted.

*/

public boolean verify(String hostname, String session) {

return (true);

} // verify

} // _FakeHostnameVerifier

/**

* This class allow any X509 certificates to be used to authenticate the

* remote side of a secure socket, including self-signed certificates. This

* class uses the old deprecated API from the com.sun.ssl package.

*

* @author Jiramot.info

*

* @deprecated see {@link SSLUtilities.FakeX509TrustManager}.

*/

public static class _FakeX509TrustManager implements

com.sun.net.ssl.X509TrustManager {

/**

* Empty array of certificate authority certificates.

*/

private static final X509Certificate[] _AcceptedIssuers = new X509Certificate[]{};

/**

* Always return true, trusting for client SSL chain peer certificate

* chain.

*

* @param chain the peer certificate chain.

* @return the true boolean value indicating the chain is trusted.

*/

public boolean isClientTrusted(X509Certificate[] chain) {

return (true);

} // checkClientTrusted

/**

* Always return true, trusting for server SSL chain peer certificate

* chain.

*

* @param chain the peer certificate chain.

* @return the true boolean value indicating the chain is trusted.

*/

public boolean isServerTrusted(X509Certificate[] chain) {

return (true);

} // checkServerTrusted

/**

* Return an empty array of certificate authority certificates which are

* trusted for authenticating peers.

*

* @return a empty array of issuer certificates.

*/

public X509Certificate[] getAcceptedIssuers() {

return (_AcceptedIssuers);

} // getAcceptedIssuers

} // _FakeX509TrustManager

/**

* This class implements a fake hostname verificator, trusting any host

* name.

*

* @author Jiramot.info

*/

public static class FakeHostnameVerifier implements HostnameVerifier {

/**

* Always return true, indicating that the host name is an acceptable

* match with the server's authentication scheme.

*

* @param hostname the host name.

* @param session the SSL session used on the connection to host.

* @return the true boolean value indicating the host name is trusted.

*/

public boolean verify(String hostname, javax.net.ssl.SSLSession session) {

return (true);

} // verify

} // FakeHostnameVerifier

/**

* This class allow any X509 certificates to be used to authenticate the

* remote side of a secure socket, including self-signed certificates.

*

* @author Jiramot.info

*/

public static class FakeX509TrustManager implements X509TrustManager {

/**

* Empty array of certificate authority certificates.

*/

private static final X509Certificate[] _AcceptedIssuers = new X509Certificate[]{};

/**

* Always trust for client SSL chain peer certificate chain with any

* authType authentication types.

*

* @param chain the peer certificate chain.

* @param authType the authentication type based on the client

* certificate.

*/

public void checkClientTrusted(X509Certificate[] chain, String authType) {

} // checkClientTrusted

/**

* Always trust for server SSL chain peer certificate chain with any

* authType exchange algorithm types.

*

* @param chain the peer certificate chain.

* @param authType the key exchange algorithm used.

*/

public void checkServerTrusted(X509Certificate[] chain, String authType) {

} // checkServerTrusted

/**

* Return an empty array of certificate authority certificates which are

* trusted for authenticating peers.

*

* @return a empty array of issuer certificates.

*/

public X509Certificate[] getAcceptedIssuers() {

return (_AcceptedIssuers);

} // getAcceptedIssuers

} // FakeX509TrustManager

} // SSLUtilities

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值