我遇到了一个奇怪的问题: 我已经在apache中安装/配置了ssl证书/密钥和ca证书等,现在可以从本地机器上的最新chrome / firefox浏览器访问它,并且它们显示证书都很好(全绿锁图标),并且还显示它使用现代密码套件。 请注意,我是通过服务器名本身从本地计算机访问它,而不是从localhost等访问它,而不是通过更改主机文件..也可以从同一网络中的另一台计算机访问它而没有任何问题..
但是当我尝试从不同的远程计算机(不在同一网络中)或通过vpn等访问它时,我得到ssl连接错误。 Firefox表示" Peer报告它遇到内部错误。 (错误代码:ssl_error_internal_error_alert)"。
我在远程机器上使用openssl命令来模仿客户端:
*openssl s_client -connect xyz.com:443 -state -nbio 2>&1*
它显示:
WARNING: can't open config file: /usr/local/ssl/openssl.cnf
Loading 'screen' into random state - done
CONNECTED(00000170)
turning on non blocking io
SSL_connect:before/connect initialization
SSL_connect:SSLv2/v3 write client hello A
SSL_connect:error in SSLv2/v3 read server hello A
write R BLOCK
SSL3 alert read:fatal:internal error
SSL_connect:error in SSLv2/v3 read server hello A
7020:error:14077438:SSL routines:SSL23_GET_SERVER_HELLO:tlsv1 alert internal error:.\ssl\s23_clnt.c:762:
- - -
no peer certificate available
- - -
No client certificate CA names sent
- - -
SSL handshake has read 7 bytes and written 307 bytes
- - -
New, (NONE), Cipher is (NONE)
Secure Renegotiation IS NOT supported
Compression: NONE
Expansion: NONE
- - -
我必须使用apache httpd来使用https,并使用fwd请求tomcat,它只使用http,并使用ajp-proxy来实现此目的。
我尝试删除代理配置,重新启动但仍然没有运气 - 在本地计算机上显示" it works "页面,并在远程机器上,相同的ssl连接错误。 apache日志中没有任何内容也与远程计算机的尝试相对应(即它们直到那些日志才会到达)。
但奇怪的是,现有的配置在长时间的非工作期后可以在远程机器上工作30-40分钟(即一段时间)。然后相同的配置再次折腾..无法理解为什么。在整个这段时间内,它始终可以通过本地机器进入/罚款。
这是ssl-conf:
SSLCipherSuite EECDH+AESGCM:EDH+AESGCM:AES256+EECDH:AES256+EDH:SSL_RSA_WITH_RC4_128_SHA:HIGH:MEDIUM:!MD5:!RC4
SSLProxyCipherSuite EECDH+AESGCM:EDH+AESGCM:AES256+EECDH:AES256+EDH:HIGH:MEDIUM:!MD5:!RC4
SSLHonorCipherOrder on
SSLProtocol all -SSLv2 -SSLv3
SSLProxyProtocol all -SSLv2 -SSLv3
SSLSessionCache "shmcb:c:/Apache24/logs/ssl_scache(512000)"
SSLSessionCacheTimeout 300
SSLUseStapling On
SSLStaplingCache "shmcb:c:/Apache24/logs/ssl_stapling(150000)"
SSLStaplingStandardCacheTimeout 3600
<VirtualHost *:443>
DocumentRoot "c:/Apache24/htdocs"
ServerName www.xyz.com
ServerAlias xyz.com
ServerAdmin info@xyz.com
ErrorLog "c:/Apache24/logs/error.log"
TransferLog "c:/Apache24/logs/access.log"
SSLEngine on
SSLCertificateFile "C:/Apache24/xyz/certs/server.crt"
SSLCertificateKeyFile "C:/Apache24/xyz/certs/private_key_no_pswd.pem"
SSLCertificateChainFile "C:/Apache24/xyz/certs/gd_bundle-g2-g1.crt"
<FilesMatch "\.(cgi|shtml|phtml|php)$">
SSLOptions +StdEnvVars
</FilesMatch>
<Directory "c:/Apache24/cgi-bin">
SSLOptions +StdEnvVars
</Directory>
CustomLog "c:/Apache24/logs/ssl_request.log" \
"%t %h %{SSL_PROTOCOL}x %{SSL_CIPHER}x \"%r\" %b"
#ProxyRequests Off
ProxyPreserveHost On
SSLProxyEngine on
SSLProxyVerify none
SSLProxyCheckPeerCN off
SSLProxyCheckPeerName off
SSLProxyCheckPeerExpire off
<Proxy *>
#Order allow,deny
Allow from all
Deny from none
Require all granted
#Deny from all
#Allow from 127.0.0.0/255.0.0.0 ::1/128
# Order deny,allow
# Allow from localhost
# Require ip 127.0.0.1
</Proxy>
ProxyPass / ajp://localhost:8009/
</VirtualHost>
你可以在virtualHost配置中看到很多东西(获得权限被拒绝和其他问题),并尝试了很多东西,直到它从本地机器上运行..
我的环境是: Win-XP sp3(我知道它的旧版本),ApacheLounge httpd-VC-10 v-2.4.x(在端口443上),tomcat-1.6(在8080上)
如果我做错了什么,或者您需要其他任何配置,请告诉我。
感谢。
答案 0 :(得分:1)
这可以在本地网络中运行,而不是在外面听起来非常像防火墙保护您的网络。另一种可能是同一主机名解析为本地和远程网络中的不同IP地址,因此它尝试从本地和远程访问不同的主机。另一件事可能是主机名解析为IPv4和IPv6地址,但您的服务器仅使用IPv4。如果您在本地网络中只使用IPv4而另一个网络可以执行IPv6,您将看到类似的效果。
要调试此问题,我建议您在本地客户端,远程客户端进行数据包捕获并进行比较。如果来自远程客户端的数据完全到达服务器(或防火墙阻止它),还要检查数据包捕获。
编辑:从注释看起来本地和远程客户端看到同一服务器的不同IP地址。要调试为什么会出现这种情况,请首先检查双方是否实际使用相同的服务器,因为通常您会看到一个使用www.example.com而另一个使用example.com(没有www),但名称有不同的IP地址。如果您确定不是这种情况,请检查真实IP地址应该是什么,然后在名称错误的聚会上查看更多详细信息。这个错误的名称可能是由hosts文件中的条目(来自测试?),缓存条目(更改为DNS take some time to propagate,有时是一天或更长时间)或因为使用了拆分DNS设置引起的。 Split DNS在服务器面向外部和实习的公司中并不少见,他们希望实习生使用内部IP地址和外部客户端来使用外部IP地址。