我的中间层正在使用 Apache/PHP/Symphony 进行身份验证和路由。请求在 http 上通过,然后如果请求验证发出请求的人被授权,则通过 https 调用后端 Web 服务。后端 Web 服务通过 https 使用自签名证书。我可以直接点击后端服务并通过 chrome inspector 查看我的证书信息。当我通过 url 直接向后端发出请求时,一切正常。当我尝试通过中间层时,我得到的响应是 504:
{"code":504,"message":"A network communication error has occurred","error":{"code":77,"message":"SSL: can\u0027t load CA certificate file \/etc\/pki\/tls\/certs\/ca-bundle.crt"}}
我生成的证书是为了:
/usr/local/jboss-eap-6.4/standalone/configuration/.keystore
使用命令:
keytool -genkey -keyalg RSA -alias jboss -keystore .keystore -storepass changeit -validity 9999 -keysize 2048
我还更新了我的 standalone.xml 以通过以下方式引用该文件:
<ssl name="ssl" key-alias="jboss" password="changeit" certificate-key-file="/usr/local/jboss-eap-6.4/standalone/configuration/.keystore" protocol="TLSv1" verify-client="false"/>
我的开发机器是 OSX。
看来 apache 或 symfony 正在寻找 /etc/pki/tls/certs/ca-bundle.cert
中的证书这是我的系统上不存在的文件。在 /etc/apache2/httpd.conf
中搜索“pki”没有结果。
如何设置 apache
/symfony2
信任这个证书,还是有不同的方式来更全面地信任这个证书?
最佳答案
创建 CA 证书捆绑文件
系统正在寻找 /etc/pki/tls/certs/ca-bundle.cert
这是 linux 上的标准路径,但不是 osx 上的。我们通过生成文件来解决这个问题。
我使用 keytool
生成了 .keystore
文件,并使用 jboss
作为我的别名。为了构建 ca bundle 文件,我们需要它是 pem 格式,所以我们需要将 -rfc 添加到我们的 export 语句中。以下是命令:
cd /usr/local/jboss-eap-6.4/standalone/configuration
keytool -export -alias jboss -file local-sbx.dev.yourcompany.com.crt -keystore .keystore -rfc
获得该文件后,您可以将其取出并验证文件中是否包含BEGIN CERTIFICATE
和END CERTIFICATE
内容。如果是这样,它的格式是正确的。
最后,创建目录结构,移动证书使其像 bundle 一样工作(这只是一堆相互附加的证书),然后重新启动 apache:
mkdir -p /etc/pki/tls/certs/
sudo cp local-sbx.dev.yourcompany.com.crt /etc/pki/tls/certs/ca-bundle.crt
sudo apachectl restart
注意:这是SSL: can't load CA certificate file /etc/pki/tls/certs/ca-bundle.crt的子问题因此,如果您仍然遇到问题,您可能还需要更新您的 PHP 设置...说明在提供的链接中。
关于php - 如何让 Apache 接受由 Java 的 KeyTool 制作的自签名证书,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36455876/