Varnish / Nginx缓存SSL证书之谜

时间:2012-04-21 18:55:12

标签: linux ssl nginx varnish

我有Varnish负载平衡三个前端Rails服务器,Nginx充当FastCGI工作者的反向代理。昨天,我们的证书已过期,我从GoDaddy获得了一个新证书并安装了它。当直接访问静态资源时,我看到更新的证书,但是当从“虚拟子域”访问它时,我看到了旧证书。我的nginx配置只引用了我的新链式证书,所以我想知道旧证书是如何显示的。我甚至从目录中删除了它。

例如: https://www212.doostang.com/javascripts/base_packaged.js?1331831461(SSL没有证书问题) https://asset5.doostang.com/javascripts/base_packaged.js?1331831461(正在使用旧证书!)(映射到www212.doostang.com)

  • 我已经重新加载,甚至停止并重新启动了nginx,测试了nginx以确保它从正确的配置中读取,并使用新的缓存文件重新启动了清漆。
  • 当我在asset5.doostang.com卷曲文件时,我收到证书错误:

    卷曲:(60)SSL证书问题,验证CA证书是否正常。细节: 错误:14090086:SSL例程:SSL3_GET_SERVER_CERTIFICATE:证书验证失败 更多详情:http://curl.haxx.se/docs/sslcerts.html

    curl默认使用“捆绑”执行SSL证书验证  证书颁发机构(CA)公钥(CA证书)。如果是默认值  捆绑文件不够用,您可以指定备用文件  使用--cacert选项。 如果此HTTPS服务器使用由CA表示的CA签名的证书  捆绑,证书验证可能由于a而失败  证书问题(可能已过期,或名称可能已过期)  与URL中的域名不匹配)。 如果您想关闭curl对证书的验证,请使用  -k(或--insecure)选项。

  • 当我添加-k选项时,我得到了请求的文件,我可以在我的nginx访问日志中看到它。当我不提供-k时,我没有得到nginx错误; nginx对证书错误没有提及。

  

10.99.110.27 - - [20 / Apr / 2012:18:02:52 -0700]“GET /javascripts/base_packaged.js?1331831461 HTTP / 1.0”200 5740“ - ”   “curl / 7.21.3(x86_64-pc-linux-gnu)libcurl / 7.21.3 OpenSSL / 0.9.8o   zlib / 1.2.3.4 libidn / 1.18“

我把我认为是nginx配置的相关部分放在下面:

server {
  # port to listen on. Can also be set to an IP:PORT
  listen 443;
  server_name www.doostang.com, *.doostang.com;

  passenger_enabled on;
  rails_env production;

  ssl on;
  ssl_certificate /.../doostang_combined.crt;
  ssl_certificate_key /.../doostang.com.key;
  ssl_protocols SSLv3;

  # doc root
  root /.../public/files;

  if ($host = 'doostang.com' ) {
        rewrite  ^/(.*)$  https://www.doostang.com/$1  permanent;
   }
}


# Catchall redirect
server {
  # port to listen on. Can also be set to an IP:PORT
  listen 443;

  ssl on;
  ssl_certificate /.../doostang_combined.crt;
  ssl_certificate_key /.../doostang.com.key;

  rewrite ^(.*)$ https://www.doostang.com$1;
} 

1 个答案:

答案 0 :(得分:1)

巴杜姆清。我的非标准化负载均衡器实际上运行了nginx以进行SSL终止。我没有注意到这一点,但我认为我做的一切正确。重点是,当您在收购时接管操作,标准化和记录!那里有一些非常奇怪的工程师:)