首页 > 自签名证书生成过程

在线生成自签名证书,自签名证书生成过程

互联网 2021-02-28 20:41:35
一 数字证书(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

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

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

说明:需要依次输入国家,地区,城市,组织,组织单位,Common Name和Email。其中Common Name,可以写自己的名字或者域名,如果要支持https,Common Name应该与域名保持一致,否则会引起浏览器警告。如下:Country Name (2 letter code) [AU]:CNState or Province Name (full name) [Some-State]:chinaLocality Name (eg, city) []:xiamenOrganization Name (eg, company) [Internet Widgits Pty Ltd]:xxxOrganizational Unit Name (eg, section) []:mediaCommon Name (e.g. server FQDN or YOUR name) []:xxx.comEmail Address []:xxx@xxx.com3 生成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 

说明:需要依次输入国家,地区,城市,组织,组织单位,Common Name和Email。其中Common Name,可以写自己的名字或者域名,如果要支持https,Common Name应该与域名保持一致,否则会引起浏览器警告。如下:Country Name (2 letter code) [AU]:CNState or Province Name (full name) [Some-State]:chinaLocality Name (eg, city) []:xiamenOrganization Name (eg, company) [Internet Widgits Pty Ltd]:xxxOrganizational Unit Name (eg, section) []:mediaCommon Name (e.g. server FQDN or YOUR name) []:xxx.comEmail 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的密码,接着会提示输入名字等信息。

 

输入的主密码,是指生成服务端证书的私钥。服务端私钥如果和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。

 

免责声明:非本网注明原创的信息,皆为程序自动获取自互联网,目的在于传递更多信息,并不代表本网赞同其观点和对其真实性负责;如此页面有侵犯到您的权益,请给站长发送邮件,并提供相关证明(版权证明、身份证正反面、侵权链接),站长将在收到邮件24小时内删除。

相关阅读