Amazon-Web-Services

AWS 私有網路負載均衡器上的 TCP 443 偵聽器拋出 SSL_ERROR_RX_RECORD_TOO_LONG

  • October 31, 2020

我有一個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
  • 網路伺服器 = Apache 2.4
  • AWS NLB 面向內部
  • NLB 有監聽器TCP 443

我已經在埠 80 上嘗試過,一切正常,但我在 443 上遇到了這個問題,我為此搜尋了很多,大多數答案都指出 Apache 上的某些配置缺失,但我所有這些都已經配置在我的 conf 文件中。任何指導都會有所幫助。

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>

經過大量調試後,我發現我正在向正在偵聽埠 80 的目標組發送 https 流量。這就是為什麼 SSL 只是轉到埠 80 並且從未終止的原因。

將目標組的 80 埠更改為 443 後,一切都開始工作了。

引用自:https://serverfault.com/questions/1040517