使用 ECC算法创建 CA根证书颁发机构.note
一、使用 ECC算法创建 CA根证书颁发机构
·什么是 ECC 算法:

1、ECC 是一种基于椭圆曲线数学的公钥加密算法,用于数字签名、密钥交换和证书,比 RSA 更快更安全。常用曲线有 prime256v1、secp384r1、secp521r1。
2、ECC = 更小的密钥、更强的安全、更快、现在的主流算法。
3、ECC 不是一个单独算法,而是一个算法家族,主要包括:
1)ECC 密钥交换(ECDH)
ECC 版本的 Diffie-Hellman:
用来协商共享密钥
TLS1.3 默认使用 ECDHE(带临时密钥,更安全)
用途:
·HTTPS
·VPN(IPSec IKEv2)
·SSH(ECDH 密钥交换)
2)ECC 数字签名(ECDSA)
ECC 版本的数字签名算法:
·取代 RSA 签名
·更快,证书更小
你看到 HTTPS 证书里的“Signature Algorithm: ecdsa-with-SHA256”,就是 ECDSA。
3)ECC ECIES(加密)
虽然 ECC 不直接加密大数据,但有 ECIES(用 ECC 做密钥交换 + 对称加密):
用途:
·区块链
·一些安全传输场景
ECC 最常用的曲线(非常重要!)
ECC 真正的标准是“曲线”,而不是算法本身。
你创建证书时经常看到:
prime256v1
secp384r1
secp521r1
这些就是 具体的椭圆曲线标准。
1、使用 openssl命令创建带有 ECC算法的私钥、证书:
# 创建ECC 私钥:
openssl ecparam -name prime256v1 -genkey -noout -out ca.key
chmod 600 ca.key //默认就是 600的权限
# 创建ECC 证书(不调用 openssl.cnf):
openssl req -x509 -new -nodes -key ca.key -out ca.crt -sha256 -days 3650 -subj "/C=CN/ST=Beijing/L=Beijing/O=MyCA/OU=RootCA/CN=My ECC Root CA"
# 创建ECC 证书(调用 openssl.cnf)(可以在openssl.cnf中 v3_ca字段下写 CRL、OCSP 等配置):
openssl req -x509 -new -config /etc/ssl/openssl.cnf -key ca.key -out ca.crt -days 3650 -sha256 -extensions v3_caopenssl.cnf:

# 查看证书字段:
openssl x509 -in ca.crt -text不调用 openssl.cnf

调用openssl.cnf:


·创建证书申请,并签发证书:
·不调用 openssl.cnf:
# 创建私钥:
openssl ecparam -name prime256v1 -genkey -noout -out web.key
# 创建证书申请:
openssl req -new -key web.key -out web.csr -subj "/C=CN/CN=New Web Certificate/"
# 签发证书:
openssl x509 -req -in web.csr -CA ca.crt -CAkey ca.key -out web.crt -days 3650但是这种方式无法添加 SubjectAltName DNS字段

查看证书:

·调用 openssl.cnf:
## 调用 openssl.cnf,就能够指定 SubjectAltName
# 创建私钥:
openssl ecparam -name prime256v1 -genkey -noout -out web.key
# 创建证书申请:
openssl req -new -key web.key -out web.csr -subj "/C=CN/CN=New Web Certificate/"
# 签发证书:
openssl x509 -req -in web.csr -CA ca.crt -CAkey ca.key -out web.crt -days 3650 -extfile /etc/ssl/openssl.cnf -extensions usr_certopenssl.cnf:


查看证书:

2、创建 根证书颁发机构:
上面的方式虽然能够创建和颁发证书,但是不存在 index.txt 文件,诸如 CRL、OCSP 之类的都是做不了的,因此我们还是需要创建 CA根证书颁发机构
# 先创建ECC 根CA:
/usr/lib/ssl/misc/CA.pl -newca -extra-req "-newkey ec -pkeyopt ec_paramgen_curve:prime256v1"如果下列自动生成的命令中有我们输入的字段,那么就代表命令成功了

查看 根证书字段:

# 创建ECC 证书申请:
/usr/lib/ssl/misc/CA.pl -newreq-nodes -extra-req "-newkey ec -pkeyopt ec_paramgen_curve:prime256v1"
# 签发证书:
/usr/lib/ssl/misc/CA.pl -sign如果下列自动生成的命令中有我们输入的字段,那么就代表命令成功了

查看证书:

二、生成 DH文件、CRL、OCSP:
与 RSA 算法的配置一样,只不过不再需要生成 DH文件了
1、ECC不需要DH文件:
ECC 证书本身就有ECDH参数
OpenSSL/Nginx/Apache 在使用 ECC 时默认自动启用 ECDHE,不需要额外文件。2、生成 CRL文件:
生成方式一样,在 demoCA 同目录下即可,它需要读取CA私钥文件,如果CA私钥是ECC算法,那么CRL文件中也会有ECC字段
openssl ca -gencrl -out ca.crl3、创建 OCSP:
# 与 RSA 的 OCSP 配置一样