我有一个AWS private Network Load Balancer
带有侦听器的设置TCP 443
,附加到该侦听器的目标组也在端口 443 上运行。附加到该目标的实例正在Apache 2.4
上运行Centos 7
。
我已经仔细检查了 Web 服务器配置,当我运行以下命令时,它就可以正常工作。
这里 xxxx 是实例的私有 IP 地址。
$ curl -kv https://x.x.x.x
上述命令适用于整个 VPC。
但是当我使用私有NLB域名时:
$ curl -kv https://some-unique-id.elb.region.amazonaws.com
它给出了以下错误:
* About to connect() to some-unique-id.elb.region.amazonaws.com port 443 (#0)
* Trying x.x.x.x...
* Connected to some-unique-id.elb.region.amazonaws.com (x.x.x.x) port 443 (#0)
* Initializing NSS with certpath: sql:/etc/pki/nssdb
* NSS error -12263 (SSL_ERROR_RX_RECORD_TOO_LONG)
* SSL received a record that exceeded the maximum permissible length.
* Closing connection 0
curl: (35) SSL received a record that exceeded the maximum permissible length.
配置摘要
- 实例操作系统 = Centos 7.7
- Web 服务器 = Apache 2.4
- AWS NLB 面向内部
- NLB 有监听器
TCP 443
我已经在端口 80 上尝试过,一切正常,但我在 443 上遇到了这个问题,我对此进行了大量搜索,大多数答案都指出 Apache 上缺少某些配置,但我的配置文件中已经配置了所有这些配置。任何指导都会有所帮助。
Listen 443 https
SSLPassPhraseDialog exec:/usr/libexec/httpd-ssl-pass-dialog
SSLSessionCache shmcb:/run/httpd/sslcache(512000)
SSLSessionCacheTimeout 300
SSLRandomSeed startup file:/dev/urandom 256
SSLRandomSeed connect builtin
SSLCryptoDevice builtin
<VirtualHost x.x.x.x:443>
ErrorLog logs/ssl_error_log
TransferLog logs/ssl_access_log
LogLevel warn
SSLEngine on
SSLProtocol all -SSLv2 -SSLv3
SSLCipherSuite HIGH:3DES:!aNULL:!MD5:!SEED:!IDEA
SSLCertificateFile /etc/pki/tls/certs/localhost.crt
SSLCertificateKeyFile /etc/pki/tls/private/localhost.key
SSLVerifyClient none
<Files ~ "\.(cgi|shtml|phtml|php3?)$">
SSLOptions +StdEnvVars
</Files>
<Directory "/var/www/cgi-bin">
SSLOptions +StdEnvVars
</Directory>
BrowserMatch "MSIE [2-5]" \
nokeepalive ssl-unclean-shutdown \
downgrade-1.0 force-response-1.0
CustomLog logs/ssl_request_log \
"%t %h %{SSL_PROTOCOL}x %{SSL_CIPHER}x \"%r\" %b"
DocumentRoot /path/to/my/app
<Directory "/path/to/my/app">
Options -Indexes -FollowSymLinks -Includes -ExecCGI -MultiViews
AllowOverride all
Allow from all
Require all granted
</Directory>
</VirtualHost>
答案1
经过大量调试后,我发现我正在向在端口 80 上监听的目标组发送 https 流量。这就是为什么 SSL 只转到端口 80 并且从未终止的原因。
将目标组的端口 80 更改为 443 后,一切都开始正常工作。