如何在Apache中配置SSL?


10

我已经在RHEL 6中安装了apache。一切正常。使用https:// localhost:443 /应该做的所有更改和配置 。

如果我将“ Listen 80”更改为443,则会抛出SSL连接错误

“错误107(net :: ERR_SSL_PROTOCOL_ERROR):SSL协议错误。

Answers:


13

如果您使用apache2,则必须执行以下操作:

步骤1:使用OpenSSL生成用于保护您的网站的密钥。这些密钥在加密和解密到安全站点的流量时使用。

$ openssl genrsa -out mydomain.key 1024

该命令将创建一个1024位的私钥,并将其放入文件mydomain.key中。

步骤2:生成您自己的证书。

$ openssl req -new -key mydomain.key -x509 -out mydomain.crt

步骤3:将私钥保留在目录中,/etc/apache2/ssl.key/并将证书保留在目录中/etc/apache2/ssl.crt/

注意:ssl.key目录只能由root读取。

步骤4:现在您需要在中编辑httpd.conf文件/etc/apache2

现在,该文件应包含以下内容:

NameVirtualHost *:80
NameVirtualHost *:443
Listen 443

<VirtualHost *:80>
ServerAdmin webmaster@mydomain.com
DocumentRoot /srv/www/htdocs/mydomain
ServerName www.mydomain.com
ServerAlias mydomain.com
</VirtualHost>


<VirtualHost *:443>
ServerAdmin webmaster@mydomain.com
DocumentRoot /srv/www/htdocs/mydomain-secure
ServerName mail.mydomain.com
SSLEngine on
SSLCertificateFile /etc/apache2/ssl.crt/mydomain.crt
SSLCertificateKeyFile /etc/apache2/ssl.key/mydomain.key
</VirtualHost>


<Directory /srv/www/htdocs/mydomain-secure>
SSLRequireSSL
</Directory>


<VirtualHost *:80>
ServerAdmin webmaster@mydomain.com
DocumentRoot /srv/www/htdocs/mydomain
ServerName mail.mydomain.com
RedirectMatch permanent (/.*) https://mail.mydomain.com$1
</VirtualHost>

前三行不是必需的。1. NameVirtualHost已弃用,并将在Apache的未来版本中删除。目前,它已经没有操作了。2. Listen 443如果apache已经配置为侦听端口443,这可能会引起问题,在许多Linux发行版中已经如此。仅在确定在其他位置未配置此行时才添加。
lanoxx

3

不要更改Listen 80443/etc/httpd/conf/httpd.conf。SSL在中配置/etc/httpd/conf.d/ssl.conf。在RHEL 6上,启用了SSL,并且默认情况下使用自签名证书进行侦听。

您可以通过浏览到SSL来访问默认站点https://localhost(无需将端口添加到URL的末尾)。

如果您想将所有HTTP请求转发到HTTPS(这是我认为要实现的目标),则可以添加永久重定向或使用Apache模块mod_rewrite

最简单,最安全的方法是设置永久重定向。启用命名的虚拟主机,并在中Redirect向VirtualHost 添加指令/etc/httpd/conf/httpd.conf

NameVirtualHost *:80
<VirtualHost *:80>
   ServerName localhost
   Redirect permanent / https://localhost
</VirtualHost>

使用mod_rewrite,您还可以创建一个命名的虚拟主机。这不是推荐的方法,但是会起作用。

NameVirtualHost *:80
<VirtualHost *:80>
   # Enable the Rewrite engine
   RewriteEngine On
   # Make sure the connection is not already HTTPS
   RewriteCond %{HTTPS} !=on
   # This rewrites the URL and forwards to https
   RewriteRule ^/?(.*) https://%{SERVER_NAME}/$1 [R,L]
</VirtualHost>

如果要关闭SSL,请注释掉这些行,/etc/httpd/conf.d/ssl.conf然后重新启动Apache。

LoadModule ssl_module modules/mod_ssl.so
Listen 443

实际上,如果您为RHEL6添加mod_ssl软件包,它将创建一个/etc/httpd/conf.d/ssl.conf,该文件将加载模块并设置<VirtualHost _default_:443>,并带有所有必需的参数,每个参数均带有注释。mod_ssl如果您安装了该软件包,则不会自动安装该httpd软件包。
jsbillings

1
我想在您的重写中添加一件事:使用[R=301,L]而不是just [R,L],这样,重写使用的是HTTP 3xx状态代码的永久选项。
dcestari 2015年
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.