我正在设置 Nginx 1.8 反向代理。
简而言之 -
提供 HTML 内容 HTTP 流量比 HTTPS 快 50 倍。
提供 ProxyPass HTTP 流量的速度比 HTTPS 快 7 倍。
操作系统是 RHEL7
硬件:
2 core VMWare Intel(R) Xeon(R) CPU E5-2609 v3 @ 1.90GHz
cpu MHz : 1897.802
cache size : 15360 KB
bogomips : 3795.60
1 Gbit network card
Run Code Online (Sandbox Code Playgroud)
基准测试客户端是 Apache bench,1 跳远,ping 1ms。Apache bench 在运行时使用以下 TLS 协议:
TLSv1.2,ECDHE-RSA-AES256-GCM-SHA384,2048,256
Run Code Online (Sandbox Code Playgroud)
服务器 SSL 证书 2048 位 RSA。OCSP 装订已打开并已验证。
/etc/sysctl.conf 有
net.ipv4.ip_local_port_range=1024 65000
net.ipv4.tcp_tw_reuse=1
net.ipv4.tcp_fin_timeout=15
net.core.netdev_max_backlog=4096
net.core.rmem_max=16777216
net.core.somaxconn=4096
net.core.wmem_max=16777216
net.ipv4.tcp_max_syn_backlog=20480 …Run Code Online (Sandbox Code Playgroud) 我正在尝试在我的设备上配置 iptables,以便仅允许SSH和HTTPS流量。特别是,HTTPS 协议用于从 Java 客户端向远程服务器调用某些REST API 。
这是我的 iptables:
iptables -F
iptables -P INPUT DROP
iptables -P OUTPUT DROP
iptables -P FORWARD DROP
#SSH
iptables -A INPUT -p tcp -m tcp --dport 22 -j ACCEPT
iptables -A OUTPUT -p tcp --sport 22 -m state --state ESTABLISHED -j ACCEPT
#DNS
iptables -A OUTPUT -p udp --dport 53 -j ACCEPT
#HTTPS
iptables -A OUTPUT -p tcp --sport 443 -j ACCEPT
iptables -A INPUT -p tcp …Run Code Online (Sandbox Code Playgroud) 我花了将近一天的时间尝试为我的公司和社会使用 ALPN 和 http2 支持 EL6 和 EL7 的 Apache httpd 构建,就像我之前为 NGINX 所做的那样(针对 OpenSSL 1.0.2h 静态构建)。
首先,我尝试使用从 Fedora 获取的 OpenSSL 1.0.2h 重建 src rpms 并安装结果 rpms (openssl-devel-1.0.2h-1.el7.centos.x86_64.rpm, openssl-1.0.2h-1.el7.centos .x86_64.rpm) 来替换系统的。是的,我知道,这对于公共构建来说不是正确的方式,但我需要知道是否会起作用。
然后我重建了 nghttp2-1.7.1-1.fc24.src.rpm 并安装了结果 libnghttp2-devel-1.7.1-1.el7.centos.x86_64.rpm 和 libnghttp2-1.7.1-1.el7.centos .x86_64.rpm。
最后,在删除了一些补丁并破解了 apr 和 apr-util 之后,我成功地将 httpd-2.4.18-1.fc23.src.rpm 构建到了 httpd-2.4.18-1.el7.centos.x86_64.rpm。
普通的 HTTP/1.1 对我有用,而且还支持 ALPN,但 HTTP/2 不起作用:
$ curl -v --insecure --http2 --tlsv1.2 https://192.168.1.148
* Rebuilt URL to: https://192.168.1.148/
* Trying 192.168.1.148...
* Connected to 192.168.1.148 (192.168.1.148) port 443 (#0)
* Initializing NSS …Run Code Online (Sandbox Code Playgroud) 我遇到了一个问题,即无法从版本为 1.10.3 或 1.11.2 的 Docker 容器内部建立 HTTPS 连接。
我尝试了 apt-get、curl 和 wget,但一旦建立了 HTTPS 连接,一切都失败了。
例如,以下命令失败:
$ docker run -it ubuntu-curl curl -v https://www.google.com
[...]
* gnutls_handshake() failed: Error in the pull function.
* Closing connection 0
Run Code Online (Sandbox Code Playgroud)
Docker 映像ubuntu-curl基于ubuntu:latest,唯一的变化是apt-get update ; apt-get install curl.
如果我使用 HTTP 而不是 HTTPs,它会起作用。如果我从主机发出相同的命令,它就可以工作。如果我在没有网络虚拟化(docker run --net="host")的情况下启动容器,它就可以工作。如果我降级 Docker(我尝试了 1.6.2 和 1.9.1),它也能正常工作。
任何提示可能有什么问题?我尝试了两台主机,Ubuntu 14 LTS 和 CoreOS stable,没有相关的定制——都在 OpenStack 集群中运行。
主机的 iptables(虽然我不明白为什么 iptables 应该只阻止 HTTPs 流量):
$ …Run Code Online (Sandbox Code Playgroud) 我正在尝试通过 Nginx 反向代理设置负载均衡器。我的应用程序使用客户端证书来验证客户端。我希望我的反向代理将客户端证书转发到我的后端服务器。我已将此行添加到反向代理的配置中,以将客户端证书信息存储在自定义 HTTP 标头中:
proxy_set_header X-SSL-CERT $ssl_client_cert
Run Code Online (Sandbox Code Playgroud)
但是,$ssl_client_cert使用多行来存储证书,并且我的后端 nginx 服务器无法将其正确识别为一个 HTTP 标头。实现转发我的客户证书的最佳方法是什么?
这个问题在 2013 年在这个论坛上被问过,但到目前为止还没有真正的解决方案:https : //forum.nginx.org/read.php?2,236546,236546
谢谢!
我使用自定义域在 AWS ELB 上托管了一个基于 Java 的小型 JAR 打包 web 应用程序。我上传了一个 ZIP 文件,如:
myapp.zip
* myapp.jar
Run Code Online (Sandbox Code Playgroud)
我已经配置使用AWS CM证书,我能够同时通过访问我的应用程序http://www.example.com以及https://www.example.com。
现在我需要始终强制使用HTTPS 。我完全不知道该怎么做。
我看到了许多答案,例如“配置您的 nginx”:
/sf/ask/1722253431/ https://aws.amazon.com/de/premiumsupport/knowledge-center/redirect-http-https-elb / http://www.emind.co/how-to/how-to-force-https-behind-aws-elb/
其他答案也朝着相同的方向发展。
虽然我可以理解重写规则的想法,例如:
if ($http_x_forwarded_proto = 'http') {
return 301 https://www.example.com$request_uri;
}
Run Code Online (Sandbox Code Playgroud)
我缺少的是如何实际将其添加到 AWS ELB nginx。
我最后尝试的是添加.ebextensions\nginx\conf.d\my.conf到我的 ZIP 档案中:
myapp.zip
* myapp.jar
* .ebextensions
* nginx
* conf.d
* my.conf
Run Code Online (Sandbox Code Playgroud)
内容:
if ($http_x_forwarded_proto = 'http') {
return 301 https://www.example.com$request_uri;
}
Run Code Online (Sandbox Code Playgroud)
这给了我以下错误:
2016/12/24 12:08:27 [emerg] 22709#0: …Run Code Online (Sandbox Code Playgroud) 我正在配置 rb750。我想放弃 YouTube 访问权限并重定向到位于我们本地网络服务器中的友好页面。我可以放弃使用 l7 防火墙,但我无法重定向用户,因为 https。具体来说,你管使用某种技术来阻止这种“拦截”。我也尝试过 dnat 和 DNS,但两者都不起作用:(。我已经阅读了适用于 chrome、Firefox 和其他产品的 hsts(https 严格传输安全),并在网站导航期间允许完整的 https,这就是为什么我不能这样做。你们有什么想法吗?
我有一个证书example.com,并www.example.com与以下配置:
server {
listen 443 ssl;
listen [::]:443 ssl;
server_name example.com;
return 301 https://www.example.com$request_uri;
}
Run Code Online (Sandbox Code Playgroud)
我正在尝试重定向到www.example.com,并且在我访问https://example.com. 我成功重定向。但我不明白它为什么有效。301 重定向应该通过 SSL 发生,但我没有指定证书。怎么可能呢?
另外,推荐的方法是什么?只是在上面的块中添加证书吗?
让我们采取以下nginx.conf与配置文件server的块example.com和subdomain.example.com:
http {
...
server {
listen [::]:80 ipv6only=off default_server;
server_name example.com;
return 301 https://example.com$request_uri;
}
server {
listen [::]:443 ipv6only=off ssl default_server;
server_name example.com;
add_header Strict-Transport-Security
"max-age=63072000; includeSubDomains; preload" always;
...
}
server {
listen [::]:80 ipv6only=off;
server_name subdomain.example.com;
return 301 https://subdomain.example.com$request_uri;
}
server {
listen [::]:443 ipv6only=off ssl;
server_name subdomain.example.com;
add_header Strict-Transport-Security
"max-age=63072000; includeSubDomains; preload" always; # <-- again ???
...
}
}
Run Code Online (Sandbox Code Playgroud)
includeSubDomains标题的部分显然告诉浏览器标题也适用于所有子域。
但是,如果该浏览器subdomain.example.com在看到 之前访问example.com …
我需要设置一个可供少数有限用户访问的 IIS 网络服务器。我正在考虑仅使用自签名证书,并在用户系统上手动安装它。
因此,我使用 IIS 工具生成了证书,将其安装在网络服务器上,并将其导出为 .cer 文件。将其添加到 Windows 设置中的受信任机构与 Internet Explorer 配合良好:它删除了不安全警告。
在 Firefox 中,我无法让它工作。启用 security.enterprise_roots.enabled 选项没有帮助。在 Firefox 证书设置中,我无法将其导入权限面板,我收到一条错误消息:
这不是证书颁发机构证书,因此无法导入到证书颁发机构列表中
我能做什么?我不想在 Firefox 中添加异常,因为它会永久禁用对 URL 的任何证书检查,这意味着任何中间人攻击都变得简单明了。如果服务器上的证书发生变化,我希望用户被阻止访问该网站。