构建目录
- 建立 ca 目录
- 构建子目录
- 构建已发行证书存放目录 certs
mkdir certs
- 构建新证书存放目录 newcerts
mkdir newcerts
- 构建私钥存放目录 private
mkdir private
- 构建证书吊销列表存放目录 crl
mkdir crl
- 构建相关文件
- 构建索引文件 index.txt
echo 0>index.txt
- 构建序列号文件 serial
echo 01>serial
构建根证书
- 构建随机数文件
- 构建随机数 private/.rand
openssl
rand #随机数命令
-out private/.rand #输出文件路径
1000 #用来产生伪随机字节数
- 构建根证书密钥 private/ca.key.pem 2048
openssl
genrsa #产生RSA密钥命令
-aes256 #使用AES算法(256位密钥)对产生的私钥加密。可选算法包括 DES、DESede、IDEA 和 AES。
-out private/ca.key.pem #输出路径
2048 #RSA 密钥长度位数,默认长度 512 位
- 生成根证书签发申请文件(ca.csr)
openssl
req #产生证书签发申请命令
-new #表示新请求
-key private/ca.key.pem #密钥,这里为 private/ca.key.pem 文件
-out private/ca.csr #输出路径
-subj "/C=CN/ST=BJ/L=BJ/O=zlex/OU=zlex/CN=*.zlex.org" #指定用户信息,这里使用泛域名 “*.zlex.org”作为用户名
- 得到根证书签发申请文件后,我们可以将其发送给 CA 机构签发。也可以自行签发根证书。
- 签发根证书 private/ca.cer
openssl
x509 #签发 X.509 格式证书命令
-req #证书输入请求
-days 10000 #有效天数
-sha1 #证书摘要算法
-extensions v3_ca #按 Open SSL 配置文件 v3_ca 项添加扩展
-signkey private/ca.key.pem #自签名密钥,这里为 private/ca.key.pem
-in private/ca.csr #输入文件
-out certs/ca.cer #输出文件
- OpenSSL 产生的数字证书不能在Java语言环境中直接使用,需要将其转化为 PKCS#12 编码格式
- 根证书转换 private/ca.p12
openssl
pkcs12 #PKCS#12 编码格式证书命令
-export #导出证书
-cacerts #仅导出 CA 证书
-inkey private/ca.key.pem #输入密钥
-in certs/ca.cer #输入文件
-out certs/ca.p12 #输出文件
个人信息交换文件(PKCS#12)可以作为密钥库或信任库使用,我们可以通过KeyTool查看该密钥库的详细信息
keytool -list -keystore certs/ca.p12 -storetype pkcs12 -v -storepass 123456
现在,已经构建了根证书(ca.cer),可以使用根证书签发服务器证书和客户证书
构建服务器证书
- 构建服务器私钥 private/server.key.pem
openssl
genrsa #产生 RSA 密钥命令
-aes256 #使用 AES 算法(256 位密钥)对产生的私钥加密
-out private/server.key.pem #输出路径
2048 # RSA 密钥长度位数,默认 512 位
- 生成服务器证书签发申请 private/server.csr
openssl
req
-new
-key private/server.key.pem
-out private/server.csr
-subj "/C=CN/ST=BJ/L=BJ/O=zlex/OU=zlex/CN=www.zlex.org"
- 我们已经获得了根证书,可以使用根证书签发服务器证书
- 签发服务器证书 private/server.cer
openssl
x509 #签发 X.509 格式证书命令
-req #证书输入请求
-days 3650 #有效天数
-sha1 #证书摘要算法
-extensions v3_req #按 OpenSSL 配置文件 v3_req 项添加扩展
-CA certs/ca.cer # CA 证书
-CAkey private/ca.key.pem # CA 证书密钥
-CAserial ca.sr1 # CA 证书序列号文件
-CAcreateserial #创建 CA 证书序列号
-in private/server.csr #输入文件
-out certs/server.cer #输出文件
- 将 OpenSSL 产生的数字证书转化为 PLCS#12 编码格式
- 服务器证书转换 private/server.p12
openssl
pkcs12 # PKCS#12 编码格式证书命令
-export #导出证书
-clcerts #仅导出客户证书
-inkey private/server.key.pem
-in certs/server.cer
-out certs/server.p12
现在,已经构建了服务器证书(server.cer),并可使用该证书构建基于单向认证的网络交互平台
构建客户证书
- 产生客户私钥 private/client.key.pem
openssl
genrsa
-aes256
-out private/client.key.pem
2048
- 生成客户证书签发申请 client.csr
openssl
req #产生证书签发的申请命令
-new #新请求
-key private/client.key.pem #密钥
-out private/client.csr #输出路径
-subj "/C=CN/ST=BJ/L=BJ/O=zlex/OU=zlex/CN=zlex" #指定用户信息,这里使用 “zlex” 作为用户名
- 已经获得了根证书,可以使用根证书签发客户证书(client.cer)
- 签发客户证书 certs/client.cer
openssl
ca #签发证书命令
-days 3650 #证书有效期,设为 3650 天
-in private/client.csr #输入文件
-out certs/client.cer #输出文件
-cert certs/ca.cer #证书文件
-keyfile private/ca.key.pem #根证书密钥文件
- 将客户证书转化为 Java 语言可以识别的 PKCS#12 编码格式
- 客户证书转换 certs/client.p12
openssl
pkcs12
-export
-inkey private/client.key.pem
-in certs/client.cer
-out certs/client.p12
至此,完成了双向认证所需的全部证书。
网友评论