自签名证书生成过程

一 数字证书(Certificate)

在HTTPS的传输过程中,有一个非常关键的角色——数字证书,所谓数字证书,是一种用于电脑的身份识别机制。由数字证书颁发机构(CA)对使用私钥创建的签名请求文件做的签名(盖章),表示CA结构对证书持有者的认可。数字证书拥有以下几个优点:

  • 使用数字证书能够提高用户的可信度
  • 数字证书中的公钥,能够与服务端的私钥配对使用,实现数据传输过程中的加密和解密
  • 在证认使用者身份期间,使用者的敏感个人数据并不会被传输至证书持有者的网络系统上
  • X.509证书包含三个文件:key,csr,crt。
  • key是服务器上的私钥文件,用于对发送给客户端数据的加密,以及对从客户端接收到数据的解密
  • csr是证书签名请求文件,用于提交给证书颁发机构(CA)对证书签名
  • crt是由证书颁发机构(CA)签名后的证书,或者是开发者自签名的证书,包含证书持有人的信息,持有人的公钥,以及签署者的签名等信息

备注:在密码学中,X.509是一个标准,规范了公开秘钥认证、证书吊销列表、授权凭证、凭证路径验证算法等。

二 使用Openssl生成自签名证书

1 生成服务器端的私钥(key文件)

openssl genrsa -des3 -out server.key 1024

  1. 说明:生成rsa私钥,des3算法,2048位强度,server.key是秘钥文件名。
  2. 注意:生成私钥,需要提供一个至少4位的密码,,此密码用于加密key文件(参数des3是加密算法,也可以选用其他安全的算法),以后每当需读取此文件(通过openssl提供的命令或API)都需输入口令.如果不要口令,则可用以下命令去除口令:openssl rsa -in server.key -out server.key

2 生成服务器端证书签名请求文件(csr文件)

openssl req -new -key server.key -out server.csr

  1. 说明:需要依次输入国家,地区,城市,组织,组织单位,Common Name和Email。其中Common Name,可以写自己的名字或者域名,如果要支持https,Common Name应该与域名保持一致,否则会引起浏览器警告。如下:
  • Country Name (2 letter code) [AU]:CN
  • State or Province Name (full name) [Some-State]:china
  • Locality Name (eg, city) []:xiamen
  • Organization Name (eg, company) [Internet Widgits Pty Ltd]:xxx
  • Organizational Unit Name (eg, section) []:media
  • Common Name (e.g. server FQDN or YOUR name) []:xxx.com
  • Email Address []:xxx@xxx.com

3 生成CA证书文件

server.csr与client.csr文件必须有CA的签名才可形成证书.

3.1首先生成CA的key文件:

openssl genrsa -des3 -out ca.key 1024

3.2 生成CA自签名证书:

openssl req -new -x509 -key ca.key -out ca.crt -days 3650 

  1. 说明:需要依次输入国家,地区,城市,组织,组织单位,Common Name和Email。其中Common Name,可以写自己的名字或者域名,如果要支持https,Common Name应该与域名保持一致,否则会引起浏览器警告。如下:
  • Country Name (2 letter code) [AU]:CN
  • State or Province Name (full name) [Some-State]:china
  • Locality Name (eg, city) []:xiamen
  • Organization Name (eg, company) [Internet Widgits Pty Ltd]:xxx
  • Organizational Unit Name (eg, section) []:media
  • Common Name (e.g. server FQDN or YOUR name) []:xxx.com
  • Email Address []:xxx@ xxx.com

注意:此处的描述最好跟生成server.csr时一样,避免不必要的麻烦

4.利用CA证书对服务端请求文件进行签名

4.1 签名准备

为了避免“/etc/pki/CA/index.txt: No such file or directory”、“/etc/pki/CA/serial: No such file or directory”等问题,先执行下述命令

touch /etc/pki/CA/index.txt

touch /etc/pki/CA/serial

echo 01 > /etc/pki/CA/serial

4.2 生成服务端证书文件 

openssl ca -in server.csr -out server.crt -cert ca.crt -keyfile ca.key

5.将server.key由PKCS#1编码改成PKCS#8无加密编码

5.1首先将server.key重命名为server1.key

mv server.key server1.key

5.2 转换

openssl pkcs8 -topk8 -inform PEM -outform PEM -in server1.key -out server.key -nocrypt

三 采用Keytool生成自签名证书

本节参考:https://blog.csdn.net/shfqbluestone/article/details/21242323

1 生成keystore以及服务器密钥对

keytool -genkeypair -alias certificatekey -keyalg RSA -validity 365 -keystore xxkeystore.jks

这条命令会在生成keystore后接着生成一个密钥对。RSA是非对称密钥算法,也可以改为 keytool支持的其他密钥算法;365代表的是证书的有效期,可以自己指定;xxkeystore.jks是keystroe的名称,也可以自己指定。在cmd命令行输入命令后会提示输入keystore的密码,接着会提示输入名字等信息。

 

  • 输入<certificatekey>的主密码,是指生成服务端证书的私钥。服务端私钥如果和keystore的相同的话,直接按回车。建议直接按回车,即服务端私钥和keystore的密码相同。如果两者的密码不相同的话在服务端可能会出现UnrecoverableKeyException: Cannot recover key的异常。
  • keytool会把生成的keystore文件默认保存到当前路径下,接下来生成的所有文件也都保存到此处。
  • 上述信息中,“您的名字与姓氏是什么?”应填写对应的域名。

2 验证新生成的keystor文件以及证书信息

keytool -list -v -keystore xxkeystore.jks

在cmd命令行输入命令后会显示出相关信息

3 导出公钥证书

keytool -export -alias certificatekey -keystore xxkeystore.jks -rfc -file xxcert.cer

其中xxcert.cer是导出证书的名称,xxkeystore.jks是1中生成的keystore 文件。

执行上面的命令会要求输入xxkeystore的密码

4 Truststore的生成以及公钥证书的导入

Keytool -import -alias certificatekey -file xxcert.cer -keystore xxtruststore.jks

其中:xxcert.cer是导出的公钥证书,xxtruststore.jks是生成的truststore的文件名。

这条命令首先会生成一个truststore,然后导入3生成的公钥证书xxcert.cer。cmd执行命令后,首先会提示输入truststore的密码.

5 验证5生成的truststore文件

keytool -list -v -keystore xxtruststore.jks

其中:xxtruststore.jks是truststore文件名。

到此为止,keystore、truststore、公钥证书都已生成完毕。

四 将.key和.crt文件转换成.jks文件

1 先使用openssl 工具 将 crt和key格式的证书转还成pfx:

 openssl pkcs12 -export -out server.pfx -inkey server.key -in server.crt

其中:server.pfx (转后的pfx)mycert.key,mycert.crt( crt和key格式的证书)

注意:该步骤需要输入密码passward,该密码2与3均需要用到

2 查看证书别名

keytool -list -v -keystore server.pfx

3 在使用jdk自带的keytool将pfx格式文件转为jks:

keytool -importkeystore -srckeystore  server.pfx -srcstoretype pkcs12 -destkeystore mycert.jks -deststoretype JKS  -alias 1

其中:-alias(设置别名) mycert.jks(转还后jks) server.pfx(需转还的pfx)

注意:该步骤需要输入3次密码,均采用1中的passward。

 

  • 5
    点赞
  • 25
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值