tomcat部署HTTPS

一:经过CA认证后会拿到两个证书文件

tomcat部署HTTPS插图

备注:多域名证书是指多个域名公用一个证书。

二:将证书转成jks格式的证书

1.可以使用证书转换的网站、例如https://www.trustasia.com/tools-cert-converter

2.填入信息,如下图:

tomcat部署HTTPS插图1

tomcat部署HTTPS插图2

备注:私钥密码可以不填入。

三:将下载的jks证书导入到tomcat中

1、将生成的.jks文件导入到tomcat/conf/下

tomcat部署HTTPS插图3

2、配置tomcat-users.xml文件,开启管理员用户

tomcat部署HTTPS插图4

3、配置server.xml文件,设置HTTPS端口

tomcat部署HTTPS插图5

四、配置web.xml文件

4.1如果需要tomcat下所有应用都将HTTP转换为HTTPS时,配置tomcat下conf目录下的web.xml文件,在<web-app>下加入以下配置:

<login-config>

<!– Authorization setting for SSL –>

<auth-method>CLIENT-CERT</auth-method>

<realm-name>Client Cert Users-only Area</realm-name>

</login-config>

<security-constraint>

<!– Authorization setting for SSL –>

<web-resource-collection >

<web-resource-name >SSL</web-resource-name>

<url-pattern>/*</url-pattern>

</web-resource-collection>

<user-data-constraint>

<transport-guarantee>CONFIDENTIAL</transport-guarantee>

</user-data-constraint>

</security-constraint>

4.1如果需要某个应用将HTTP转换为HTTPS时,配置应用中目的web.xml文件,在<web-app>下加入以下配置:

<security-constraint>

<web-resource-collection>

<web-resource-name>OPENSSL</web-resource-name>

<url-pattern>/*</url-pattern>

</web-resource-collection>

<user-data-constraint>

<transport-guarantee>CONFIDENTIAL</transport-guarantee>

</user-data-constraint>

</security-constraint>

  • 访问HTTPS接口遇到的问题

访问HTTPS接口的时候(用IP访问),如果有证书验证错误,需要忽略证书验证,请使用httpClinet类时,最好使用4.2版本的,高版本忽略证书验证待处理。

使用HttpClintUtils.java工具类时使用enableSSL方法处理HttpClient对象,可以正常访问接口。

访问HTTPS接口的时候(用IP访问),会出现证书验证错误,需要忽略证书验证,请使用httpClinet类时,高版本忽略证书验证待处理。

使用HttpClintUtils.java工具类时使用enableSSL方法处理HttpClient对象,可以正常访问接口。

使用方法:

if (url.contains("https")) {

HttpClintUtils.enableSSL((DefaultHttpClient)httpClient);

}

工具类代码:(jdk1.7+)

import java.security.cert.CertificateException;

import javax.net.ssl.SSLContext;
import javax.net.ssl.TrustManager;
import javax.net.ssl.X509TrustManager;

import org.apache.http.conn.scheme.Scheme;
import org.apache.http.conn.ssl.SSLSocketFactory;
import org.apache.http.conn.ssl.X509HostnameVerifier;
import org.apache.http.impl.client.DefaultHttpClient;

public class HttpClintUtils {

private static TrustManager truseAllManager = new X509TrustManager(){

public void checkClientTrusted(
java.security.cert.X509Certificate[] arg0, String arg1)
throws CertificateException {
}

public void checkServerTrusted(
java.security.cert.X509Certificate[] arg0, String arg1)
throws CertificateException {
}

public java.security.cert.X509Certificate[] getAcceptedIssuers() {
return null;
}

};

public static void enableSSL(DefaultHttpClient httpclient){
//调用ssl
try {
SSLContext sslcontext = SSLContext.getInstance("TLS");
sslcontext.init(null, new TrustManager[] { truseAllManager }, null);
SSLSocketFactory sf = new SSLSocketFactory(sslcontext);
sf.setHostnameVerifier(SSLSocketFactory.ALLOW_ALL_HOSTNAME_VERIFIER);
Scheme https = new Scheme("https", sf, 443);
httpclient.getConnectionManager().getSchemeRegistry().register(https);
} catch (Exception e) {
e.printStackTrace();
}
}
}

原文链接:https://blog.csdn.net/qq_33581278/article/details/83307955

© 版权声明
THE END
喜欢就支持一下吧
点赞14 分享