Apache:SSLCertificateKeyFile:文件不存在或为空


33

我正在为配置SSL Apache 2。我的系统是Ubuntu Server 10.04 LTS。我的vhost配置中具有与SSL相关的以下设置:

SSLEngine On
SSLCertificateKeyFile /etc/ssl/private/server.insecure.key
SSLCertificateFile    /etc/ssl/certs/portal.selfsigned.crt

(旁注:我正在使用.insecure密钥文件,因为该文件没有密码短语保护,并且我想清楚地看到它是不安全的密钥文件)

因此,当我重新启动apache时,我收到以下消息:

Syntax error on line 39 of /etc/apache2/sites-enabled/500-portal-https:
SSLCertificateKeyFile: file '/etc/ssl/private/server.insecure.key' does not exist or is empty
Error in syntax. Not restarting.

但是文件在那里,并且不为空(实际上它包含一个私钥):

sudo ls -l /etc/ssl/private/server.insecure.key
-rw-r----- 1 root www-data 887 2012-08-07 15:14 /etc/ssl/private/server.insecure.key
sudo ls -ld /etc/ssl/private/
drwx--x--- 2 root www-data 4096 2012-08-07 13:02 /etc/ssl/private/

我尝试使用两个组www-data和ssl-cert更改所有权。我不确定在Ubuntu中哪个是正确的:默认情况下,Ubuntu使用ssl-cert,但是另一方面,apache进程使用用户www-data运行:它是由root用户启动的,但是在某些情况下更改为www-data点,我不确定何时读取证书。

但是无论如何,改变小组负责人并没有改善这种情况。我的问题是:

  1. 我还能尝试什么来使它正常工作?
  2. 如何验证我的密钥文件是有效的密钥文件?
  3. 如何验证密钥文件和证书(/etc/ssl/certs/portal.selfsigned.crt)一起工作?

我认为Apache给出了一个误导性的错误消息,我想指出该错误。


您好,您可以将此问题标记为已回答吗?

2
我应该指出,我从运行service apache2 restart而不是**sudo** service apache2 restart... 的基本错误中得到了此错误消息:自我注意:sudo make me a sandwich fool
icc97 2014年

我发现以下文章非常有帮助。我无法通过该线程设置系统。digitalocean.com/community/tutorials/...
莱奥列奥波尔德·赫兹준 영

Answers:


37

我发现了错误。这是因为我使用脚本来设置证书,而我正在执行的步骤之一是apache2ctl configtest。错误是来自此命令的,而不是来自Apache重新启动的,这是误导我的原因。由于我以普通用户身份运行apache2ctl命令,因此它无法访问密钥文件,因此也无法访问错误消息。

缺省:确保所有apache命令都使用sudo运行,即使仅用于语法验证(apache2ctl)的命令也是如此,因为它们还需要访问密钥。


8

我也收到消息

SSLCertificateKeyFile: file '/path/to/file' does not exist or is empty

同时/path/to/file存在并具有正确的权限,只是因为SELinux的的开启和该文件是为unaccessable apache用户。

看起来像这样:

$ sudo ls -laZ /etc/pki/tls/certs/
drwxr-xr-x. root root system_u:object_r:cert_t:s0      .
drwxr-xr-x. root root system_u:object_r:cert_t:s0      ..
-rw-------. root root unconfined_u:object_r:cert_t:s0  this-one-works.crt
-rw-------. root root unconfined_u:object_r:admin_home_t:s0 this-one-is-unaccessable.crt

为了解决这个问题,我运行sudo restorecon -Rv /etc/pki/tls/certs/-它会修复问题文件的SELinux属性。


它为我提供了不是在该服务器上生成但从其他来源上传的证书的帮助
tymik 2015年

2
sudo: restorecon: command not found
弗朗西斯科·科拉莱斯·莫拉莱斯

@FranciscoCorralesMorales restoreconpolicycoreutils软件包的一部分。另外,您可能根本没有SELinux?
AntonioK

6

我已经做到了,它对CentOS 5.7有所帮助

server:~ # chcon -t cert_t /etc/pki/tls/private/my.key 
server:~ # ls -laZ /etc/pki/tls/private/

1

我收到了类似的消息:

SSLCertificateChainFile: file '/opt/bitnami/apache2/conf/DigiCertCA.crt\xe2\x80\x9d' does not exist or is empty

我的问题是我使用的文本编辑器放置了一个“右引号” ASCII 148,而不是一个普通的双引号ASCII 34。使用unix类型的编辑器(例如TextWrangler)在右引号中解决该问题。


0

权限是错误的,但是根据您的回答,这不是问题的原因:

drwx--x--- 2 root www-data 4096 2012-08-07 13:02 /etc/ssl/private/

/ etc / ssl / private通常在基于debian的系统上属于ssl-cert组。

刚注意到0710烫发,不知道它可以用来做什么。


您可能是正确的,应该至少为0750。我一直在尝试不同的方法,并且我发布的状态可能不是最正确的状态。以root身份运行apache2ctl肯定可以解决我的问题。
dangonfast 2012年

1
0710很好,您需要知道文件名才能访问它。
ypnos
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.