我正在尝试让 SSL 在我的 apache 网络服务器上运行。
我还没有域设置的 DNS,这是个问题吗?
如何在我的网络服务器上设置 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 将起作用?
我不能在这里投票或发表评论,但 Adrian Perez 是对的,您使用的不是证书,而是证书签名请求,在这一行:
CSR 需要发送到证书颁发机构以验证您的身份并生成证书。您可以使用以下命令自行生成:
并改变:
至:
但是当您在浏览器中访问该站点时,您会收到警告,因为这是一个自签名证书,因此不受信任。尽管如此,这仍然是让您了解流程并测试网站是否正常运行的好方法。基本步骤是:
关于权限,确保 key/crt 只能由 root (chmod 600) 读取/写入,否则 Apache 会抱怨。
希望这可以帮助
似乎您的证书文件不可读(或丢失)
[Thu Jun 28 15:01:02 2012] [error] Init: Unable to read server certificate from file /etc/apache2/ssl/www.example.com.csr
您是否检查过权限/路径?
此外,必须设置 dns,否则证书会显示一些错误(取决于浏览器)
您可以下载一个名为Keystore Explorer的 Java 程序来打开并查看证书以验证其是否有效。Apache 的问题是证书需要采用特定格式。 This website might help explain the format you need,这似乎是 PEM 。
也许我错了,但请检查文件 www.example.com.csr 是否包含证书。通常带有 csr 扩展名的文件包含要在 CA 中签名的请求。
另外,您可以像另一个用户所说的那样检查权限和路径,但我认为问题出在文件中的内容上。
可以勾选删除文件并新建一个空白文件,将证书数据粘贴到文件中。
问候!
在拥有实际证书之前,您无法设置 SSL。您所拥有的是对证书的请求,该请求应发送给证书颁发机构以让他们颁发证书。此外,虽然您可以让服务器在没有 DNS 工作的情况下工作,但客户端将无法访问服务器,除非通过 IP,这将生成警告,因为证书无法验证 IP。
更新:听起来你现在已经完成了所有事情。如果还有任何其他问题,您可以在设置 DNS 后解决它们。