使用PHP 5.6和Composer的OpenSSL - 证书验证失败

时间:2015-12-11 22:09:34

标签: php apache openssl ssl-certificate composer-php

我在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());"时,我得到以下内容:

dump

从我所读过的内容来看,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"
            }
        }

1 个答案:

答案 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托管时,您需要做一些事情。

  1. 证书颁发机构 - 密钥和证书。这是客户端和服务器必须信任的。通常这些是通过网络浏览器等预先共享的公共列表预先设置供公众使用。但是可以创建和使用您自己的,这就是您正在做的事情。
  2. 特定于站点的证书。这必须由证书颁发机构签名并在服务器上配置。在Web托管时,证书的公用名必须与服务器的主机名匹配才能被视为有效。
  3. 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