我正在尝试设置一个带有多个 Web 应用程序的服务器,这些应用程序都将通过 apache VirtualHost(在同一台服务器上运行的 apache)提供服务。我的主要限制是每个 Web 应用程序都必须使用 SSL 加密。在谷歌搜索了一段时间并查看了有关stackoverflow的其他问题后,我为VirtualHost编写了以下配置:
<VirtualHost 1.2.3.4:443>
ServerName host.example.org
<Proxy *>
Order deny,allow
Allow from all
</Proxy>
SSLProxyEngine On
ProxyRequests Off
ProxyPreserveHost On
ProxyPass / https://localhost:8443/
ProxyPassReverse / https://localhost:8443/
</VirtualHost>
Run Code Online (Sandbox Code Playgroud)
尽管https://host.example.org:8443是可访问的,https://host.example.org不是,这违背了我的虚拟主机配置的目的。Firefox 抱怨说,即使它成功连接到服务器,连接也被中断。我还在 apache 的 error.log 中收到以下警告:
proxy: no HTTP 0.9 request (with no host line) on incoming request and preserve host set forcing hostname to be host.example.org for uri
Run Code Online (Sandbox Code Playgroud)
在 Web 应用程序(Tomcat 服务器)上,访问日志显示了一个奇怪的访问请求:
"?O^A^C / HTTP/1.1" 302
Run Code Online (Sandbox Code Playgroud)
以下是我直接连接到https://host.example.org:8443时得到的正确访问请求:
"GET …Run Code Online (Sandbox Code Playgroud) 你能想到任何 linux 命令行方法来保存 HTTPS 服务器提供的证书吗?类似于让 curl/wget/openssl 建立 SSL 连接并保存证书而不是 HTTP 响应内容。
相当于我正在寻找的 gui 是浏览到 HTTPS 站点,双击浏览器“安全站点”图标,然后导出证书。除了这里的目标是非交互式地进行。
谢谢,吉姆
自签名 SSL 证书是一种虚假的安全感吗?
如果您被窃听,用户将像往常一样简单地接受证书。
我正在为内部 API 构建代理,以允许客户端连接而无需安装自签名证书。
客户端(构建、拥有和仅在内部使用)将通过 SSL 连接到 nginx 框,在那里我使用XSendfile在应用程序级别(一个 Rails 应用程序)验证凭据。如果凭据有效,则连接将传递回 nginx,在那里它使用 proxy_pass 将连接发送到上游服务器。
现在这适用于标准的 http 连接,但我正在尝试弄清楚如何将我们的证书添加到混合中。
这个问题几乎是相同的这一个,但尴尬的证书要求。
这甚至可能与 nginx 一起使用吗?有更好的解决方案吗?
我也满足于从客户端的 http -> nginx,以及从 nginx 到 API 的自签名证书。
尝试将https://example.com重定向到https://www.example.com时出错。
当我转到https://example.com 时,它不会重定向并返回 page/200 状态。
我不想要这个,我想让它重定向到https://www.example.com。
当我去http://example.com 时,它重定向到https://www.example.com
有人能告诉我我哪里出错了吗?
这是我的默认和默认 ssl 配置文件:
默认配置文件
server {
listen 80;
server_name example.com;
return 301 https://www.example.com$request_uri;
}
Run Code Online (Sandbox Code Playgroud)
默认 ssl.conf
upstream app_server_ssl {
server unix:/tmp/unicorn.sock fail_timeout=0;
}
server {
server_name example.com;
return 301 https://www.example.com$request_uri
}
server {
server_name www.example.com;
listen 443;
root /home/app/myproject/current/public;
index index.html index.htm;
error_log /srv/www/example.com/logs/error.log info;
access_log /srv/www/example.com/logs/access.log combined;
ssl on;
ssl_protocols SSLv3 TLSv1 TLSv1.1 TLSv1.2;
ssl_certificate /srv/www/example.com/keys/ssl.crt;
ssl_certificate_key /srv/www/example.com/keys/www.example.com.key;
ssl_ciphers …Run Code Online (Sandbox Code Playgroud) 我正在尝试将证书导入 IIS。在 MMC(Windows 控制台)上一切正常。我完成了向导,似乎没问题。但是,当我刷新证书列表或移动到 IIS 的其他屏幕时,证书从列表中消失。
我不知道有什么问题。我能做什么?
我究竟如何从 .p12 文件生成 .key 文件和 .crt 文件?
我的目标是确保客户端连接到我的 nginx 的适当安全性。我正在按照Mozilla 的指南在我的 nginx 安装上正确配置 TLS,但我没有对实践中使用的实际协议/密码套件的概述。
我现在所拥有的:
server {
listen 443;
ssl on;
ssl_certificate /path/to/signed_cert_plus_intermediates;
ssl_certificate_key /path/to/private_key;
ssl_dhparam /path/to/dhparam.pem;
ssl_session_timeout 5m;
ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
ssl_ciphers 'the_long_ciphersuite_listed_there';
ssl_prefer_server_ciphers on;
ssl_session_cache shared:SSL:50m;
}
Run Code Online (Sandbox Code Playgroud)
有了这个,我想记录用于连接的 SSL 协议以及在客户端/服务器协商后选择的密码套件。例如:
10.1.2.3 - - [13/Aug/2014:12:34:56 +0200] "GET / HTTP/1.1" 200 1234 "-" "User agent bla"
Run Code Online (Sandbox Code Playgroud)
到
10.1.2.3 - - [13/Aug/2014:12:34:56 +0200] ECDHE-RSA-AES128-GCM-SHA256 TLSv1.2 "GET / HTTP/1.1" 200 1234 "-" "User agent bla"
Run Code Online (Sandbox Code Playgroud)
通过这种方式,我可以快速识别使用不支持 PFS 或其他相关安全启用技术的过时浏览器或自动化机器的客户端。
如何配置 nginx 以记录此信息?
如何设置 Nginx conf 文件以仅在我的站点中的一个路径上强制使用 SSL,而在所有其他路径上强制使用非 SSL?
例如,我希望 /user 下的所有 URL 都是 https,但所有其余的 URL 都是 http。
对于第一部分,我有:
rewrite ^/user(.*) https://$http_host$request_uri?;
Run Code Online (Sandbox Code Playgroud)
我不想使用“如果”。我认为它会利用操作顺序,但我不想以循环结束。
ssl ×10
nginx ×4
https ×3
apache-2.2 ×2
security ×2
x509 ×2
certificate ×1
http ×1
iis ×1
linux ×1
logging ×1
networking ×1
openssl ×1
proxy ×1
tls ×1