openssls

Ling Yu
自建 CA
生产根密钥
openssl genrsa -out ./private/cakey.pem 2048
生成 CA 证书
在 PKI 体系中,CA 的签名可以自签名或从父 CA 获取,这取决于设计的架构。在本例中,我们使用自签名的方式创建 CA 的根证书
生成证书请求
openssl req -new -sha256 -key ./private/cakey.pem -out ./private/cakey.csr -config openssl.cnf
生成自签名根证书
openssl x509 -req -sha256 -days 3650 -in ./private/cakey.csr -signkey ./private/cakey.pem -out cacert.crt
# 有问题
或者直接一步
openssl req -new -x509 -days 3650 -key ./private/cakey.pem -out cacert.crt -config openssl.cnf
有了证书之后,我们可以使用下面的命令查看证书信息
openssl x509 -in cacert.crt -text | less
添加信任
# cat cacert.pem >> /etc/pki/tls/certs/ca-bundle.crt //centos
# mv cacert.pem /usr/local/share/ca-certificates/cacert.pem && update-ca-certificates //ubuntu
初始化证书库
对于 CA 来说,需要记录其已经发放的证书,因此需要先初始化相关的文件,在 ubuntu 中,openssl 的配置文件在/usr/lib/ssl/openssl.cnf 中,内有一个属性 dir 是 CA 保存证书记录的地方,我们可以修改这个地址,之后执行下面的命令:
# 进入cnf中的dir文件夹,创建文件
cd `dir`
touch index.txt && touch serial && echo 01 > serial
客户端向 CA 请求证书
客户端相关的操作都在 client 目录中处理
生成密钥
openssl genrsa -out client.pem 2048
创建证书请求文件
根据私钥文件,生成证书请求文件 CSR,CSR 中一般会包含请求者的公钥,这里的请求者就是客户端,由于客户端的私钥文件可推导出公钥,再加上下面的命令执行时要求输入的组织信息,就可以生成 CSR 了。
openssl req -new -out client.csr -key client.pem -config openssl.cnf
查看 CSR 文件信息
openssl req -in client.csr -text | less
从 CA 获取证书
cd ../CA
openssl ca -in ../client/client.csr -out ../client/client.crt -days 365 -keyfile ./private/cakey.key -cert cacert.crt -config openssl.cnf
ca 命令可以用来发放证书,-in 指定了输入的 csr 文件,-out 是发放给客户端的证书 -keyfile 是 ca 的根证书私钥文件,-cert 是 CA 的根证书
校验证书
openssl verify -CAfile cacert.crt ../client/client.crt
如果返回 OK,说明证书校验成功。
生成pdf签名数字证书
接上步获取的client.crt和client.pem
openssl pkcs12 -export -in client.crt -inkey client.pem -out my.p12
安装证书,即可用来签名
文件签名
openssl genrsa -out privatekey.pem 2048 # 生成密钥
openssl dgst -sha256 -sign privatekey.pem -out t.txt.signature t.txt # 对t.txt进行签名,并将签名结果保存到t.txt.signature中
openssl rsa -in privatekey.pem -outform PEM -pubout -out publickey.pem # 导出公钥
openssl dgst -sha256 -verify publickey.pem -signature t.txt.signature t.txt # 验证签名