java中Keytool生成证书

       任何机构或者个人都可以申请数字证书,并使用数字证书对网络通信保驾护航。要获得数字证书,首先需要使用数字证书管理工具,如keytool、OpenSSL等,然后构建CSR(Certificate Siging Request,数字证书签发申请),提交给数字证书认证机构进行签名,最终形成数字证书。

Keytool 是一个Java 数据证书的管理工具 ,Keytool 将密钥(key)和证书(certificates)存在一个称为keystore的文件中。

在keystore里,包含两种数据:

(1)密钥实体(Key entity)——密钥(secret key)又或者是私钥和配对公钥(采用非对称加密) 
(2)可信任的证书实体(trusted certificate entries)——只包含公钥

JDK中Keytool常见的命令:

-genkey      在用户主目录中创建一个默认文件".keystore",还会产生一个mykey的别名,mykey中包含用户的公钥、私钥和证书(在没有指定生成位置的情况下,keystore会存在用户系统默认目录)
-alias       产生别名,每个keystore都关联这一个独一无二的alias,这个alias通常不区分大小写
-keystore    指定密钥库的名称(产生的各类信息将不在.keystore文件中)
-keyalg      指定密钥的算法 (如 RSA  DSA(如果不指定默认采用DSA))
-validity    指定创建的证书有效期多少天
-keysize     指定密钥长度
-storepass   指定密钥库的密码(获取keystore信息所需的密码)
-keypass     指定别名条目的密码(私钥的密码)
-dname       指定证书拥有者信息 
-list        显示密钥库中的证书信息     
-v           显示密钥库中的证书详细信息
-export      将别名指定的证书导出到文件 
-file        参数指定导出到文件的文件名
-delete      删除密钥库中某条目 
-printcert   查看导出的证书信息  
-keypasswd   修改密钥库中指定条目口令   
-import      将已签名数字证书导入密钥库 

在JDK 1.4以后的版本中都包含了这一工具,它的位置为%JAVA_HOME%\bin\keytool.exe,如下图:

java中Keytool生成证书_第1张图片

java中Keytool生成证书_第2张图片

(1)构建自签名证书

       在构建CSR之前,需要先在秘钥库中生成本地数字证书。生成本地数字证书需要提供用户的身份、加密算法、有效期等一些数字证书的基本信息。

keytool -genkeypair -keyalg RSA -keysize 1024 -sigalg MD5withRSA -va
lidity 365 -alias bo -keystore bo.keystore

java中Keytool生成证书_第3张图片

(2)证书导出

     执行完上述命令之后,我们已经在本地生成了一个数字证书,虽然没有经过证书认证机构进行认证,但是并不影响我们使用,我们可以使用相应的命令导出。

C:\Users\bo>keytool -exportcert -alias bo -file bo.cer -keystore bo.keystore -rfc

java中Keytool生成证书_第4张图片

(3)导出CSR

       如果想得到证书认证机构的认证,需要导出数字证书并签发申请(CSR),经过认证机构认证并签发后,再将认证后的证书导入到本地秘钥库和信任库。

keytool -certreq -alias bo -keystore bo.keystore -file bo.csr -v

导出CSR后,便可以到VerSign、GeoTrust等权威证书认证机构进行证书认证,但是通过这些认证机构认证的证书往往价格不菲。可以通过一些证书认证机构申请免费的证书,如Cacert。

(4)导入证书

      获得证书认证机构颁发的数字证书后,需要将其导入信任库。

keytool -importcert -trustcacerts -alias bo -file bo.cer -keystore bo.keystore

(5)查看keystore中证书

      通过上面一系列操作导入证书后,便可以通过相关命令,列出keystore中的证书。

keytool -list -alias bo -keystore bo.keystore

keytool没办法签发其它证书,只能只签名生成证书。因此用户如果需要签发证书,需要使用OpenSSL等来进行证书的签发和证书链的管理。

参考:

https://blog.csdn.net/yinhuaiya/article/details/81774314

https://www.cnblogs.com/xdp-gacl/p/3750965.html

 

你可能感兴趣的:(keytool,数字证书,互联网安全)