使用 ECC算法创建 CA根证书颁发机构.note

noteId: WEB0801c909dbe897826730e49faec7e870 · 原始路径:/ALL/Linux - A模块/服务配置/CA根证书颁发机构/ECC 算法/使用 ECC算法创建 CA根证书颁发机构.note · 图片:15 · 附件待处理:0

 
一、使用 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_ca
openssl.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_cert
openssl.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.crl
 
 
3、创建 OCSP:
# 与 RSA 的 OCSP 配置一样