一:经过CA认证后会拿到两个证书文件
备注:多域名证书是指多个域名公用一个证书。
二:将证书转成jks格式的证书
1.可以使用证书转换的网站、例如https://www.trustasia.com/tools-cert-converter
2.填入信息,如下图:
备注:私钥密码可以不填入。
三:将下载的jks证书导入到tomcat中
1、将生成的.jks文件导入到tomcat/conf/下
2、配置tomcat-users.xml文件,开启管理员用户
3、配置server.xml文件,设置HTTPS端口
四、配置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