我有几台运行使用MacPorts安装的自定义AMP255(Apache 2.x,MySQL 5.x和PHP 5.x)堆栈的Mac OS X 10.6.8 Server Web服务器。 我们有很多Mac OS X Server服务器,通常通过服务器pipe理员安装SSL证书,他们只是在内置的服务中工作,但是,这些Web服务器一直都在非标准的位置安装了SSL证书并只用于Apache。
长话短说,我们试图通过服务器pipe理来标准化这部分pipe理并安装证书,但遇到了以下问题:当证书通过服务器pipe理员安装并在我们的Apacheconfiguration文件中引用时,Apache会提示尝试启动时input密码。 它似乎没有任何密码,我们知道,当然不是pipe理员或钥匙串密码! 我们已经将_www用户添加到了certusers (主要是为了确保他们有权访问/etc/certificates/的私钥)。
所以,在定制安装的证书中,我们有以下文件(基本上只是从我们购买我们的证书的公司中粘贴):
-rw-r--r-- 1 root admin 1395 Apr 10 11:22 *.domain.tld.ca -rw-r--r-- 1 root admin 1656 Apr 10 11:21 *.domain.tld.cert -rw-r--r-- 1 root admin 1680 Apr 10 11:22 *.domain.tld.key
并在/opt/local/apache2/conf/extra/httpd-ssl.conf中的VirtualHost /opt/local/apache2/conf/extra/httpd-ssl.conf :
SSLCertificateFile /path/to/certs/*.domain.tld.cert SSLCertificateKeyFile /path/to/certs/*.domain.tld.key SSLCACertificateFile /path/to/certs/*.domain.tld.ca
这个设置function正常。
如果我们使用Server Admin和Keychain Assistant显示为有效的Server Admin安装的证书,它们将安装在/etc/certificates/ ,如下所示:
-rw-r--r-- 1 root wheel 1655 Apr 9 13:44 *.domain.tld.SOMELONGHASH.cert.pem -rw-r--r-- 1 root wheel 4266 Apr 9 13:44 *.domain.tld.SOMELONGHASH.chain.pem -rw-r----- 1 root certusers 3406 Apr 9 13:44 *.domain.tld.SOMELONGHASH.concat.pem -rw-r----- 1 root certusers 1751 Apr 9 13:44 *.domain.tld.SOMELONGHASH.key.pem
如果我们将httpd-ssl.conf的上述行replace为以下内容:
SSLCertificateFile /etc/certificates/*.domain.tld.SOMELONGHASH.cert.pem SSLCertificateKeyFile /etc/certificates/*.domain.tld.SOMELONGHASH.key.pem SSLCertificateChainFile /etc/certificates/*.domain.tld.SOMELONGHASH.chain.pem
这会提示input未知的密码。 我也尝试httpd-ssl.confconfiguration如下:
SSLCertificateFile /etc/certificates/*.domain.tld.SOMELONGHASH.cert.pem SSLCertificateKeyFile /etc/certificates/*.domain.tld.SOMELONGHASH.key.pem SSLCertificateChainFile /etc/certificates/*.domain.tld.SOMELONGHASH.concat.pem
并作为:
SSLCertificateFile /etc/certificates/*.domain.tld.SOMELONGHASH.cert.pem SSLCertificateKeyFile /etc/certificates/*.domain.tld.SOMELONGHASH.key.pem SSLCACertificateFile /etc/certificates/*.domain.tld.SOMELONGHASH.chain.pem
我们已validation证书已configuration为允许所有应用程序访问它(在钥匙串助手中)。 /etc/certificates/*.domain.tld.SOMELONGHASH.key.pem文件的差异显示前者是encryption的,后者不是,所以我们假设服务器pipe理/钥匙串助理正在encryption他们出于某种原因。
我知道我可以创build一个未encryption的密钥文件,如下所示:
sudo openssl rsa -in /etc/certificates/*.domain.tld.SOMELONGHASH.key.pem -out /etc/certificates/*.domain.tld.SOMELONGHASH.key.no_password.pem
但是,我不能input密码。 我想也许我可以从Keychain Admin导出密钥的未encryption副本,但是我没有看到这样的选项(更不用说在所有导出选项中.pem选项都是灰色的)。
任何援助将不胜感激。
将证书导出为.p12 。 logging使用的密码。
将公钥从.p12文件中取出 – 它将提示input刚设置的密码。
openssl pkcs12 -in /path/to/exported/cert.p12 -out /etc/certificates/new.pem -nokeys
检查输出文件中现在有多less个证书; 您可以在任何文本编辑器中打开它 – 它可能只是主题证书,或者可能包含整个链(CA给予您的.ca文件中的证书)。 如果它包含整个链,那么很好 – Apache会在同一个文件中接受整个事情,而不会有问题。 如果没有,那么继续使用他们给你的链接文件。
那么,让我们拉私钥:
openssl pkcs12 -in /path/to/exported/cert.p12 -out /etc/certificates/new.key -nocerts -nodes
请注意, -nodes标志指示命令不使用私钥encryption; 这将阻止Apache提示input密码。
将Apache指向这些新文件,然后重新启动。 应该是好去!
正如Shane在评论中所暗示的那样,可以从Keychain Access(带或不带密码,自然密码保护这一步更安全)将其导出为PKCS#12( .p12 )文件。 为此,您必须首先以root用户身份启动“钥匙串访问”,以便sudo /Applications/Utilities/Keychain\ Access.app/Contents/MacOS/Keychain\ Access & 。 从那里我能够运行以下命令从导出的.p12文件中提取私钥而不encryption,并将其与encryption密钥放在/etc/certificates/ :
sudo openssl pkcs12 -in *.domain.tld.p12 -out /etc/certificates/*.domain.tld.SOMELONGHASH.key.no_password.pem -nodes -nocerts sudo chown root:certusers /etc/certificates/*.domain.tld.SOMELONGHASH.key.no_password.pem sudo chmod 640 /etc/certificates/*.domain.tld.SOMELONGHASH.key.no_password.pem
所以我现在在/etc/certificates/有以下文件:
-rw-r--r-- 1 root wheel 1655 Apr 9 13:44 *.domain.tld.SOMELONGHASH.cert.pem -rw-r--r-- 1 root wheel 4266 Apr 9 13:44 *.domain.tld.SOMELONGHASH.chain.pem -rw-r----- 1 root certusers 3406 Apr 9 13:44 *.domain.tld.SOMELONGHASH.concat.pem -rw-r----- 1 root certusers 1867 Apr 11 08:30 *.domain.tld.SOMELONGHASH.key.no_password.pem -rw-r----- 1 root certusers 1751 Apr 9 13:44 *.domain.tld.SOMELONGHASH.key.pem
我更新了我的httpd-ssl.conf文件:
SSLCertificateFile /etc/certificates/*.domain.tld.SOMELONGHASH.cert.pem SSLCertificateKeyFile /etc/certificates/*.domain.tld.SOMELONGHASH.key.no_password.pem SSLCertificateChainFile /etc/certificates/*.domain.tld.SOMELONGHASH.chain.pem
重新启动的Apache,它完美的工作。
我在最初的问题中掩盖了这部分内容,但为了确保将_www用户添加到certusers组(这是Apache保存这些权限所需的,以便读取私钥),我使用了下面的命令:
sudo dseditgroup -o edit -a _www -t user certusers