Windows openssl自建CA并分发证书(ECC)

文章目录

  • 前提准备
  • 建立CA,创建自签名证书
  • 使用CA私钥和证书签发服务端证书

ECC算法,目前主要用于签名/验签和生成DH会话秘钥。
下面的表格展示了在相同的安全登记下,ECC和RSA秘钥长度的对比:

RSA size(in bits) ECC size(in bits)
1024 160
2048 224
3072 256
7680 384

前提准备

需要下载安装openssl,并将其添加进path

确保openssl可以使用后,列出可用ECC曲线

openssl ecparam -list_curves

Windows openssl自建CA并分发证书(ECC)_第1张图片
我们使用prime256v1生成ECC秘钥对。

使用ECC key 生成CA证书

我们需要使用CA证书来签名服务器和客户端的证书,使用ECC私钥生成CA根证书,为此我们创建几个目录,用来存储CA证书,秘钥,索引数据

任意创建一个文件夹,这里随意命名位tls
Windows openssl自建CA并分发证书(ECC)_第2张图片然后在该文件夹里创建如上图圈出文件/文件夹,其他都是后面命令自动生成的

  1. private: 用于存放CA私钥
  2. cert:用于存放CA自签的CA证书
  3. client_certs: 用于存放经CA签发好的客户端证书集合
  4. server_certs: 用于存放经CA签发好的服务器证书集合
  5. newcerts: 用于存放经CA签发好的所有证书集合并编号
  6. index:用于存放证书索引信息
  7. serial: 用于存放证书编号,并在serial文件中添加10000001初始编号,之后每签名一个新证书,编号自动+1
  8. openssl.cnf为配置文件,可以从目录bin/cnf中拷贝过来Windows openssl自建CA并分发证书(ECC)_第3张图片
    红色箭头处修改为自己创建的根文件夹名

建立CA,创建自签名证书

命令行进入自己创建的文件夹

生成CA ECC私钥

openssl ecparam -out private/ec-cakey.pem -name prime256v1 -genkey

在这里插入图片描述
⽣成秘钥时,openssl默认仅存储曲线的名字:

openssl ecparam -in private/ec-cakey.pem -text -noout

在这里插入图片描述
生成CA证书
使用上一步生成的CA私钥,生成CA证书

openssl req -new -x509 -days 3650 -config openssl.cnf -extensions v3_ca -key private/ec-cakey.pem -out cert/ec-cacert.pem

Windows openssl自建CA并分发证书(ECC)_第4张图片
接下来,我们可以验证下CA证书的内容和使用的签名算法

openssl x509 -noout -text -in cert/ec-cacert.pem

Windows openssl自建CA并分发证书(ECC)_第5张图片

可以看到,我们使用的是ECDSA签名算法来生成我们的CA证书,而不是使用的RSA。

使用私钥验证CA证书

如果想使用私钥(包含ECDSA key)验证证书:

openssl x509 -noout -pubkey -in cert/ec-cacert.pem

在这里插入图片描述

类似的我们可以从私钥导出公钥

openssl pkey -pubout -in private/ec-cakey.pem

在这里插入图片描述
可以看到生成的公钥是相同的

使用CA私钥和证书签发服务端证书

命令行进入server_certs文件夹

我们再一次使用曲线prime256v1生成ECC的私钥

openssl ecparam -out server.key -name prime256v1 -genkey

在这里插入图片描述
验证曲线:

openssl ecparam -in server.key -text -noout

在这里插入图片描述
生成服务端证书请求文件CSR

我们的CA证书生成时,使用的是openssl.cnf 里的v3_ca扩展选项
Windows openssl自建CA并分发证书(ECC)_第6张图片
CA证书会匹配 Country Name, state or Province Name and Organization Name.所以服务端证书的CSR请求里的值必须匹配CA证书里相应的值。

Common Name必须是服务端的主机名(hostname),客户端与服务端认证时会使用这个Common Name.

生成CSR请求:

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

Windows openssl自建CA并分发证书(ECC)_第7张图片

现在我们使用ECC CA私钥,CA证书,对server.csr进行签名,生成服务端证书:

openssl ca -keyfile ../private/ec-cakey.pem -cert ../cert/ec-cacert.pem -in server.csr -out server.crt -config ../openssl.cnf

Windows openssl自建CA并分发证书(ECC)_第8张图片

验证证书是否有效时使用CA证书进行验证

openssl verify -CAfile ../cert/ec-cacert.pem server.crt

在这里插入图片描述
我们也可以验证服务器证书的签名算法,确保使用的是ECC私钥

openssl x509 -noout -text -in server.crt

Windows openssl自建CA并分发证书(ECC)_第9张图片
验证index.txt

验证index.txt包含服务端证书的信息,这个服务端证书是我们使用CA证书签名的。100000001是我们再开始部分写入的序列号,每次签名这个序列号都会自加1
在这里插入图片描述

客户端证书生成与服务器类似。

你可能感兴趣的:(OpenSSL,安全,自建CA,openssl,ecc,签发证书)