证书基本介绍及证书文件准备:
证书文件清单
文章的前面部分其实是阿里云上面下载的操作文档,我复制后贴出来的,下载地址: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):
合并方法:
当配置 nginx 或 apache 文件时,
需要将中间证书(文件序号 2,3)和网站证书文件(文件 序号 5)合并成一个,操作方法: 分别用文本编辑器打开三个文件,将文件 2 和文件 3 中内容依次复制粘贴到文件 5 的内容 之后保存即可。(根证书在合并时可以不放,也可以放在除了第一顺序的任何其他顺序,中 间不能出现空格或其他任意符号)
合并成功后参考下图:
2、 情况二:收到的证书由下方截图中的二个部分组成:
合并方法:
当配置 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)
是否需要合并证书/转化证书格式?
-
当配置 nginx 或 apache 服务器时,需要将中间证书和初级证书合并成一个,再加上单独使 用的 key 文件再进行安装。
合并方法: 打开文本编辑器(txt),将初级证书和中间证书按照 初级证书代码中间证书代码的顺序复制 到文本中,保存为 crt 文件。(根证书在合并时可以不放,也可以放在除了第一顺序的任何其他 顺序) -
当配置 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"/>