创建ca证书并签发ip证书与泛域名证书

作者:zarte    发布时间: 2020-11-08

ca证书ssl

CA证书

CA(Certificate Authority)是负责管理和签发证书的第三方权威机构,常见的有Symantec、GeoTrust、Comodo等等,他们是所有行业和公众都信任的、认可的,并负责审核向他们申请证书的网站的安全性。

CA证书,就是CA颁发的证书,可用于验证网站是否可信(针对HTTPS)、验证某文件是否可信(是否被篡改)等,也可以用一个证书来证明另一个证书是真实可信,最顶级的证书称为根证书。除了根证书(自己证明自己是可靠),其它证书都要依靠上一级的证书,来证明自己。

我们用的操作系统都预置了很多可信任的根证书,SSL握手时服务器会把它的服务器证书发给浏览器。可以自己做CA根证书,我们自己的机器或者访问我们服务的客户的机器,都安装上该CA根证书。

生成CA证书

生成rsa密钥对 openssl genrsa -out ca.key 2048 生成证书 openssl req -sha256 -new -nodes -x509 -days 3650 -key ca.key -out ca.crt -subj "/CN=LocalRootCA" 这里的cn可以是任意名字 提取公钥命令 openssl rsa -in ca.crt -pubout -out key.pub 正确ca证书长这样
Img

Img

生成服务端证书

生成服务端密钥对 openssl genrsa -out server.key 2048 生成 CSR(证书请求文件) CSR 是 Cerificate Signing Request 的英文缩写,为证书请求文件。主要作用是 CA 会利用 CSR 文件进行签名使得攻击者无法伪装或篡改原有证书
openssl.conf文件范例在末尾 openssl req -new -key server.key -out server.csr -config openssl.conf -extensions v3_req 查看csr信息
openssl req -text -noout -in server.csr

签发服务端证书,10年有效期 openssl x509 -req -sha256 -extfile openssl.conf -extensions v3_req -CA ca.crt -CAkey ca.key -CAcreateserial -days 3650 -in server.csr -out server.crt

Img

Img

生成客户端证书

生成椭圆曲线加密(ECC)的私钥和公钥 一般说ECC的运算速度要快安全性更好,可以使用很短的key获的RSA一样的安全性, 比如256 位 ECC Key 在安全性上等同于3072位 RSA Key。现在的HTTP服务器nginx apache之类的都可以配置 同时支持RSA和ECC两种加密,在SSL协商时根据客户端支持情况来选择,如果客户端支持就优先使用ECDHE密钥交换。 openssl ecparam -genkey -name secp384r1 -out client.key 其他同服务端步骤

异常问题记录

  1. x509: certificate signed by unknown authority (possibly because of "x509: ECDSA verification failure" while trying to verify candidate authority certificate "ca ca证书异常查看ca证书cn是否正确

  2. cannot validate certificate for 127.0.0.1 because it doesn't contain any IP SANs 查看证书使用者可选名称是否包含127.0.0.1,仅v3版支持ip证书

openssl.conf

[req]
req_extensions = v3_req
distinguished_name = req_distinguished_name
[req_distinguished_name]
countryName = Country Name (2 letter code)
countryName_default = CN
stateOrProvinceName = State or Province Name (full name)
stateOrProvinceName_default = FJ
localityName = Locality Name (eg, city)
localityName_default = Minneapolis
organizationalUnitName = Organizational Unit Name (eg, section)
organizationalUnitName_default = Domain Control Validated
commonName = Internet Widgits Ltd
commonName_max = 64
[ v3_req ]
basicConstraints = CA:FALSE
keyUsage = nonRepudiation, digitalSignature, keyEncipherment
subjectAltName = @alt_names
[alt_names]
DNS.1=www.heybutterfly.com
IP.1 = 192.168.57.97
IP.2 = 127.0.0.1
IP.3 = 192.168.91.50

上一篇:  go项目自动化测试

下一篇:  c# System.Security.Cryptography 提示系统找不到指定的文件

加载更多