RSA size(in bits) | ECC size(in bits) |
---|---|
1024 | 160 |
2048 | 224 |
3072 | 256 |
7680 | 384 |
需要下载安装openssl,并将其添加进path
确保openssl可以使用后,列出可用ECC曲线
openssl ecparam -list_curves
使用ECC key
生成CA
证书
我们需要使用CA
证书来签名服务器和客户端的证书,使用ECC
私钥生成CA
根证书,为此我们创建几个目录,用来存储CA
证书,秘钥,索引数据
任意创建一个文件夹,这里随意命名位tls
然后在该文件夹里创建如上图圈出文件/文件夹,其他都是后面命令自动生成的
命令行进入自己创建的文件夹
生成CA ECC私钥
openssl ecparam -out private/ec-cakey.pem -name prime256v1 -genkey
openssl ecparam -in private/ec-cakey.pem -text -noout
openssl req -new -x509 -days 3650 -config openssl.cnf -extensions v3_ca -key private/ec-cakey.pem -out cert/ec-cacert.pem
openssl x509 -noout -text -in cert/ec-cacert.pem
可以看到,我们使用的是ECDSA签名算法来生成我们的CA证书,而不是使用的RSA。
使用私钥验证CA证书
如果想使用私钥(包含ECDSA key)验证证书:
openssl x509 -noout -pubkey -in cert/ec-cacert.pem
类似的我们可以从私钥导出公钥
openssl pkey -pubout -in private/ec-cakey.pem
命令行进入server_certs
文件夹
我们再一次使用曲线prime256v1生成ECC的私钥
openssl ecparam -out server.key -name prime256v1 -genkey
openssl ecparam -in server.key -text -noout
我们的CA证书生成时,使用的是openssl.cnf
里的v3_ca
扩展选项
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
现在我们使用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
验证证书是否有效时使用CA证书进行验证
openssl verify -CAfile ../cert/ec-cacert.pem server.crt
openssl x509 -noout -text -in server.crt
验证index.txt包含服务端证书的信息,这个服务端证书是我们使用CA证书签名的。100000001是我们再开始部分写入的序列号,每次签名这个序列号都会自加1
客户端证书生成与服务器类似。