在 Linux Ubuntu 上的 Apache 上设置 SSL

在 Linux Ubuntu 上的 Apache 上设置 SSL

我正在尝试让我的 apache 网络服务器上运行 SSL。

我还没有域名设置的 DNS,这是一个问题吗?

如何在我的 Web 服务器上设置 SSL?

当我启动 apache 时,它​​失败了。

root@vannevar:/etc/apache2/ssl# service apache2 start
 * Starting web server apache2                                                                                                                         Action 'start' failed.
The Apache error log may have more information.

日志统计表明无法读取证书。

[Thu Jun 28 15:01:02 2012] [error] Init: Unable to read server certificate from file /etc/apache2/ssl/www.example.com.csr
[Thu Jun 28 15:01:02 2012] [error] SSL Library Error: 218529960 error:0D0680A8:asn1 encoding routines:ASN1_CHECK_TLEN:wrong tag
[Thu Jun 28 15:01:02 2012] [error] SSL Library Error: 218595386 error:0D07803A:asn1 encoding routines:ASN1_ITEM_EX_D2I:nested asn1 error

的内容/etc/apache2/httpd.conf

ServerName [SERVERIP]

的内容/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 [SERVERIP]:443
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.
    Listen 443
</IfModule>

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

的内容/etc/apache2/sites-available/www.example.com

<VirtualHost *:80>
     ServerAdmin [email protected]
     ServerName example.com
     ServerAlias www.example.com
     DocumentRoot /srv/sites/example.com/public/
     ErrorLog /srv/sites/example.com/logs/error.log
     CustomLog /srv/sites/example.com/logs/access.log combined
</VirtualHost>

<VirtualHost [SERVERIP]:443>
     SSLEngine On
     SSLCertificateFile /etc/apache2/ssl/www.example.com.csr
     SSLCertificateKeyFile /etc/apache2/ssl/www.example.com.key
     SSLCACertificateFile /etc/apache2/ssl/comodo.crt

     ServerAdmin [email protected]
     ServerName example.com
     ServerAlias www.example.com
     DocumentRoot /srv/sites/example.com/public/
     ErrorLog /srv/sites/example.com/logs/error.log
     CustomLog /srv/sites/example.com/logs/access.log combined
</VirtualHost>

更新:

在 dreamhost(我正试图退出)中,我已经有一个带有 ssl / https 的域,我可以看到 dreamhost 管理员证书、私钥和中间证书中的三个密钥。我可以用它们做什么吗?我可以看到 dreamhost 正在使用 comodo,我的网站显示它是 PositiveSSL,因此...在 comodo 的网站上有根证书中级证书。这五个证书和命令创建的两个证书有什么关系openssl req -new -days 365 -nodes -keyout www.mydomain.com.key -out www.mydomain.com.csr?这两个是请求实际的证书吗?

我意识到 apache 的错误是指/etc/apache2/sites-available/www.example/com我弄乱了文件类型的文件,因为SSLCertificateFile /etc/apache2/ssl/www.example.com.csr它应该是.crt根据linode 文档

更新 2

因此我进入 dreamhost 并将密钥复制到以下文件并映射以下内容

certificate => dh.crt
private key => dh.key
intermediate certificate => dh.cer

更改了连接/sites-available/example.com,它就正常工作了(apache 正常工作)。这是否意味着当我连接我的域时 SSL 会正常工作?

答案1

我无法在这里投票或发表评论,但 Adrian Perez 是对的,您没有使用证书,而是使用了证书签名请求,在这一行:

SSLCertificateFile /etc/apache2/ssl/www.example.com.csr

需要将 CSR 发送到证书颁发机构以验证您的身份并生成证书。您可以使用以下命令自行生成证书:

openssl x509 -req -days 365 -in www.example.com.csr -signkey www.example.com.key -out www.example.com.crt

并改变:

SSLCertificateFile /etc/apache2/ssl/www.example.com.csr

到:

SSLCertificateFile /etc/apache2/ssl/www.example.com.crt

但是,当您在浏览器中访问该网站时,您会收到警告,因为这是一个自签名证书,因此不受信任。不过,这仍然是了解流程并测试网站是否正常运行的好方法。基本步骤如下:

  1. 生成私钥文件(只需执行一次,即第一次设置站点时)
  2. 生成证书签名请求
  3. 向证书颁发机构支付大量资金来验证和颁发证书(Thwate 或类似机构)
  4. 将密钥放在服务器上。

关于权限,请确保密钥/crt 只有 root 可读/可写(chmod 600),否则 Apache 会发出抱怨。

希望这可以帮助

答案2

您的证书文件似乎不可读(或丢失)

[Thu Jun 28 15:01:02 2012] [error] Init: Unable to read server certificate from file /etc/apache2/ssl/www.example.com.csr

您是否检查过权限/路径?

此外,必须设置 DNS,否则证书将显示一些错误(取决于浏览器)

答案3

您可以下载一个名为密钥库资源管理器打开并查看证书以验证其是否有效。Apache 的一个问题是证书需要采用特定的格式。 本网站可能有助于解释您需要的格式,它似乎是 PEM 。

答案4

您必须拥有实际证书才能设置 SSL。您拥有的只是一份证书请求,该请求应发送给证书颁发机构,以便他们颁发证书。此外,虽然您可以在没有 DNS 工作的情况下让服务器工作,但客户端将无法通过 IP 以外的方式访问服务器,这将生成警告,因为证书无法验证 IP。

更新:听起来您现在已经完成了所有操作。如果还有其他问题,您可以在设置 DNS 后解决。

相关内容