keytool

这里写自定义目录标题

  • 1.keytool的概念
  • 2.keytool命令
    • 2.1 创建证书库
    • 2.2 查看证书库
    • 2.3 导出公钥文件
    • 2.4 导入证书文件到证书库
  • 3.解决报错
  • 4.openssl 生成证书
    • 4.0 生成目录
    • 4.1 生成根证书私钥
    • 4.2 生成根证书签发申请
    • 4.3 签发根证书
    • 4.4 生成服务器证书私钥
    • 4.5 生成服务器证书签发申请
    • 4.6 签发服务器证书

1.keytool的概念

KeyTool是Java中的数字证书管理工具,用于数字证书的申请、导入、导出和撤销等证书管理操作,位于\bin\keytool.exe
要获得数字证书,我们需要使用数字证书管理工具(如KeyTool和OpenSSL)构建CSR(Certificate Signing Request,数字证书签发申请),交由CA机构签发,形成最终的数字证书。

2.keytool命令

2.1 创建证书库

keytool -genkeypair -keyalg RSA -keysize 2048 -sigalg SHA1WithRSA -validity 36000 -alias cert1 -keystore fuxy.keystore -dname "CN=fuxy,OU=yh,O=yh,L=GY,ST=GZ,C=CN" -storepass changeit
 -genkeypair  生成密钥对
 -keyalg 指定密钥算法
 -keysize 指定密钥长度,默认1024位
 -sigalg 指定数字签名算法 SHA1WithRSA
 -validity 有效期,单位天
 -alias 证书别名
 -keystore 指定密钥存储的密钥库
 -storepass  指定证书保护密码

-dname 输入证书用户信息

C-----国家(Country Name)
ST----省份(State or Province Name)
L----城市(Locality Name)
O----公司(Organization Name)
OU----部门(Organizational Unit Name)
CN----产品名(Common Name),应该是域名,若输成了姓名,和真正运行的时候域名不符,会出问题
emailAddress----邮箱(Email Address)

2.2 查看证书库

keytool -list -v -keystore fuxy.keystore
-list   查看证书
-v 列出详细信息 
-keystore  指定证书库

keytool_第1张图片

2.3 导出公钥文件

keytool -exportcert -alias cert1 -rfc -file cert1.crt -keystore fuxy.keystore
-rfc  指定以Base64编码格式输出,否则为二进制
-alias 指定要导出的证书
-file 指定输出文件
-keystore 指定证书库
-storepass  输入证书保护密码

Base64编码的证书包含“----- BEGIN CERTIFICATE -----”和“----- END CERTIFICATE -----”语句。扩展名常用pem,crt,cer。

2.4 导入证书文件到证书库

新建一个new.keystore的证书库,只包含cert3证书

keytool -genkeypair -keyalg RSA -keysize 2048 -sigalg SHA1WithRSA -validity 36000 -alias cert3 -keystore new.keystore -dname "CN=fuxy,OU=yh,O=yh,L=GY,ST=GZ,C=CN" -storepass changeit

导入cert1证书到new证书库

keytool -importcert -alias cert1 -file cert1.crt -keystore new.keystore -storepass changeit -v

-v 详细输出
验证:
keytool_第2张图片
keytool_第3张图片

3.解决报错

错误信息:

PKIX path building failed: sun.security.provider.certpath.SunCertPathBuilderException: unable to find valid certification path to requested target

解决办法:将安全证书导入到java的cacerts证书库,changeit为jdk cecerts证书库的默认密码

keytool -importcert -alias cfcnat -keystore ${JAVA_HOME}/jre/lib/security/cacerts -file /u01/natcfc.pem -storepass changeit
 keytool -importcert -alias cfcnat -keystore "${JAVA_HOME}/jre/lib/security/cacerts" -file "/u01/xxx.pem" -storepass changeit

4.openssl 生成证书

4.0 生成目录

#构建已发行证书存放目录
certsmkdir certs
#构建新证书存放目录newcerts
mkdir newcerts
#构建私钥存放目录private
mkdir private
#构建证书吊销列表存放目录crl
mkdir crl
openssl rand -out private/.rand 1000
echo '' > index.txt
echo 01 > serial

4.1 生成根证书私钥

 openssl genrsa -aes256 -out private/ca.key.pem 2048

4.2 生成根证书签发申请

openssl req -new -key private/ca.key.pem -out private/ca.csr -subj "/C=CN/ST=GZ/L=GY/O=yh/OU=devDpt/CN=*.fuxy.com"

4.3 签发根证书

openssl x509 -req -days 10000 -sha1 -extensions v3_ca -signkey private/ca.key.pem -in private/ca.csr -out certs/ca.cer

4.4 生成服务器证书私钥

 openssl genrsa -aes256 -out private/server.key.pem 2048

4.5 生成服务器证书签发申请

openssl req -new -key private/server.key.pem -out private/server.csr -subj "/C=CN/ST=GZ/L=GY/O=yh/OU=devDpt/CN=*.fuxy.com"

4.6 签发服务器证书

openssl x509 -req -days 36500 -sha1 -extensions v3_req -CA certs/ca.cer -CAkey private/ca.key.pem -CAserial ca.srl -CAcreateserial -in private/server.csr -out certs/server.cer

链接: HttpClient 调用https接口的三种方式.
链接: keytool 用法总结.
链接: 解决报错.
链接: keytool其他命令.

链接: SSL证书配置(https访问接口, 单向认证和双向认证).
链接: 使用keytool生成公钥、私钥、证书并且读取出来,使用私钥签名jar并验证(转).
链接: 网络安全 / crt、pem、pfx、cer、key 作用及区别.

链接: 证书格式.
链接: 使用keytool生成keystore密钥文件,并提取公钥和私钥,签名、验签.

链接: pks转pem.

你可能感兴趣的:(java,keytool)