标签: ssl

为 https 正确设置“默认”nginx 服务器

我有几台服务器在同一台机器上运行,有些只使用 http,有些同时使用 http 和 https。在单独的文件中定义了几个服务器块,这些文件包含在主配置文件中。

我已经为 http 设置了一个“默认”服务器,它将为与其他配置文件中的任何其他 server_names 不匹配的请求提供通用的“维护页面”。http 默认服务器按预期工作,它使用 server_name "_" 并且它首先出现在包含列表中(因为我观察到在跨服务器重复 server_names 的情况下,使用第一个出现的)。这很好用。

我希望完全相同的服务器块(仅将“listen 80 default_server”切换为“listen 443 default_server”,而不是服务页面“return 444”),但事实并非如此。相反,看起来新的默认 https 服务器实际上是在获取所有传入的 https 连接并导致它们失败,尽管其他服务器块对传入请求有更合适的 server_names。删除新的默认 https 服务器将导致恢复半正确行为:带有 https 的网站将全部正确加载;但是没有 https 的网站都将被路由到包含文件中的第一个 https 服务器(根据文档,如果没有出现“default_server”,那么出现的第一个服务器块将是“default”)。

所以我的问题是,在 nginx 中为 ssl 连接定义“默认服务器”的正确方法是什么?为什么当我显式设置“default_server”时,它会变得贪婪并获取所有连接,而当我隐式让 nginx 决定“默认服务器”时,它会像我期望的那样工作(将不正确的服务器设置为默认值,而其他真实服务器)行为正确)?

这是我的“默认服务器”。Http 可以在不破坏其他服务器的情况下工作。Https 破坏其他服务器并消耗所有服务器。

server {
    listen 443 ssl default_server;
    server_name _;

    access_log /var/log/nginx/maintenance.access.log;
    error_log /var/log/nginx/maintenance.error.log error;

    return 444;
}

server {
    listen *:80 default_server;
    server_name _;
    charset utf-8;

    access_log /var/log/nginx/maintenance.access.log;
    error_log /var/log/nginx/maintenance.error.log error;

    root /home/path/to/templates;

    location / { …
Run Code Online (Sandbox Code Playgroud)

ssl nginx https

92
推荐指数
7
解决办法
7万
查看次数

什么是 .crt 和 .key 文件以及如何生成它们?

我有以下配置:

SSLEngine on
SSLCertificateFile /etc/httpd/conf/login.domain.com.crt
SSLCertificateKeyFile /etc/httpd/conf/login.domain.com.key
SSLCipherSuite ALL:-ADH:+HIGH:+MEDIUM:-LOW:-SSLv2:-EXP
Run Code Online (Sandbox Code Playgroud)

但我不知道如何生成.crt.key文件。

ssl java virtualhost ssl-certificate

89
推荐指数
2
解决办法
31万
查看次数

如何清除 Chrome 的 SSL 缓存?

我有一个 HAProxy / stunnel 服务器,可以为我们在 AWS 上的站点处理 SSL。在测试期间,我在这台服务器上创建了一个自签名证书,并使用 Chrome 从我的桌面点击它来测试 stunnel 是否正常工作。

现在我已经在该服务器上安装了合法证书。当我在 Chrome 中从我的机器访问该站点时,它会引发以下错误:

错误 113 (net::ERR_SSL_VERSION_OR_CIPHER_MISMATCH):未知错误。

我的猜测是 Chrome 缓存了自签名证书的密钥,它与合法证书的密钥不匹配。该站点适用于我机器上的所有其他浏览器,因此这只是 Chrome 的问题。

一个有趣的注意事项:从隐身会话 ( Ctrl+ Shift+ N) 中点击页面时,它可以正常工作。所以它显然是某种缓存的东西。

我做了我能想到的所有事情(转储我的缓存,从“管理证书”对话框的“个人和其他人”页面中删除证书,Ctrl+F5等)。

我的机器是 Windows 7 x64。Chrome 版本:12.0.742.91。

在 Google Chrome 帮助表单上,有关于听起来像是同一个问题的描述;然而,没有找到解决办法。


更新:今天似乎已经“自我修复”了。我讨厌这样的问题。我仍然不知道是什么导致了它或它是如何自行解决的。大概是缓存的证书过期了或者什么的,但我仍然有兴趣知道这些信息的存储位置以及如何验证它。

ssl cache chrome

89
推荐指数
4
解决办法
32万
查看次数

负载均衡器后面的每个服务器都需要自己的 SSL 证书吗?

如果您在负载均衡器(例如 haproxy)后面有 5 个 Web 服务器,并且它们为同一个域提供内容,那么您是否需要所有服务器的 SSL 证书,还是可以在每台服务器上使用相同的证书?

我知道您可以将所有 SSL 请求放在特定服务器上,但这需要分布式会话信息,并希望它不会出现。

ssl load-balancing

76
推荐指数
5
解决办法
13万
查看次数

每个子域都需要自己的 SSL 证书吗?

我正在创建一个 websocket 服务器,它将在ws.mysite.example. 我希望网络套接​​字服务器既是 SSL 加密的又domain.example是 SSL 加密的。我是否需要为我创建的每个子域购买新证书?我创建的每个子域都需要一个专用 IP 地址吗?我可能会拥有多个子域。

我正在使用在 Ubuntu 上运行的 NGINX 和 Gunicorn。

ssl subdomain ssl-certificate

74
推荐指数
2
解决办法
17万
查看次数

在 Ubuntu 服务器上保存 SSL 证书和私钥的最佳位置?

在 Ubuntu 上,用于签署证书(供 nginx 使用)的私钥的最佳位置似乎在 /etc/ssl/private/

这个答案补充说证书应该进入,/etc/ssl/certs/但这似乎是一个不安全的地方。做.crt文件需要保持安全或者他们认为公众?

ubuntu ssl debian openssl ssl-certificate

73
推荐指数
4
解决办法
12万
查看次数

删除“www”并使用 nginx 重定向到“https”

我想在 nginx 中创建一个规则来做两件事:

  1. 删除“www”。从请求 URI
  2. 如果请求 URI 是“http”,则重定向到“https”

有很多关于如何单独执行这些操作的示例,但我无法找到一个正确执行这两项操作的解决方案(即不创建重定向循环并正确处理所有情况)。

它需要处理所有这些情况:

1. http://www.example.com/path
2. https://www.example.com/path
3. http://example.com/path
4. https://example.com/path
Run Code Online (Sandbox Code Playgroud)

这些都应该在https://example.com/path (#4) 结束而不循环。有任何想法吗?

rewrite ssl nginx https

70
推荐指数
3
解决办法
5万
查看次数

使用可在 Chrome 58 中运行的 openssl 生成自签名证书

从 Chrome 58 开始,它不再接受依赖于Common Name以下内容的自签名证书:https : //productforums.google.com/forum/#! topic/chrome/zVo3M8CgKzQ;context-place = topicsearchin/chrome/category $3ACanary%7Csort:相关性%7Cspell:false

相反,它需要使用Subject Alt Name. 我之前一直在关注有关如何生成自签名证书的指南:https : //devcenter.heroku.com/articles/ssl-certificate-self,它工作得很好,因为我需要server.crtserver.key文件来完成我正在做的事情。我现在需要生成新的证书,其中包括SAN我所有的尝试都没有在 Chrome 58 上工作。

这是我所做的:

我按照上面提到的 Heroku 文章中的步骤来生成密钥。然后我写了一个新的 OpenSSL 配置文件:

[ req ]
default_bits        = 2048
distinguished_name  = req_distinguished_name
req_extensions      = san
extensions          = san
[ req_distinguished_name ]
countryName         = US
stateOrProvinceName = Massachusetts
localityName        = Boston
organizationName    = MyCompany
[ san ]
subjectAltName      = DNS:dev.mycompany.com
Run Code Online (Sandbox Code Playgroud)

然后server.crt使用以下命令生成:

openssl req …
Run Code Online (Sandbox Code Playgroud)

ssl openssl ssl-certificate chrome

70
推荐指数
5
解决办法
11万
查看次数

为什么 CA 根证书都是 SHA-1 签名的(因为不推荐使用 SHA-1)?

我知道不能再使用 SHA-1 对 SSL 证书进行签名。然而,所有 CA 根证书都是 SHA-1 签名的(大部分)。这是否意味着不再受“你奶奶 SSL 商店”信任的相同算法适用于世界上最顶级的安全证书?

我错过了什么吗?(密钥用法?密钥大小?)

ssl ssl-certificate certificate-authority

69
推荐指数
3
解决办法
2万
查看次数

带有 SSL 的 Apache ProxyPass

我想通过非 SSL 站点代理来自 SSL 站点的请求。我的 Apache httpd.conf 如下所示:

<VirtualHost 1.2.3.4:80>
    ServerName foo.com
    ProxyPass / https://bar.com/
</VirtualHost>
Run Code Online (Sandbox Code Playgroud)

因此,当我访问http://foo.com 时,我希望 apache 向https://bar.com发出请求并将其获取的页面发送给我。

相反,我收到了 500 错误,在错误日志中,我看到:

[error] proxy: HTTPS: failed to enable ssl support for 4.3.2.1:443 (bar.com)
Run Code Online (Sandbox Code Playgroud)

大概我在这里遗漏了一个指令。可能是哪个?

别介意安全隐患。我完全理解其中的风险。

ssl proxy proxypass apache-2.2

66
推荐指数
1
解决办法
18万
查看次数