2017-04-21 85 views
3

我正在阅读证书管理器的aws文档。我可以将ELB的SSL证书关联起来。我已经这样做了,而且我的应用程序仍驻留在部署在Ubuntu EC2服务器上的Apache服务器上。ELB的AWS证书管理器指向运行在EC2上的Apache服务器

enter image description here

而且它具有以下的文档中,

注意目前,ACM证书与弹性负载均衡 负载均衡器或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 [email protected] 
     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> 

但在我目前的安排,我不能配置了SSLCertificateKeyFile,SSLCertificateChainFile,在了SSLCertificateFile我的Apache配置。

如果任何人都可以指引我走向非常感谢的正确道路。

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 

回答

4

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

enter image description here

因此,你不需要<VirtualHost *:443>了。

而且,在你的Apache配置,在<VirtualHost *:80>你如果连接没有使用SSL将用户重定向到https:///TLS(顺便说一句,这个条件是不必要的,请求将从来没有,如果它是使用HTTPS达到这一点 - 你可以无条件地重定向它)。这将不再可能,因为从Apache的角度来看,所有传入连接使用http://

为了确定客户端与负载平衡器之间使用的协议,使用X-Forwarded-Proto请求头(弹性负载平衡存储在X-Forwarded-Proto请求报头中的客户端和负载平衡器之间使用的协议,并沿给你的服务器通过了头):

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

我觉得这是一个经典的ELB。你的方法让我更进一步。谢谢。 –