我们有 2 个域指向同一个公共 AWS ELB,在该 ELB 后面有 nginx,它将请求重定向到正确的服务器。
当我们在浏览器(Chrome/Safari/等)中点击 sub.domainA.com 时,一切正常,但是当我们使用 openssl 等工具时,我们会收到证书错误:
openssl s_client -host sub.domainA.com -port 443 -prexit -showcerts
CONNECTED(00000003)
depth=0 /OU=Domain Control Validated/CN=*.domainB.com
verify error:num=20:unable to get local issuer certificate
verify return:1
Run Code Online (Sandbox Code Playgroud)
由于某种原因,domainA 正在使用domainB 证书,我不知道为什么。
我几乎 100% 确定问题出在我们的 nginx 配置上(更具体地说,没有默认服务器块)
这是我们的 nginx 配置:
worker_processes auto;
error_log /var/log/nginx/error.log;
error_log /var/log/nginx/error.log warn;
error_log /var/log/nginx/error.log notice;
error_log /var/log/nginx/error.log info;
events {
worker_connections 1024;
}
http {
include /usr/local/openresty/nginx/conf/mime.types;
default_type application/octet-stream;
...
#
# DomainB
#
server {
ssl on;
ssl_certificate /etc/nginx/domainB.crt;
ssl_certificate_key /etc/nginx/domainB.key;
listen 8080;
server_name *.domainB.com;
access_log /var/log/nginx/access.log logstash_json;
error_page 497 301 =200 https://$host$request_uri;
set $target_web "web.domainB_internal.com:80";
location / {
keepalive_timeout 180;
resolver 10.10.0.2 valid=30s;
proxy_set_header Host $host;
proxy_pass http://$target_web;
proxy_set_header X-Unique-ID $request_id;
}
}
#
# DomainA
#
server {
ssl on;
ssl_certificate /etc/nginx/domainA.crt;
ssl_certificate_key /etc/nginx/domainA.key;
listen 8080;
server_name *.domainA.com;
access_log /var/log/nginx/access.log logstash_json;
error_page 497 301 =200 https://$host$request_uri;
set $target_web "web.domainA_internal.com:80";
location / {
keepalive_timeout 180;
resolver 10.10.0.2 valid=30s;
proxy_set_header Host $host;
proxy_pass http://$target_web;
proxy_set_header X-Unique-ID $request_id;
}
}
}
Run Code Online (Sandbox Code Playgroud)
它根本不应该落在domainB 块中!然而,我们在使用“openssl s_client”时看到它,但在浏览器中看不到。
有什么想法为什么我们在使用“openssl s_client -host sub.domainA.com”时会看到domainB?
与 Openssl 非常相似,显示不同的服务器证书,而浏览器显示正确
非常有用的网站:https://tech.mendix.com/linux/2014/10/29/nginx-certs-sni/
小智 5
您需要servername在openssl命令中指定该选项。
来自openssl s_client文档:
-服务器名称
在 ClientHello 消息中设置 TLS SNI(服务器名称指示)扩展。
所以尝试类似的东西
openssl s_client -connect sub.domainA.com:443 -showcerts -servername sub.domainA.com
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1366 次 |
| 最近记录: |