无法在 Debian 上为 Apache 2 设置 SSL 支持

无法在 Debian 上为 Apache 2 设置 SSL 支持

我正在尝试在 Debian 上为 Apache 2 设置 SSL 支持。版本如下:

Debian GNU/Linux 6.0
apache2 2.2.16-6+squeeze1

我花了好几天的时间按照很多指南操作,但还是无法成功。以下是我的步骤和配置文件(出于隐私考虑,ServerName 和 DocumentRoot 已更改,以防万一告诉我):

# mkdir /etc/apache2/ssl
# openssl req $@ -new -x509 -days 365 -nodes -out /etc/apache2/ssl/apache.pem -keyout /etc/apache2/ssl/apache.pem

此时我对 apache.pem 的权限有疑问,在这一步,它们是

-rw-r--r-- 1 root root

也许它必须属于 www-data?然后我使用以下方法启用 ssl-mod

# a2enmod ssl
# /etc/init.d/apache2 restart

我以这种方式修改 /etc/apache2/sites-available/default-ssl(我输入端口 8080,因为我需要端口 443 用于其他用途):

<VirtualHost *:8080>
SSLEngine on
SSLCertificateFile    /etc/apache2/ssl/apache.pem
SSLCertificateKeyFile /etc/apache2/ssl/apache.pem

ServerAdmin webmaster@localhost

    DocumentRoot /var/www
    <Directory />
            Options Indexes FollowSymLinks
            AllowOverride All
    </Directory>
    <Directory /var/www/>
            Options Indexes FollowSymLinks MultiViews
            AllowOverride All
            Order allow,deny
            allow from all
    </Directory>

    ScriptAlias /cgi-bin/ /usr/lib/cgi-bin/
    <Directory "/usr/lib/cgi-bin">
            AllowOverride None
            Options +ExecCGI -MultiViews +SymLinksIfOwnerMatch
            Order allow,deny
            Allow from all
    </Directory>

    ErrorLog ${APACHE_LOG_DIR}/error.log


    # Possible values include: debug, info, notice, warn, error, crit,
    # alert, emerg.
    LogLevel warn

    CustomLog ${APACHE_LOG_DIR}/access.log combined

Alias /doc/ "/usr/share/doc/"
<Directory "/usr/share/doc/">
    Options Indexes MultiViews FollowSymLinks
    AllowOverride None
    Order deny,allow
    Deny from all
    Allow from 127.0.0.0/255.0.0.0 ::1/128
</Directory>

</VirtualHost>


<VirtualHost *:8080>
DocumentRoot /home/user1/public_html/
ServerName first.server.org

# Other directives here

</VirtualHost>

<VirtualHost *:8080>

DocumentRoot /home/user2/public_html/
ServerName second.server.org

# Other directives here

</VirtualHost>

我必须指出,相同的配置在 http 上有效(它是 /etc/apache2/sites-available/default 的副本,但有一些差异 -> 端口和 ssl 支持)。我的 /etc/apache2/ports.conf 如下:

# If you just change the port or add more ports here, you will likely also
# have to change the VirtualHost statement in
# /etc/apache2/sites-enabled/000-default
# This is also true if you have upgraded from before 2.2.9-3 (i.e. from
# Debian etch). See /usr/share/doc/apache2.2-common/NEWS.Debian.gz and
# README.Debian.gz

#NameVirtualHost *:80
Listen 80

<IfModule mod_ssl.c>
# If you add NameVirtualHost *:443 here, you will also have to change
# the VirtualHost statement in /etc/apache2/sites-available/default-ssl
# to <VirtualHost *:443>
# Server Name Indication for SSL named virtual hosts is currently not
# supported by MSIE on Windows XP.
#NameVirtualHost *:8080
Listen 8080
</IfModule>

<IfModule mod_gnutls.c>
Listen 8080
</IfModule>

有什么建议吗?

答案1

根据您的配置,您在同一个端口上有几个想要使用 ssl 的虚拟主机 - 并且显然只有其中一个配置了 ssl。

  1. 一个端口要么启用 SSL,要么不启用,同一个端口上不能同时启用两者。
  2. 您不能在使用 ssl 的端口上拥有多个虚拟主机。

删除所有其他虚拟主机定义或更改其端口或 IP 地址并再次测试。

答案2

您在此处可能存在配置错误:

SSLCertificateFile    /etc/apache2/ssl/apache.pem
SSLCertificateKeyFile /etc/apache2/ssl/apache.pem

您的证书文件和密钥应该是单独的文件。

我不知道该如何按照你的方式去做。但为了让你的东西正常工作,你可能还需要遵循我的向导使用 Java Keytool 创建密钥库,然后将密钥从密钥库中导出以供 Apache 使用。使用这种方法,我知道它是有效的。

按照我的指南操作后,您将获得:

SSLCertificateFile    /etc/apache2/ssl/exported-pem.crt  
    SSLCertificateKeyFile /etc/apache2/ssl/exported-pem.key

我不确定,但我阅读了您的步骤并注意到以下几点:

  1. 你跳过了 CSR 步骤,也跳过了签署证书请求
  2. 您没有从私钥中删除密码(但这仅在 Windows 平台上是必要的;在这种情况下,Apache 需要知道密码才能读取密钥,而我不知道您在哪里这样做)
  3. 就 ssl 配置而言,根据我的经验,只要您在 http.conf 文件中启用其指令,默认 ssl 配置文件就应该可以工作。

相关内容