我将解释这种情况。
简短版本是我收到了ssl证书,我需要将其包含在一些HTTP请求中。我还没有成功地做到这一点。
我使用Guzzle发出请求。
我已收到证书作为以
开头的字符串 -----BEGIN CERTIFICATE-----
以
结尾 -----END CERTIFICATE-----
。
首先,我并非100%确定,我该如何处理它才能准备好包含在请求中。我将其保存为mycert.crt
文件。正如Guzzle文档提到他们需要一个.pem文件,我研究了将.crt文件转换为.pem文件。找到this stackoverflow thread,尝试了两者并且它没有工作(顺便说一下.crt和.pem的内容是相同的)。让我解释一下,什么都行不通。
我做了一个
$client = new GuzzleHttp\Client(['base_uri' => 'https://theuri.com']);
$client->request('GET', 'getit', ['cert' => 'path/to/mycert.pem' ]);
结果是
[GuzzleHttp\Exception\ConnectException]
cURL error 35: error:14094410:SSL routines:SSL3_READ_BYTES:sslv3 alert handshake failure (see http://curl.haxx.se/libcurl/c/libcurl-errors.html)
当您在使用证书发出请求的整个过程中搞砸了某些内容时,我认为这是一个标准错误。
我还有private.key文件和request.csr,用于创建SSL密钥。现在不确定我是否必须对这些做任何事情。
我在网上找不到太多有用的信息。我发现的帖子或文章并没有从头到尾解释整个过程,所以我对我尝试的任何方法都没有信心。
编辑:
我发现我应该使用
$client->request('GET', '/getit', ['verify' => 'path/to/mycert.pem'])
它给了我例外
GuzzleHttp\Exception\ConnectException with message 'cURL error 35: SSL peer handshake failed, the server most likely requires a client certificate to connect (see http://curl.haxx.se/libcurl/c/libcurl-errors.html)'
如果我使用' cert',它说它无法加载证书及其私钥。我怀疑使用' cert'是要走的路。
答案 0 :(得分:2)
好的,我现在已经弄明白了。我以前没有任何证书经验。我在 OS X 上做了所有这些,但是你应该得到它。像钥匙串添加私钥这样的事情可能有所不同。
要做到这一点,您需要证书本身和私有密钥。在终端中,您可以使用openssl
命令执行此操作。完整的命令是
openssl pkcs12 -export -clcerts -inkey ~/private.key -in ~/certificate.crt -out MyCertPKCS12.p12 -name "Full Name"
现在您已经创建了一个文件MyCertPKCS12.p12,您必须将其添加到您的Keychain并包含http请求。该文件带有密码,一旦您运行此命令,将要求您输入密码。
打开Keychain Access并导入.p12文件。起初有一些信任问题,不得不手动设置哪些组件信任证书。为此,请打开Keychain Access。左上角是一个Keychains列表,选择System,您将在那里看到新添加的证书。双击它打开,您可以设置从那里信任该证书的内容。
首先,如果您需要执行简单的GET请求,您可以在浏览器中输入网址,然后系统会询问您是否允许使用证书。允许它并选择证书。现在一切都应该有效。如果没有,请输入错误消息。
使用证书执行GuzzleHttp请求如下:
$client = new GuzzleHttp\Client(['base_uri' => 'https://muchsecure.wow']);
$cert = "/path/to/MyCertPKCS12.p12";
$method = "GET"; //or whatever the method is
$response = $client->request($method, '/getinfo', ['cert' => [
$cert, 'epicpasswordISetForTheP12File'
]])
现在,您已向网址https://muchsecure.wow/getinfo提出了证书请求。
如果您还有其他问题,我乐意为您提供帮助。