使用自签名证书,新手必然会遇到的问题

Posted 泰山李工

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了使用自签名证书,新手必然会遇到的问题相关的知识,希望对你有一定的参考价值。

前言

有关加解密、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、联系,交流、共同成长

Alamofire 测试包括自签名证书?

【中文标题】Alamofire 测试包括自签名证书?【英文标题】:Alamofire tests include self-signed cert? 【发布时间】:2015-08-12 02:04:09 【问题描述】:

我在使用 Xcode 7.0.5 和自签名证书时遇到问题(我认为)。我想知道 Alamofire swift-2.0 分支测试用例是否包含自签名证书?

【问题讨论】:

我看到了信任单元测试和下载单元测试,但是我没有看到任何依赖于信任代码库的下载测试?这是正确的阅读方式吗?我至少需要为自己添加一个测试,测试使用自签名下载。 【参考方案1】:

Alamofire 测试套件中存在的大多数证书实际上是自签名证书。它完全按照您的预期工作。

通过切换名称并提供destination 参数,可以轻松地将编写的所有数据任务测试转换为下载任务测试。这会将数据下载到临时文件中,而不是将其读入内存。否则它们或多或少是相同的操作。

此外,所有服务器信任挑战都由相同的ServerTrustPolicy 处理。 DataDownloadUpload 请求都以相同的方式处理。

祝你好运。

【讨论】:

以上是关于使用自签名证书,新手必然会遇到的问题的主要内容,如果未能解决你的问题,请参考以下文章

仅将自签名 SSL 证书用于 Web 服务

自签名证书:私钥问题

SSL 认证问题 - 使用 Tomcat 的 Spring 和本地自签名证书

Alamofire 测试包括自签名证书?

PowerShell代码签名:如何使用带密码保护的自签名证书?

android https遇到自签名证书/信任证书