NGINX + SSL证书只保护某些浏览器的连接

我一直在解决这个问题,我似乎在不知道下一步该做什么的情况下陷入了死胡同。

我已经承担了另外一个休假的工人的任务。 他试图为两个不同的网站www.laenergiadelcambio.comwww.theenergyofchange.combuild立SSL证书。 这些是单个域的解冻证书。 注意:我们正在testing环境中进行这些更改,所以对NGINX URL vHosts文件的更改尚未公开。

HTTPS连接由NGINX服务器完成,在确保连接后,对服务于网站内容的Apache机器进行proxy_pass

首先,他遇到两个网站总是收到相同的证书(laenergiadelcambio.com)的问题。 经过一番阅读,我们发现,这是因为我们的操作系统(Centos 5.5)由于旧版本的openssl(0.9.8e)而缺lessTLS SNI支持(服务器名称指示)。 我们决定在每个服务器块中分配一个独特的IP来监听NGINX文档中的信息 。

这是事情。 它的工作原理,但不是在所有的浏览器和版本。

对于以下经过testing的浏览器:

Opera 31.0.1889.174 Firefox 40.0 Firefox 38.0 Google Chrome 44.0.2403.157 Internet Explorer 11.0.9600.17691 Internet Explorer 9.0.8112.16421 

每个人都能识别证书并build立安全连接。 一切都很好,没有问题。

但是对于下面的那些,

 Firefox 39.0.3 Firefox 40.0.3 lynx 2.8.5 

我有证书不可信的错误。

Firefox抱怨:(错误代码:sec_error_unknown_iss)

我附上证书的详细信息

由于未知的发行人,证书不能被验证

l thr给我这个…

 lynx www.theenergyofchange.com/wp-admin Making HTTPS connection to www.theenergyofchange.com Retrying connection without TLS. Looking up www.theenergyofchange.com Making HTTPS connection to www.theenergyofchange.com Secure 256-bit TLSv1/SSLv3 (DHE-RSA-AES256-SHA) HTTP connection Sending HTTP request. HTTP request sent; waiting for response. SSL error:unable to get local issuer certificate-Continue? (y) SSL error:host(www.theenergyofchange.com)!=cert(theenergyofchange.com)- Continue? (y) Alert!: Unexpected network read error; connection aborted. Can't Access `https://www.theenergyofchange.com/wp-admin' Alert!: Unable to access document. 

接下来,我只针对一个站点www.theenergyofchange.com发布了两个nginx vHostsconfiguration,即HTTP和HTTPS。 除了server_names以外,其他站点是相同的

072-blogs_391_ing.conf

  server { server_name theenergyofchange.com theenergyofchange.es theenergyofchange.info theenergyofchange.eu www.theenergyofchange.es www.theene rgyofchange.info www.theenergyofchange.eu; rewrite ^ $scheme://www.theenergyofchange.com$request_uri permanent; } server { listen 80; server_name theenergyofchange.com theenergyofchange.es www.theenergyofchange.com pre.theenergyofchange.abg.corp www.theenergyofchange. es www.theenergyofchange.com www.theenergyofchange.info www.theenergyofchange.eu; access_log /var/log/nginx/blog_391ing.access.log; error_log /var/log/nginx/blog_391ing.error.log error; error_page 404 403 /handle404.html; # error_page 502 503 504 /handle503.html; error_page 500 502 503 504 /handle500.html; location = /handle404.html { root html/errores-prxy; } location = /handle503.html { root html/errores-prxy; } location = /handle500.html { root html/errores-prxy; } location = / { proxy_pass http://wordpressprepro391.simosa.inet/; } location / { proxy_pass http://wordpressprepro391.simosa.inet/; } location ~* /colab/web/system/modules/general/pages/captcha.jsp { proxy_pass http://wordpressprepro391.simosa.inet; } location ~* /colab/web/system/modules/general/resources/js/ { proxy_pass http://wordpressprepro391.simosa.inet; } location ~* /colab/ { proxy_pass http://wordpressprepro391.simosa.inet; } # Redirect wp-admin and wp-login requests to HTTPS. location ~ /wp-(?:admin|login|content|includes) { return 301 https://$host$request_uri; } } 

073-blogs_ing_392-ssl.conf中

 server { listen 80; rewrite ^(.*) https://$host$1 permanent; } server { listen 192.168.14.141:443 ssl; server_name www.theenergyofchange.com; access_log /var/log/nginx/blog_392-ING-PRUEBA-SSL.access.log; error_log /var/log/nginx/blog_392-ING-PRUEBA-SSL.error.log error; error_page 404 403 /handle404.html; # error_page 502 503 504 /handle503.html; error_page 500 502 503 504 /handle500.html; ssl on; ssl_certificate /etc/nginx/openssl/CA/certs/ssl_certificate_ing.crt; ssl_certificate_key /etc/nginx/openssl/CA/private/theenergyofchange.com.key; ssl_client_certificate /etc/nginx/openssl/CA/certs/Intermediate_CA.crt; location = /handle404.html { root html/errores-prxy; } location = /handle503.html { root html/errores-prxy; } location = /handle500.html { root html/errores-prxy; } location = / { proxy_pass http://wordpressprepro391.simosa.inet/; } location / { proxy_pass http://wordpressprepro391.simosa.inet/; } proxy_read_timeout 3500; proxy_connect_timeout 3250; proxy_set_header X-Real-IP $remote_addr; proxy_set_header Host $host; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_set_header X-Forwarded-Proto https; proxy_set_header SSL_PROTOCOL $ssl_protocol; proxy_set_header SSL_CLIENT_CERT $ssl_client_cert; proxy_set_header SSL_CLIENT_VERIFY $ssl_client_verify; proxy_set_header SSL_SERVER_S_DN $ssl_client_s_dn; } 

所以..我在这里丢失了什么,使一些浏览器保护连接,其他人不信任证书颁发者?

很多..提前很多感谢!

我怀疑你的同事误解了ssl相关的指令:由ssl_certificate指向的文件应该包含你的服务器的证书后跟中间证书, ssl_client_certificate只需要客户端证书validation和OCSP – 我认为他复制了中间文件。 现在,已经在caching中拥有适当的中间证书的浏览器将允许该页面,而没有它们的浏览器将会失败,因为它们不能构build信任链。

尝试将ssl_client_certificate行放在注释中, 如果尚未存在 ,则将中间证书复制到ssl_certificate_ing.crt文件中,然后服务器证书后执行。

所以, ssl_certificate_ing.crt应该是这样的:

 ----- BEGIN CERTIFICATE ----- .. your server's certificate ----- END CERTIFICATE ----- ----- BEGIN CERTIFICATE ----- .. first intermediate certificate ----- END CERTIFICATE ----- 

另请参阅文档 。

很好的工具来检查在线证书的内容: https : //www.sslshopper.com/certificate-decoder.html