2.34.1 SSL自签名证书生成
MySQL中使用的是自签名证书,自签名证书是由不受信的CA机构颁发的数字证书,也就是自己签发的证书。与受信任的CA签发的传统数字证书不同,自签名证书是由一些公司或软件开发商创建、颁发和签名的。因此这里DBLE也将采用自签名证书方式制作SSL证书
证书介绍
证书名称 | 说明 |
---|---|
ca.pem | 自签名CA证书;用于验证数字证书的可信度 |
server-cert.pem、server-key.pem | 服务端数字证书和私钥;作为服务端身份,适用于除java以外的语言 |
client-vert.pem、client-key.pem | 客户端数字证书和私钥;作为客户端身份,适用于除java以外的语言 |
truststore.jks | 包含自签名CA证书的JKS密钥库;适用于java语言 |
serverkeystore.jks | 包含服务端数字证书和私钥的JKS密钥库;适用于java语言 |
clientkeystore.jks | 包含客户端数字证书和私钥的JKS密钥库;适用于java语言 |
证书生成
MySQL中[ca.pem]就是自签CA证书,服务端证书[server-cert.pem] 和客户端证书[client-cert.pem] 都是由[ca.pem] 签发的。
以下生成方式需要借助openssl,需要提前安装
yum安装方式:yum install openssl -y
具体生成步骤如下:
1、制作CA自签名证书(包含公钥)和私钥
# 创建CA私钥 [ca-key.pem]:
openssl genrsa 2048 > ca-key.pem
# 使用私钥生成对应的证书[ca.pem]
openssl req -new -x509 -nodes -days 3600 -key ca-key.pem -out ca.pem
2、创建私钥和签发服务端的数字证书
# 创建服务端私钥[server-key.pem]和服务端的签发请求[server-req.pem]
openssl req -newkey rsa:2048 -days 3600 -nodes -keyout server-key.pem -out server-req.pem
# 将服务端私钥转成RSA私钥文件格式
openssl rsa -in server-key.pem -out server-key.pem
# 使用CA私钥根据签发请求签发生成服务端证书[server-cert.pem], 其证书包含公钥、所有者、有效期等明文信息,也有经过CA私钥对公钥、所有者、有效期等加密后的签名
openssl x509 -req -in server-req.pem -days 3600 -CA ca.pem -CAkey ca-key.pem -set_serial 01 -out server-cert.pem
3、创建私钥和签发客户端的数字证书
# 创建客户端私钥[client-key.pem]和客户端的签发请求[client-req.pem]
openssl req -newkey rsa:2048 -days 3600 -nodes -keyout client-key.pem -out client-req.pem
# 将客户端私钥转成RSA私钥文件格式
openssl rsa -in client-key.pem -out client-key.pem
# 使用CA私钥根据签发请求签发生成客户端证书[client-cert.pem], 其证书包含公钥、所有者、有效期等明文信息,也有经过CA私钥对公钥、所有者、有效期等加密后的签名
openssl x509 -req -in client-req.pem -days 3600 -CA ca.pem -CAkey ca-key.pem -set_serial 01 -out client-cert.pem
4、验证服务端和客户端数字证书是否可信,当输出的结果为OK,表示通过
openssl verify -CAfile ca.pem server-cert.pem client-cert.pem
5、证书内容查看
openssl x509 -text -in ca.pem
openssl x509 -text -in server-cert.pem
openssl x509 -text -in client-cert.pem
证书转换
openssl生成的证书格式pem、crt等格式,在Java语言并不能识别,需要额外使用keytool工具转换成p12、jks格式
keytool是一个JAVA数据证书的管理工具,keytool会将密钥及证书,其中可包括私钥、信任证书存储在一个keystore的文件中,用于(通过数字签名)自我认证(用户向别的用户/服务认证自己)或数据完整性以及认证服务
具体操作步骤如下:
1、自签CA证书的JKS密钥库
#将[ca.pem]导入Java平台的密钥库中,java支持密钥库类型有:JKS,JCEKS,PKCS12,PKCS11和DKS。这里生成JKS扩展名的truststore.jks密钥库,此密钥库的密码设置为123456(可自定义)
keytool -import -noprompt -file ca.pem -keystore truststore.jks -storepass 123456
2、服务端的数字证书的JKS密钥库
#将[server-cert.pem]和[server-key.pem](证书的密钥文件)转成p12类型的密钥库,然后在转成JKS类型的密钥库,此密钥库的密码设置为123456(可自定义)
openssl pkcs12 -export -in server-cert.pem -inkey server-key.pem -out serverkeystore.p12 -passout pass:123456
keytool -importkeystore -srckeystore serverkeystore.p12 -srcstoretype PKCS12 -destkeystore serverkeystore.jks -srcstorepass 123456 -deststorepass 123456
3、客户端的数字证书的JKS密钥库
#将[client-cert.pem]和[client-key.pem](证书的密钥文件)转成p12类型的密钥库,然后在转成JKS类型的密钥库,此密钥库的密码设置为123456
openssl pkcs12 -export -in client-cert.pem -inkey client-key.pem -out clientkeystore.p12 -passout pass:123456
keytool -importkeystore -srckeystore clientkeystore.p12 -srcstoretype PKCS12 -destkeystore clientkeystore.jks -srcstorepass 123456 -deststorepass 123456