首页 文章

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

提问于
浏览
4

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

enter image description here

在文档中它有以下内容,

注意目前,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 回答

  • 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]
    

相关问题