文章目录

  • 一、问题排查及解决
    • 问题一:证书加载错乱
    • 问题二:DNS 解析污染问题
    • 问题三:浏览器校验问题
  • 二、终极解决方法
    • 2.1 可外网访问域名
    • 2.2 只能内网访问域名
    • 2.3 内网自动化配置
    • 2.4 错误解决

一、问题排查及解决

今天遇到这样一个问题,问题的经过是这样的:

同一台服务器里,nginx 部署了多个项目,配置了多个域名,域名的二级域名(例如:baidu.com)都是一致的,三级域名的证书都是在阿里云中申请的SSL免费证书。

在测试时,以https协议头访问,浏览器提示没有证书不安全,查看证书时,居然发现是另一个域名的证书。

比如: 项目A aa.com 和项目B bb.com, 正常来说,https://aa.com 使用的是aa的证书,https://bb.com 使用的是bb的证书。

但是!!! 兄弟们,我居然遇到了下面这个奇葩事

访问 https://aa.com 使用的是bb的证书,就会报错证书不安全,需要再次刷新才会使用本域名的ssl证书,而且这个问题是百分百复现的噢!

经过各种排查,怀疑可能有以下三个原因,并且我给出了对应的解决方式,只希望各位兄弟们不要再苦苦找寻问题的真相

问题一:证书加载错乱

  • 问题原因:

在 nginx/vhost/目录下有 多个配置文件,分别是 aa.com.conf 和 bb.com.conf 和 ab.com.conf

但是接管顺序是按照 配置文件的加载顺序来进行,按照正常的文件名排序,就是 ab.com.conf 优先于 bb.com.conf ,所以就会造成ssl证书访问错乱。

  • 解决方法:

既然在同一台服务器会有证书加载错乱的问题,那么就把域名分开配置,例如将aa.com 放在另一台服务器中即可

问题二:DNS 解析污染问题

  • 问题原因:

DNS解析被污染,首次访问aa.com时,DNS解析指向了bb.com,只有再次刷新才可以进行访问

  • 解决方法:

查找DNS解析源,进行联系解决,这个一般可能就联系不到了,直接看我最下面的解决方式。

问题三:浏览器校验问题

  • 问题原因:

谷歌或火狐浏览器会对EV证书进行校验

  • 解决方法:

使用非EV证书,或者使用其它浏览器,例如微软的edge浏览器

二、终极解决方法

不管上面是什么问题,兄弟们,咱们不用阿里云的免费证书了,可以使用certbot 生成 ssl证书

2.1 可外网访问域名

  • 1.安装certbot及nginx的certbot插件(二进制安装无法使用该方式)
yum install certbot certbot-nginx -y
  • 2.生成证书
certbot --nginx

输入“certbot --nginx” →输入自己申请的邮箱→选择A→选择Y→选择要生成的域名,如果是多个域名的话,用 逗号 进行分割→选择 2,这样就生成了SSL证书了
SSL证书具体位置: /ect/letsencrypt/live 下

  • 3.配置nginx

在上面第二步中,我们直接将nginx配置写入了已存在的配置文件,所以不需要再次配置

  • 4.自动更新

每月一号凌晨三点更新

# crontab -e0 3 1 * * certbot renew --force-renew

2.2 只能内网访问域名

利用DNS质询方法

  • 1.开始申请证书
    执行如下命令开始申请证书,按照提示操作即可:
certbot certonly --manual --preferred-challenges dns -d example.com
  • 2.添加解析记录
    当命令执行中,会收到类似如下提示,要求添加 TXT 解析记录:
Please deploy a DNS TXT record under the name
_acme-challenge.example.com with the following value:667drNmQL3vX6bu8YZlgy0wKNBlCny8yrjF1lSaUndcOnce this is deployed,
Press ENTER to continue

根据上面提示,登录云商后台(比如阿里云、腾讯云 等等),添加名为 _acme-challenge.example.com 的 TXT 记录,并使用 667drNmQL3vX6bu8YZlgy0wKNBlCny8yrjF1lSaUndc 作为记录值。

注意事项:

    1. 由于 DNS 记录不会马上生效,所以稍后再按回车键。
    1. 使用 dig +short -t txt _acme-challenge.example.com 命令验证 DNS 是否生效。
  • 3.配置nginx
    certbot生成的证书在/etc/letsencrypt/live/example.com/目录,配置nginx文件如下

server{listen 443 ssl;server_name example.com;include /etc/nginx/conf.d/example.d/*;ssl_certificate /etc/letsencrypt/live/example.com/fullchain.pem;ssl_certificate_key /etc/letsencrypt/live/example.com/privkey.pem;
}
server{if ($host = example.com) {return 301 https://$host$request_uri;}server_name example.com;listen 80;return 404;
}

2.3 内网自动化配置

  • 1.配置脚本
git clone https://gitee.com/skyyemperor/certbot-letencrypt-wildcardcertificates-alydns-au /usr/local/certbot
cd /usr/local/certbot
chmod u+x ./au.sh

修改云厂商API配置

vim au.sh
# TXY_KEY="AKIDC......."
# TXY_TOKEN="3pLabL...."

2.申请证书

certbot certonly -d 'example.com' \--manual --preferred-challenges dns \--manual-auth-hook "/usr/local/certbot/au.sh python txy add" \--manual-cleanup-hook "/usr/local/certbot/au.sh python txy clean"

2.4 错误解决

Let’s Encrypt 的免费SSL证书一般通过服务器使用Certbot来进行自动注册更新和管理,但是部分服务器系统却无法通过 yum install certbot 命令直接安装Certbot,会提示 No package certbot available.

  • centos6
wget https://dl.eff.org/certbot-auto
sudo mv certbot-auto /usr/local/bin/certbot-auto
sudo chown root /usr/local/bin/certbot-auto
sudo chmod 0755 /usr/local/bin/certbot-auto
  • centos7
rpm -ivh https://dl.fedoraproject.org/pub/epel/epel-release-latest-7.noarch.rpmyum install certbot
  • Ubuntu
apt-get update
apt-get install software-properties-common
add-apt-repository ppa:certbot/certbot
apt-get updateapt-get install certbot
  • Debian
apt-get update
apt-get install software-properties-common
add-apt-repository ppa:certbot/certbot
apt-get updateapt-get install certbot -t jessie-backports

具体详情可参考我的另一篇文档: 为Nginx申请和使用Let‘s Encrypt的SSL免费证书

踩了大坑:https 证书访问错乱相关推荐

  1. Nginx 网站使用 acme配置 https证书访问步骤

    https://blog.ekanshu.com.cn 使用 acme配置 https访问 Nginx 网站使用 acme配置 https证书访问步骤 错误信息 由于之前配置过,从新使用名称更新配置文 ...

  2. 阿里云服务器Centos/tomcat6 配置http/https证书访问

    因为项目需要,整体网络请求转向https,以前没弄过,于是遇到一些问题,不过最后终于是解决了. 服务器采用的是阿里云ECS,CentOS,Tomcat6. 先是搜索了一堆https证书安装的网页,各种 ...

  3. 搞定需要HTTPS证书访问的WebAPI

    有些需要WEBAPI的调用需要用证书,证书一般是cer或者p12格式的,本文教你怎么搞定VFP访问HTTPS WEBAPI. 祺佑三层开发框架(猫框)发布的VFPBS,如果需要HTTPS,证书也是像图 ...

  4. Windows Server 2008 R2 下配置证书服务器和HTTPS方式访问网站

    Windows Server 2008 R2 下配置证书服务器和HTTPS方式访问网站 http://www.cnblogs.com/zhongweiv/archive/2013/01/07/http ...

  5. phpstudy安装ssl证书_新版Siteground一键安装免费SSL证书 网站https安全访问

    新版Siteground一键安装免费SSL是很容易的,做外贸网站.电商网站一定要使用 https链接访问,这样才符合安全要求,还有搜索引擎优化.siteground提供的 SSL证书用起来特别方便,速 ...

  6. Spring Boot RestTemplate 忽略证书访问https

    在Spring Boot中,RestTemplate 一般使用 @Autowired 注解自动装配, 类似: @Autowiredprivate RestTemplate restTemplate; ...

  7. HttpClient 使用证书访问https站点

    使用HttpClient访问https 站点时,如果JRE或者JDK没有导入某个站点的证书,则会报如下错误: javax.net.ssl.SSLHandshakeException: sun.secu ...

  8. curl证书过期_centos7内核升级及curl访问https证书过期处理

    centos7内核升级及curl访问https证书过期处理 先看下当前系统的linux内核版本 uname -r 3.10.0-229.el7.x86_64 升级步骤 1.rpm --import h ...

  9. StartSSL免费SSL证书成功申请-HTTPS让访问网站更安全

    http://www.freehao123.com/startssl-ssl/ 昨天写了更换空间后重新安装Godaddy SSL的文章,突然想到了一直有朋友向部落提到的StartSSL免费SSL证书服 ...

最新文章

  1. 2021年大数据环境搭建(一):​​​​​​​​​​​​​​​​​​​​​Hadoop编译
  2. 9月第1周安全回顾 IM安全威胁严重 企业增加无线安全投入
  3. Softmax v.s. LogSoftmax
  4. 交叉编译inetutils并配置telnet服务
  5. [ARM异常]-图解armv7/armv8的异常向量表和基地址
  6. Winform中设置ZedGraph鼠标悬浮显示线上的点的坐标并自定义显示的内容
  7. python多行注释符号_python知识学习,python标识符和关键字
  8. Trial SCN WebIDE版本下载
  9. Android之访问网络,使用HttpURLConnection还是HttpClient?
  10. Java:计算类的serialVersionUID
  11. zplane函数怎么用m文件调用_matlab中一个m文件怎么调用另一个m文件的函数
  12. python设置横坐标间隔_如何在matplotlib中更改刻度之间的间距?
  13. spring定时任务详解
  14. css之input时间控件精确到时分秒
  15. 密码学应用的四个进化阶段
  16. 【推荐五款ssh连接工具】
  17. 相同的js文件在IE浏览器可以响应,但是在Chrome浏览器上没有响应
  18. Trained Ternary Quantization
  19. Qt简述如何实现不规则按钮
  20. 企业微信应用授权/静默登录

热门文章

  1. 记AAMAS评审意见
  2. 三角形面积外接圆内切圆
  3. ios 10以上 ssh连不上的解决办法
  4. c语言实例--判定三角形的类型
  5. setTimeout方法
  6. Linux下最好用的五大BT下载工具
  7. 怎么提高计算机显卡性能,电脑怎么提高显卡性能
  8. 使用XSSFRangeCopier跨工作簿将多个excel汇总到一个excel的多个sheet
  9. 窥探任意邮箱账户,黑市报价129美元
  10. 大学毕业的农村孩子!