Sectigo/Comodo Positive SSL证书 Tomcat 下的安装方法

证书基本介绍及证书文件准备:
证书文件清单

文章的前面部分其实是阿里云上面下载的操作文档,我复制后贴出来的,下载地址:https://netmarket.oss.aliyuncs.com/315ce15e-db4c-41e7-be08-c405df06e659.pdf?spm=5176.730006-53366009-56014009-cmfw00035845.content.8.2410ce1e6nFZpa&file=315ce15e-db4c-41e7-be08-c405df06e659.pdf
文章的后面部分是结合操作文档在 Tomcat 下的安装方式

Sectigo SSL 证书颁发下来为下列两种情况中的一种,请根据自己收到的文件做相应操作:
1、 情况一,收到的证书由下方截图中的五个部分组成(私钥key可能由商家处提供单独发送,如果发送的是文本,复制内容保存为:私钥名.key):
Sectigo/Comodo Positive SSL证书 Tomcat 下的安装方法_第1张图片

合并方法: 
当配置 nginx 或 apache 文件时,
需要将中间证书(文件序号 2,3)和网站证书文件(文件 序号 5)合并成一个,操作方法: 分别用文本编辑器打开三个文件,将文件 2 和文件 3 中内容依次复制粘贴到文件 5 的内容 之后保存即可。(根证书在合并时可以不放,也可以放在除了第一顺序的任何其他顺序,中 间不能出现空格或其他任意符号)
合并成功后参考下图:
Sectigo/Comodo Positive SSL证书 Tomcat 下的安装方法_第2张图片

2、 情况二:收到的证书由下方截图中的二个部分组成:
Sectigo/Comodo Positive SSL证书 Tomcat 下的安装方法_第3张图片

合并方法:
当配置 nginx 或 apache 文件时,需要将中间证书包和网站证书文件合并成一个,
操作方法: 分别用文本编辑器打开两个文件,将 Bundle 文件中的内容复制粘贴到网站证书文件的内容 之后保存即可。

证书格式转换:
当客户的 web 服务是 IIS 或者是 tomcat 等时,需要对证书格式进行转换才能导入
方法一:用户可以使用 OPENSSL 工具在命令行下进行转换(具体命令网上可以查询);
crt 转 pfx:

openssl pkcs12 -export -out domain.pfx -inkey domain.key -in domain.crt -certfile ca_bundle.crt 

crt 转 jks: 网上搜索可以查到
方法二:使用转换工具: https://www.chinassl.net/ssltools/convert-ssl.html 如图所示 ,根据提示上传相应文件,即可转换。(原格式选择 pem)
Sectigo/Comodo Positive SSL证书 Tomcat 下的安装方法_第4张图片

是否需要合并证书/转化证书格式?

  1. 当配置 nginx 或 apache 服务器时,需要将中间证书和初级证书合并成一个,再加上单独使 用的 key 文件再进行安装。
    合并方法: 打开文本编辑器(txt),将初级证书和中间证书按照 初级证书代码中间证书代码的顺序复制 到文本中,保存为 crt 文件。(根证书在合并时可以不放,也可以放在除了第一顺序的任何其他 顺序)

  2. 当配置 IIS 或 Tomcat 服务器时,需要其他格式的证书,例如 JKS,则不用合并证书,而是转 换证书。
    证书格式转换方法: 方法一:用户可以使用 OPENSSL 工具在命令行下进行转换(具体命令网上可以查询);
    crt 转 pfx: openssl pkcs12 -export -out domain.pfx -inkey domain.key -in domain.crt -certfile ca_bundle.crt
    crt 转 jks: 网上搜索可以查到。

注:如果使用的Tomcat 不支持.pfx和.jks,可以把.pfx 转成 .keystore
Java转换代码:

package com;


import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.security.Key;
import java.security.KeyStore;
import java.security.cert.Certificate;
import java.util.Enumeration;

public class ConvertPFXToKeystoreUtil {
	public static final String PKCS12 = "PKCS12";
	public static final String JKS = "JKS";
	public static final String PFX_KEYSTORE_FILE = "E:\\ssl\\shuyi.com.my.pfx";
    	public static final String KEYSTORE_PASSWORD = "****";  //生成pfx时的密码
	public static final String JKS_KEYSTORE_FILE = "E:\\ssl\\shuyistore.keystore";

	/**
	 * 将pfx或p12的文件转为keystore
	 */
	public static void coverTokeyStore() {
		try {
			KeyStore inputKeyStore = KeyStore.getInstance("PKCS12");
			FileInputStream fis = new FileInputStream(PFX_KEYSTORE_FILE);
			char[] nPassword = null;

			if ((KEYSTORE_PASSWORD == null)
					|| KEYSTORE_PASSWORD.trim().equals("")) {
				nPassword = null;
			} else {
				nPassword = KEYSTORE_PASSWORD.toCharArray();
			}

			inputKeyStore.load(fis, nPassword);
			fis.close();

			KeyStore outputKeyStore = KeyStore.getInstance("JKS");

			outputKeyStore.load(null, KEYSTORE_PASSWORD.toCharArray());

			Enumeration enums = inputKeyStore.aliases();

			while (enums.hasMoreElements()) { // we are readin just one
				// certificate.

				String keyAlias = (String) enums.nextElement();

				System.out.println("alias=[" + keyAlias + "]");

				if (inputKeyStore.isKeyEntry(keyAlias)) {
					Key key = inputKeyStore.getKey(keyAlias, nPassword);
					Certificate[] certChain = inputKeyStore
							.getCertificateChain(keyAlias);

					outputKeyStore.setKeyEntry(keyAlias, key,
							KEYSTORE_PASSWORD.toCharArray(), certChain);
				}
			}

			FileOutputStream out = new FileOutputStream(JKS_KEYSTORE_FILE);

			outputKeyStore.store(out, nPassword);
			out.close();
		} catch (Exception e) {
			e.printStackTrace();
		}
	}

	/**
	 * 将keystore转为pfx
	 */
	public static void coverToPfx() {
		try {
			KeyStore inputKeyStore = KeyStore.getInstance("JKS");
			FileInputStream fis = new FileInputStream(JKS_KEYSTORE_FILE);
			char[] nPassword = null;

			if ((KEYSTORE_PASSWORD == null)
					|| KEYSTORE_PASSWORD.trim().equals("")) {
				nPassword = null;
			} else {
				nPassword = KEYSTORE_PASSWORD.toCharArray();
			}

			inputKeyStore.load(fis, nPassword);
			fis.close();

			KeyStore outputKeyStore = KeyStore.getInstance("PKCS12");

			outputKeyStore.load(null, KEYSTORE_PASSWORD.toCharArray());

			Enumeration enums = inputKeyStore.aliases();

			while (enums.hasMoreElements()) { // we are readin just one
				// certificate.

				String keyAlias = (String) enums.nextElement();

				System.out.println("alias=[" + keyAlias + "]");

				if (inputKeyStore.isKeyEntry(keyAlias)) {
					Key key = inputKeyStore.getKey(keyAlias, nPassword);
					Certificate[] certChain = inputKeyStore
							.getCertificateChain(keyAlias);

					outputKeyStore.setKeyEntry(keyAlias, key,
							KEYSTORE_PASSWORD.toCharArray(), certChain);
				}
			}

			FileOutputStream out = new FileOutputStream(PFX_KEYSTORE_FILE);

			outputKeyStore.store(out, nPassword);
			out.close();
		} catch (Exception e) {
			e.printStackTrace();
		}
	}

	public static void main(String[] args) {
		coverTokeyStore();
	}
}

Tomcat安装,把对应的证书文件拷贝到tomcat的conf目录,然后修改server.xml文件,把下面代码的注释打开

<!-- <Connector port="8443" protocol="org.apache.coyote.http11.Http11Protocol"
               maxThreads="150" SSLEnabled="true" scheme="https" secure="true"
               clientAuth="false" sslProtocol="TLS" /> -->

添加2个属性 证书文件:keystoreFile=“conf/shuyistore.keystore” 证书密码:keystorePass="****"
修改为:

<Connector port="443" protocol="org.apache.coyote.http11.Http11NioProtocol"
           maxThreads="200" SSLEnabled="true" scheme="https" secure="true"
           keystoreFile="conf/shuyistore.keystore" keystorePass="****"
           clientAuth="false" sslProtocol="TLS"/>

你可能感兴趣的:(Java,Tomcat,SSL,服务器,ssl,tomcat)