【笔记】为什么自签名的证书加入trusted列表里还报错self-signed error?

现在就来解决这个为什么自签名的证书按照网上的步骤加入了可信列表,比如

openssl req -x509 -days 365 -nodes -newkey rsa:4096 \
   -keyout selfSignedCert.key \
   -out selfSignedCert.pem
cp selfSignedCert.pem /etc/ssl/certs
rehash_ca_certificates.sh

明明这个证书已经加入了可信列表,curl也没问题了,为什么其他程序比如git java还是报错说这是个self-signed证书呢?如果关闭了它们的证书验证就会存在一些风险。那怎么办呢?

那是因为上面证书生成的太简单了…而那个可信列表不是给signed的证书的,而是给Certificate Authority的,就是说是给证书机构的证书的。所以想要在dev环境里让我们self-signed的HTTPS证书可信,必须要先生成Certificate Authority证书,然后用这个证书去签署其他需要的证书。

openssl genrsa -des3 -out rootCA.key 4096
(需要输入一个key的密码)
openssl req -x509 -new -nodes -key rootCA.key -sha256 -days 1024 -out rootCA.crt
(于是我们得到了机构证书,就是传说中的root证书)
(对于每个HTTPS网站证书)
openssl genrsa -out mydomain.company.key 4096
openssl req -new -key mydomain.company.key -out mydomain.company.csr
(填一填表格吧;Common Name最好是填网站域名mydomain.company,因为有些工具会检测这项)
openssl x509 -req -in mydomain.company.csr \
   -CA rootCA.crt -CAkey rootCA.key -CAcreateserial \
   -out mydomain.company.pem -days 365 -sha256
(这样就签署好了)

剩下的就是比如用这个证书 mydomain.company.pem 和 mydomain.company.key 去配置给nginx,然后在client的系统里把 rootCA.crt 放到ssl/certs里rehash,再curl npm mvn … 就不会有 self-signed 的问题了。

2021:
写完上面的没有问题了,那时还太年轻……
目前的很多app都设置了验证SSL证书的Hostname…比如chrome,你即使有CA,我也不让你访问。
那怎么办呢?

写一个 ssl.conf 的配置文件:

[ req ]
distinguished_name  = req_distinguished_name
req_extetions = v3_req

[req_distinguished_name]
countryName = Country Name (2 letter code)
countryName_default = CN
stateOrProvinceName = State or Province Name (full name)
stateOrProvinceName_default = ProvinceName
localityName = Locality Name (eg, city)
localityName_default = CityName
organizationalUnitName  = Organizational Unit Name (eg, section)
organizationalUnitName_default  = CompanyName
commonName = primaryDomain # e.g. *.test.com
commonName_max  = 64

[ v3_req ]
# Extensions to add to a certificate request
basicConstraints = CA:FALSE
keyUsage = nonRepudiation, digitalSignature, keyEncipherment
subjectAltName = @alt_names

[alt_names]
DNS.1 = *.test.com
DNS.2 = wow.test2.com
IP.1 = 127.0.0.1
IP.2 = 192.168.0.100

之后再 openssl req -new -nodes -x509 -keyout ca.key -newkey rsa:4096 -out ca.crt -config ssl.conf -extensions v3_req
这样的话,openssl x509 -text -noout -in ca.crt 就会有Subject Alternative Name 啦;把它放到系统认可的trust列表里,再访问用这个证书保护的网站就不会报错了…

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值