我正在尝试让我的 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
但是,当您在浏览器中访问该网站时,您会收到警告,因为这是一个自签名证书,因此不受信任。不过,这仍然是了解流程并测试网站是否正常运行的好方法。基本步骤如下:
- 生成私钥文件(只需执行一次,即第一次设置站点时)
- 生成证书签名请求
- 向证书颁发机构支付大量资金来验证和颁发证书(Thwate 或类似机构)
- 将密钥放在服务器上。
关于权限,请确保密钥/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
答案4
您必须拥有实际证书才能设置 SSL。您拥有的只是一份证书请求,该请求应发送给证书颁发机构,以便他们颁发证书。此外,虽然您可以在没有 DNS 工作的情况下让服务器工作,但客户端将无法通过 IP 以外的方式访问服务器,这将生成警告,因为证书无法验证 IP。
更新:听起来您现在已经完成了所有操作。如果还有其他问题,您可以在设置 DNS 后解决。