我在Linux Ubuntu 15.04 VM上运行Apache2。我创建了一个自签名的openssl证书。因此,我有以下文件夹结构: " usr / local / openssl",而这个目录包含以下主文件夹:bin;证书; LIB;私人的; openssl.conf; ...
在certs文件夹中,我创建了一个" zertifikat-pub.pem"文件,并在私人文件夹中" zertifikat-key.pem"文件。当试图运行"作曲家更新"要连接到在apache2上运行的存储库,我不断收到以下错误:
错误:14090086:SSL例程:SSL3_GET_SERVER_CERTIFICATE:证书验证失败 无法启用加密 无法打开流:操作失败
当运行" var_dump(openssl_get_cert_locations());"时,我得到以下内容:
从我所读过的内容来看,default_cert_file和default_cert_dir似乎存在严重错误,但我不知道如何更改它。
在php ini文件中,我添加了以下两行:
openssl.cafile=/usr/local/openssl/certs/ca.crt
openssl.capath=/usr/local/openssl/certs
此外,我更改了变量" SSL_CERT_FILE"和" SSL_CERT_DIR"像在php.ini中一样的路径。
在openssl.conf文件中,我设置了:
dir = /usr/local/openssl
在apache2中,虚拟主机文件(托管端口443编辑器的存储库正在尝试连接),我已添加:
# ssl
SSLEngine on
SSLCertificateFile /usr/local/openssl/certs/ca.crt
SSLCertificateKeyFile /usr/local/openssl/private/ca.key
重新启动apache和计算机等并不能解决错误。始终获得相同的证书失败错误。
我做错了什么? 奇怪的是,我可以在浏览器中访问该网站,但不能通过作曲家访问..
我是否需要将某些文件复制到我的Windows客户端,例如导入证书?目前,ca.crt和ca.key位于linux服务器上。我也尝试将ca.crt复制到windows并添加到windows上项目的composer.json文件中:
"options": {
"ssl": {
"local_cert": "C:/Users/Pb/Documents/ca.crt"
}
}
答案 0 :(得分:2)
创建自签名证书时。他们将由一个"证书颁发机构签署"证书。这也将在您的本地计算机上。
您的问题没有说明您如何创建自签名证书,但如果使用openssl,它可能有一个命令:
openssl ca -in apache.csr -cert /path/to/ca.crt -keyfile /path/to/ca.key -out apache.crt
在你的php.ini中,cafile需要指向ca certficate而不是apache one:
openssl.cafile=/path/to/ca.crt
在ssl协商期间发生的事情是,Web服务器会将apache.crt内容的变体发送给客户端(编写器),其中包括证书签名的详细信息 - 在本例中为ca.crt。客户端将此与它信任的证书列表(由openssl.cafile设置)进行比较。如果匹配并且各种加密校验和加起来则验证完成。如果没有匹配则不会。
.................. 回答后更新:
设置SSL托管时,您需要做一些事情。
Apache配置:
SSLCACertificateFile /path/to/ca.crt
SSLCertificateKeyFile /path/to/zertifikat-key
SSLCertificateFile /path/to/zertifikat-pub.pem
php config:
openssl.cafile=/path/to/ca.crt
如果文件的内容是正确的,那么我希望这可行。您还可以使用curl:
测试服务器配置curl https://yoursite.com/ --cacert /path/to/ca.crt