【SSL协议】生成SSL证书

生成SSL证书

SSL 是一种加密协议,用于在网络通信中提供数据的保密性和完整性。它使用公钥和私钥来建立安全的连接,并对传输的数据进行加密和解密,以防止未经授权的访问和篡改。根据文章操作,生成以下四个文件用于存储与 SSL 相关的密钥、证书和信任的根证书。

  1. client.keystore.jks
    是客户端密钥库文件。它包含客户端的私钥和相应的证书。客户端使用该私钥进行身份验证和安全通信。客户端的私钥用于加密传输给服务器的数据,并与服务器的公钥进行握手和密钥交换,确保通信的安全性和完整性。
  2. server.keystore.jks
    是服务器密钥库文件。它包含服务器的私钥和相应的证书。服务器使用该私钥进行身份验证和安全通信。服务器的私钥用于解密客户端发送的数据,并与客户端的公钥进行握手和密钥交换,确保通信的安全性和完整性。
  3. client.truststore.jks
    是客户端信任库文件。它包含客户端信任的根证书或证书链。客户端使用该信任库来验证服务器的证书是否可信。如果服务器的证书由客户端信任库中的任何一个根证书所签发,客户端将信任服务器的证书,并继续与服务器进行安全通信。
  4. server.truststore.jks
    是服务器信任库文件。它包含服务器信任的根证书或证书链。服务器使用该信任库来验证客户端的证书是否可信。如果客户端的证书由服务器信任库中的任何一个根证书所签发,服务器将信任客户端的证书,并继续与客户端进行安全通信。

keytool相关指令说明

指令 含义
-alias 别名
-keystore 指定密钥库的名称(就像数据库一样的证书库,可以有很多个证书,cacerts这个文件是jre自带的, 也可以使用其它文件名字,如果没有这个文件名字,它会创建这样一个)
-storepass 指定密钥库的密码
-keypass 指定别名条目的密码
-list 显示密钥库中的证书信息
-v 显示密钥库中的证书详细信息
-export 将别名指定的证书导出到文件
-file 参数指定导出到文件的文件名
-delete 删除密钥库中某条目
-import 将已签名数字证书导入密钥库
-keypasswd 修改密钥库中指定条目口令
-dname 指定证书拥有者信息。其中,CN=名字与姓氏/域名,OU=组织单位名称,O=组织名称,L=城市或区域名称,ST=州或省份名称,C=单位的两字母国家代码
-keyalg 指定密钥的算法
-validity 指定创建的证书有效期多少天
-validity 指定创建的证书有效期多少天

服务器端SSL证书签发

第一步:创建几个目录来保存证书

为了方便证书的保存管理,这里先专门创建几个目录来保存证书

mkdir -p /home/crbt/lihw/ca/{root,server,client,trust}

第二步:生成server.keystore.jks文件(生成服务端的keystore文件)

keytool -keystore /home/crbt/lihw/ca/server/server.keystore.jks -alias node1 -validity 365 -genkey -keypass Q06688 -keyalg RSA -dname "CN=node1,OU=aspire,O=aspire,L=beijing,S=beijing,C=cn" -storepass Q06688 -ext SAN=DNS:node1

注:这里的-ext SAN=DNS:xxx需要指定xxx为我们定义的主机名;-dname中的CN也需要指定为我们定义的主机名。

验证证书:

keytool -list -v -keystore /home/crbt/lihw/ca/server/server.keystore.jks

第三步:生成CA认证证书(ca-cert、ca-key)

提示:利用Linux自带的OpenSSL创建即可。(为了保证整个证书的安全性,需要使用CA进行证书的签名保证)

openssl req -new -x509 -keyout /home/crbt/lihw/ca/root/ca-key -out /home/crbt/lihw/ca/root/ca-cert -days 365 -passout pass:Q06688 -subj "/C=cn/ST=beijing/L=beijing/O=aspire/OU=aspire/CN=node1"

第四步:通过CA证书创建一个客户端信任证书(client.truststore.jks)

keytool -keystore /home/crbt/lihw/ca/trust/client.truststore.jks -alias CARoot -import -file /home/crbt/lihw/ca/root/ca-cert -storepass 

注:有了信任证书才可以进行证书有效性的检查。以后的证书必须通过CA认证后才能使用。

第五步:通过CA证书创建一个服务端器端信任证书(server.truststore.jks)

keytool -keystore /home/crbt/lihw/ca/trust/server.truststore.jks -alias CARoot -import -file /home/crbt/lihw/ca/root/ca-cert -storepass Q06688

注:以后的证书必须通过CA认证后才能使用。

第六步:服务器证书的签名处理

6.1 导出服务器端证书(server.cert-file)

keytool -keystore /home/crbt/lihw/ca/server/server.keystore.jks -alias node1 -certreq -file /home/crbt/lihw/ca/server/server.cert-file -storepass Q06688

6.2 用CA给服务器端证书进行签名处理(server.cert-signed)

openssl x509 -req -CA /home/crbt/lihw/ca/root/ca-cert -CAkey /home/crbt/lihw/ca/root/ca-key -in /home/crbt/lihw/ca/server/server.cert-file -out /home/crbt/lihw/ca/server/server.cert-signed -days 365 -CAcreateserial -passin pass:Q06688

6.3 将CA证书导入到服务器端keystore

keytool -keystore /home/crbt/lihw/ca/server/server.keystore.jks -alias CARoot -import -file /home/crbt/lihw/ca/root/ca-cert -storepass Q06688

6.4 将已签名的服务器证书导入到服务器keystore

keytool -keystore /home/crbt/lihw/ca/server/server.keystore.jks -alias node1 -import -file /home/crbt/lihw/ca/server/server.cert-signed -storepass Q06688

客户端SSL证书签发

第一步:导出客户端证书(client.keystore.jks)

keytool -keystore /home/crbt/lihw/ca/client/client.keystore.jks -alias node1 -validity 365 -genkey -keypass Q06688 -keyalg RSA -dname "CN=node1,OU=aspire,O=aspire,L=beijing,S=beijing,C=cn" -ext SAN=DNS:node1 -storepass Q06688

第二步:将证书文件导入到客户端keystore(client.cert-file)

keytool -keystore /home/crbt/lihw/ca/server/server.keystore.jks -alias node1 -certreq -file /home/crbt/lihw/ca/client/client.cert-file -storepass Q06688

第三步:用CA给客户端证书进行签名处理(client.cert-signed)

openssl x509 -req -CA /home/crbt/lihw/ca/root/ca-cert -CAkey /home/crbt/lihw/ca/root/ca-key -in /home/crbt/lihw/ca/client/client.cert-file -out /home/crbt/lihw/ca/client/client.cert-signed -days 365 -CAcreateserial -passin pass:Q06688

第四步:将CA证书导入到客户端keystore

keytool -keystore /home/crbt/lihw/ca/client/client.keystore.jks -alias CARoot -import -file /home/crbt/lihw/ca/root/ca-cert -storepass Q06688

第五步:将已签名的证书导入到客户端keystore

keytool -keystore /home/crbt/lihw/ca/client/client.keystore.jks -alias CARoot-client -import -file /home/crbt/lihw/ca/client/client.cert-signed -storepass Q06688

参考:SSL认证之相关证书的生成_linux 根据服务端ssl证书生成客户端证书-CSDN博客,参考的博客中有错误作者还未更正。以下是我测试环境,生成服务器/客户端SSL证书的步骤,亲测可用。

posted @ 2024-02-04 18:25  lihewei  阅读(1070)  评论(0编辑  收藏  举报
-->