生成SSL证书
SSL 是一种加密协议,用于在网络通信中提供数据的保密性和完整性。它使用公钥和私钥来建立安全的连接,并对传输的数据进行加密和解密,以防止未经授权的访问和篡改。根据文章操作,生成以下四个文件用于存储与 SSL 相关的密钥、证书和信任的根证书。
client.keystore.jks
:
是客户端密钥库文件。它包含客户端的私钥和相应的证书。客户端使用该私钥进行身份验证和安全通信。客户端的私钥用于加密传输给服务器的数据,并与服务器的公钥进行握手和密钥交换,确保通信的安全性和完整性。server.keystore.jks
:
是服务器密钥库文件。它包含服务器的私钥和相应的证书。服务器使用该私钥进行身份验证和安全通信。服务器的私钥用于解密客户端发送的数据,并与客户端的公钥进行握手和密钥交换,确保通信的安全性和完整性。client.truststore.jks
:
是客户端信任库文件。它包含客户端信任的根证书或证书链。客户端使用该信任库来验证服务器的证书是否可信。如果服务器的证书由客户端信任库中的任何一个根证书所签发,客户端将信任服务器的证书,并继续与服务器进行安全通信。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证书的步骤,亲测可用
标签:keystore,证书,crbt,ca,生成,SSL,home,lihw From: https://www.cnblogs.com/paimianbaobao/p/18258944