ELB的AWS证书管理器,指向在EC2上运行的Apache服务器

时间:2017-04-21 22:54:46

标签: apache amazon-web-services ssl amazon-ec2 ssl-certificate

我正在阅读证书管理器的aws文档。我可以为ELB关联SSL证书。我已经这样做了,我的应用程序仍然驻留在部署在Ubuntu EC2服务器上的Apache服务器上。

enter image description here

在文档中它有以下内容,

  

注意目前,ACM证书与Elastic Load相关联   平衡负载均衡器或Amazon CloudFront分配。虽然   如果您在Amazon EC2实例上安装了您的网站,则不进行部署   那里有ACM证书。而是在您的部署ACM证书   Elastic Load Balancing负载均衡器或您的CloudFront   分布。

据我所知,这意味着我们可以在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 个答案:

答案 0 :(得分:5)

您将在您的ELB上终止SSL,并将其配置为将HTTP和HTTPS请求转发为HTTP(到您的实例的端口80):

enter image description here

因此,您不再需要<VirtualHost *:443>

此外,在您的Apache配置中,在<VirtualHost *:80>中,如果连接未使用SSL / TLS,您将用户重定向到https://(顺便说一下,该条件是不必要的,请求永远不会达到这一点如果它使用https - 您可以无条件地重定向它)。这是不可能的,因为从apache的角度来看,所有传入连接都使用http://

要确定客户端和负载均衡器之间使用的协议,请使用X-Forwarded-Proto请求标头(Elastic Load Balancing在X-Forwarded-Proto请求标头中存储客户端和负载均衡器之间使用的协议,将标题传递给您的服务器):

RewriteCond %{HTTP:X-Forwarded-Proto} !https [NC]
RewriteRule ^ https://%{HTTP_HOST}%{REQUEST_URI} [R=301,L]