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

results matching ""

    No results matching ""