只要使用自签名证书,必然会遇到这种问题

发布时间 2023-04-17 08:39:51作者: 泰山李工

前言

有关加解密、https握手连接、域名证书等基础知识,请自我学习了解。介绍大家都会用的工具:

https安全评估工具:https://myssl.com/

https最佳安全实践介绍: https://myssl.com/  首页底部

 1、如何获取数字证书(签名证书)

任何机构或者个人都可以申请数字证书,并使用由CA机构颁发的数字证书为自己的应用保驾护航。


1. 花钱买,从TSP服务商(阿里、腾讯) 购买受信任的签名证书,**根据实际需要,考虑买通配符证书**。

2. 免费的,自签名证书,就是使用openssl、keytool等生成工具,自己生成的证书 。
  + 缺点:**不被client端信任问题**,有些client可以设置Skip TLS Verify忽略证书检查,不能设置的(如浏览器)只能添加信任来解决。
  + 因此,一般用于个人\企业的内网系统,企业建议使用阿里的免费证书。

3. 免费的,**Let’s Encrypt可以申请免费的证书**,作为一个CA机构得到了很多大公司的支持,它定义了ACME协议,将管理证书的流程进行了标准化。
  + 缺点:证书每三个月会过期,但是可以无限续签;另外生产证书操作步骤真的很麻烦,因此不建议用。

4. 免费的,从服务商(腾讯、阿里)等申请免费的证书,有效期一年

5. 复用的,花钱买通配符证书,我们的内网应用系统就可以使用自定义的二级域名啦。建议是内网用不是外网,**别乱用,外网映射多了,就容易走火,以免对正常业务排查问题带来麻烦**


>备注:常用的两个证书管理工具:KeyTool,OpenSSL—>构建CSR(Certificate Signing Request,数字证书签发申请),交由CA机构签发,形成最终的数字证书,你可以使用CSR在线工具https://www.myssl.cn/tools/create-csr.html

2、使用自签名证书会遇到以下问题

 

TLS/SSL握手过程,我们知道client会验证来自server端的tls证书,使用自签名证书或内部网络路径混乱都会造成client验证证书失败或发生错误。

  • 有些client可以设置Skip TLS Verify忽略证书检查,比如prometheus忽略验证exporter的证书,grafana忽略验证prometheus的证书
  • 有些client不能设置忽略证书检查,比如浏览器不信任自签名证书,如果此服务器仅供您个人内网使用,解决方案是将此证书添加到 浏览器 的受信任证书中。
# cd /tmp
C指定国家、ST指定省份、L指定区、O公司(可以不要),CN域名或者IP(localhost\127.0.0.1...)
# openssl req -new -newkey rsa:2048 -nodes -x509 -days 3650 -keyout ca.key -out ca.crt \
-subj "/C=CN/ST=Beijing/L=Beijing/O=MoeloveTest/CN=localhost"在

 

1. 自签名CA证书存在不被(client客户端)浏览器信任问题,解决方法很简单自行“baidu”下,重点介绍下面的问题
2. 上述命令生产的自签名ca证书,client客户端验证来自服务端的证书时,报错:

Q1. failed: x509: cannot validate certificate for 172.22.0.xx because it doesn't contain any IP SANs

A1:客户端(grafana)用IP调用或访问服务端时,无法验证172.22.0.xx(prometheus)的证书, 因为它不包含任何IP SAN,怎么办?

   解决方法1:grafana设置忽略对sever端的证书验证

   解决方法2:若不忽略验证证书,则需要给prometheus server生产一个含有“服务端IP”的SANs的证书。

   解决方法3: 客户端etc\hosts中添加一条DNS解析记录:服务端IP 为IP起的别名,客户端直接用别名调用。

Q2. failed: x509: certificate relies on legacy Common Name field, use SANs instead
A2:查找资料后发现是因为 go 1.15 版本开始废弃 CommonName,推荐使用 SAN 证书。因此,需要将“DNS名称及对应的server主机IP”添加到SAN中来解决此问题 echo subjectAltName = DNS:xxx(别名),IP:server主机ip,IP:127.0.0.1 > extfile.cnf

备注:可联系我获取《生产自签名证书.shell脚本》

3、联系,交流、共同成长

@泰山李工,微信公众号SRE泰山站,了解更多知识。