我正在尝试在我的一个EC2实例上设置https。我已经多次这样做了,但出于某种原因,对于这个例子,它拒绝工作。
问题
当我通过本地IP连接到域时,https工作正常。 当我通过公共IP连接到域时, https不起作用,浏览器repsonse “ERR CONNECTION REFUSED”
当我有时重新加载时,您可以看到它接受了https,然后立即阻止它,几乎就像有防火墙规则一样,但是没有。
普通的http 100%本地和公共。
我没有通过亚马逊上的安全组阻止此阶段的任何端口。 我没有关于ip表的规则,我已经禁用了ufw。
我为apache启用了SSL,测试键在本地运行良好。
这是sudo netstat -tlnp
的输出Active Internet connections (only servers)
Proto Recv-Q Send-Q Local Address Foreign Address State PID/Program name
tcp 0 0 0.0.0.0:22 0.0.0.0:* LISTEN 937/sshd
tcp 0 0 127.0.0.1:3306 0.0.0.0:* LISTEN 1060/mysqld
tcp6 0 0 :::22 :::* LISTEN 937/sshd
tcp6 0 0 :::443 :::* LISTEN 2798/apache2
tcp6 0 0 :::80 :::* LISTEN 2798/apache2
这是我的/etc/apache2/ports.conf文件:
Listen 80
Listen 443
我已启用default-ssl网站,没有任何错误。
这是我的/ etc / hosts文件:
127.0.0.1 localhost
# The following lines are desirable for IPv6 capable hosts
::1 ip6-localhost ip6-loopback
fe00::0 ip6-localnet
ff00::0 ip6-mcastprefix
ff02::1 ip6-allnodes
ff02::2 ip6-allrouters
ff02::3 ip6-allhosts
我也尝试使用0.0.0.0而不是127.0.0.0而且它什么也没做。
这是我网站的apache conf文件(出于安全考虑,我用“mysite.com”替换了我的真实网站名称):
<VirtualHost *:80>
DocumentRoot /var/www/html/mysite.com
ServerName mysite.com
ServerAlias www.mysite.com
<Directory /var/www/html/mysite.com>
AllowOverride All
RewriteEngine On
Require all granted
Options -Indexes +FollowSymLinks
</Directory>
ErrorLog ${APACHE_LOG_DIR}/error.log
# Possible values include: debug, info, notice, warn, error, crit,
# alert, emerg.
LogLevel warn
CustomLog ${APACHE_LOG_DIR}/access.log combined
</VirtualHost>
<VirtualHost *:443>
DocumentRoot /var/www/html/mysite.com
ServerName mysite.com
ServerAlias www.mysite.com
SSLEngine on
SSLCertificateFile /usr/local/ssl/public.crt
SSLCertificateKeyFile /usr/local/ssl/private/private.key
SSLCACertificateFile /usr/local/ssl/intermediate.crt
</VirtualHost>
这个完全相同的conf文件正在处理另一个实例,它告诉我问题不在于此文件。
我错过了什么?请帮忙。 提前致谢
以下是我为apache加载的模块:
sudo apache2ctl -M
Loaded Modules:
core_module (static)
so_module (static)
watchdog_module (static)
http_module (static)
log_config_module (static)
logio_module (static)
version_module (static)
unixd_module (static)
access_compat_module (shared)
alias_module (shared)
auth_basic_module (shared)
authn_core_module (shared)
authn_file_module (shared)
authz_core_module (shared)
authz_host_module (shared)
authz_user_module (shared)
autoindex_module (shared)
deflate_module (shared)
dir_module (shared)
env_module (shared)
filter_module (shared)
mime_module (shared)
mpm_prefork_module (shared)
negotiation_module (shared)
php5_module (shared)
rewrite_module (shared)
setenvif_module (shared)
socache_shmcb_module (shared)
ssl_module (shared)
status_module (shared)
wsgi_module (shared)
一些有趣的apache error.log条目,而不是在我重新启动服务的时候,几分钟前就是随机的(这可能导致问题吗?):
[Wed Feb 17 21:04:48.478106 2016] [ssl:warn] [pid 3629] AH02292: Init: Name-based SSL virtual hosts only work for clients with TLS server name indication support (RFC 4366)
[Wed Feb 17 21:04:48.507277 2016] [ssl:warn] [pid 3630] AH02292: Init: Name-based SSL virtual hosts only work for clients with TLS server name indication support (RFC 4366)
[Wed Feb 17 21:04:48.507324 2016] [:warn] [pid 3630] mod_wsgi: Compiled for Python/3.4.0.
[Wed Feb 17 21:04:48.507329 2016] [:warn] [pid 3630] mod_wsgi: Runtime using Python/3.4.3.
[Wed Feb 17 21:04:48.509502 2016] [mpm_prefork:notice] [pid 3630] AH00163: Apache/2.4.7 (Ubuntu) PHP/5.5.9-1ubuntu4.14 OpenSSL/1.0.1f mod_wsgi/3.4 Python/3.4.3 configured -- resuming normal operations
[Wed Feb 17 21:04:48.509517 2016] [core:notice] [pid 3630] AH00094: Command line: '/usr/sbin/apache2'
我禁用wsgi模块只是为了确保这不是我的问题,并重新启动了apache服务,仍然没有运气,同样的问题。
我正在倾倒我的一些phpinfo()以显示更多信息。 SSL设置为YES。我不知道最近发生了什么:(
我认为我可能需要在负载均衡器上添加SSL certifiacte才能实现这一点。我现在正在尝试,会让所有人都知道......
答案 0 :(得分:1)
实现位于AWS上VPC内负载均衡器后面的私有子网中的EC2实例的HTTPS流量的唯一方法是在负载均衡器(ELB)本身上具有HTTPS侦听器以及特定服务器的证书负载均衡器上的/ domain。就我而言,即使您在负载均衡器(入站,出站)和EC2实例(入站,出站)的安全规则中打开了HTTPS 443,ELB仍会阻止该端口上的所有HTTPS流量到EC2实例。 ELB没有具有有效证书的监听器。据我所知,文档中没有明确说明的地方。希望这会有所帮助。
使用AWS cli将证书从EC2实例提交到IAM。
我在我的服务器上添加了证书文件,并且必须像上面那样将它们上传到IAM(是的,文件://部分是必要的,即使是在Linux上):
aws iam upload-server-certificate --server-certificate-name my-server-cert
--certificate-body file://my-certificate.pem --private-key file://my-private-key.pem
--certificate-chain file://my-certificate-chain.pem
如下所述:http://docs.aws.amazon.com/ElasticLoadBalancing/latest/DeveloperGuide/ssl-server-cert.html
然后你需要在附有EC2实例的ELB上设置一个监听器。然后监听器用于HTTPS和端口443.监听器将要求提供证书,并且它将具有您之前已经列出的aws cli中添加的证书。如果未列出,请退出AWS控制台并重新登录。之后,通过HTTPS的流量将开始流向您的EC2实例。
我不确定是否需要这样做,因为我在负载均衡器的安全组上打开了443端口,文档中没有任何地方明确说明如果您使用负载均衡器,则这是实现 HTTPS 连接的仅方式。它只是解释了这是你想要一个HTTPS负载均衡器的方法,这可能意味着两个不同的事情,但是,我很高兴它能够整理出来。
答案 1 :(得分:0)
您是否还可以附加日志以显示任何Apache错误输出?
重新排序虚拟主机并先放入443。
你可能受此影响:https://bugs.launchpad.net/ubuntu/+source/apache2/+bug/795315