我正在阅读证书管理器的aws文档 . 我可以为ELB关联SSL证书 . 我已经这样做了,我的应用程序仍然驻留在部署在Ubuntu EC2服务器上的Apache服务器上 .
在文档中它有以下内容,
注意目前,ACM证书与Elastic Load Balancing负载均衡器或Amazon CloudFront分配相关联 . 虽然您在Amazon EC2实例上安装了您的网站,但您并未在那里部署ACM证书 . 而是在您的Elastic Load Balancing负载均衡器或CloudFront分配上部署ACM证书 .
据我所知,这意味着我们可以在EC2上部署应用程序,并将其添加到具有ACM证书的负载余额下 .
这就是您需要为Web应用程序运行SSL所需的全部内容 .
但是当我不使用这种方法时,我使用以下Apache配置来配置SSL .
<VirtualHost *:80>
DocumentRoot /var/www/html/
ServerName example.com
ServerAlias example.com
ErrorLog ${APACHE_LOG_DIR}/diyoron-error_log
CustomLog ${APACHE_LOG_DIR}/diyoron-access_log common
<Directory /var/www/html/>
RewriteEngine on
RewriteCond %{HTTPS} off
RewriteRule (.*) https://%{HTTP_HOST}%{REQUEST_URI} [R]
</Directory>
</VirtualHost>
<VirtualHost *:443>
# ServerAdmin webmaster@example.com
DocumentRoot /var/www/html/
ServerName example.com
ServerAlias example.com
ErrorLog ${APACHE_LOG_DIR}/example-error_log
CustomLog ${APACHE_LOG_DIR}/example-access_log common
SSLEngine On
SSLCertificateKeyFile /etc/letsencrypt/live/example.com/privkey.pem
SSLCertificateFile /etc/letsencrypt/live/example.com/cert.pem
SSLCertificateChainFile /etc/letsencrypt/live/example.com/chain.pem
</VirtualHost>
但在我目前的安排中,我无法在我的Apache配置中配置SSLCertificateKeyFile,SSLCertificateChainFile,SSLCertificateFile .
如果有人能指引我走上一条非常受欢迎的正确道路 .
AH00016: Configuration Failed
[Fri Apr 21 23:14:01.184314 2017] [ssl:emerg] [pid 1190] AH02572: Failed to configure at least one certificate and key for example.com:443
[Fri Apr 21 23:14:01.184826 2017] [ssl:emerg] [pid 1190] SSL Library Error: error:140A80B1:SSL routines:SSL_CTX_check_private_key:no certificate assigned
[Fri Apr 21 23:14:01.184834 2017] [ssl:emerg] [pid 1190] AH02311: Fatal error initialising mod_ssl, exiting. See /var/log/apache2/error.log for more information
1 回答
您将在您的ELB上终止SSL并将其配置为将HTTP和HTTPS请求转发为HTTP(到您的实例的端口80):
因此,您将不再需要
<VirtualHost *:443>
.此外,在您的Apache配置中,在
<VirtualHost *:80>
中,如果连接未使用SSL / TLS,您将用户重定向到https://
(顺便说一句,这种情况是不必要的,如果使用https请求将永远不会达到这一点 - 您可以无条件地重定向它) . 这是不可能的,因为从apache的角度来看,所有传入连接都使用http://
.要确定客户端和负载均衡器之间使用的协议,请使用
X-Forwarded-Proto
请求标头(Elastic Load Balancing将X-Forwarded-Proto
请求标头中客户端和负载均衡器之间使用的协议存储起来,并将标头传递给您的服务器):