저는 curl을 사용하여 PHP에 비교적 익숙하며 온 전성 검사 질문을하고 싶습니다.인증서가있는 php curl과 키 파일이나 암호 문구가 없습니다.
서버 관리자가 제공 한 DER 형식의 인증서가있는 https 서버에 xml 파일을 게시하려고합니다. 나는 또한 성공적으로 DER 파일을 ascii PEM 형식으로 변환했으며 본질적으로 동일한 오류를 받고있다.
With PEM format:
* unable to use client certificate (no key found or wrong pass phrase?)
With DER format:
cURL Error (58): unable to set private key file:
With DER I use: CURLOPT_SSLCERTTYPE => "DER"
필자의 연구에 따르면 PHP 컬은 PEM 형식의 키 파일이나 적어도 통과 문구가 필요하다. 서버 관리자는 저에게 하나 또는 다른 것을 제공해야합니다.
나는를 CentOS에 오래된 컬 문제와 일부 리눅스 박스 알고 및 최신 버전으로 컬 업그레이드 한 내 CER 및 PEM 파일에 대한 curl 7.40.0 (x86_64-redhat-linux-gnu) libcurl/7.40.0 OpenSSL/1.0.1e zlib/1.2.3 c-ares/1.10.0 libidn/1.18 libssh2/1.4.3
권한이
r--r--r--
내가 해결 오전 누락 된 키 또는 DER 또는 PEM 인증서 만있는 https 서버에 게시 할 수있는 방법이 있습니까? 어떤 통찰력이라도 대단히 감사합니다. 당신이 클라이언트 인증서 인증에 대한 옵션을 설정할 수 있지만 그것의 공개 키, 아니 개인 키와 PEM 파일을 제공 같은
$ch = curl_init();
$options = array(
CURLOPT_POST => 1,
CURLOPT_HTTPHEADER => ['Content-Type:', 'text/xml'],
CURLOPT_POSTFIELDS => $testorder,
CURLOPT_RETURNTRANSFER => 1,
CURLOPT_SSLCERTTYPE => "DER", // commented out for PEM version
CURLOPT_RETURNTRANSFER => true,
CURLOPT_HEADER => true,
CURLOPT_FOLLOWLOCATION => true,
CURLOPT_SSL_VERIFYHOST => false,
CURLOPT_SSL_VERIFYPEER => false,
CURLOPT_USERAGENT => 'Mozilla/4.0 (compatible; MSIE 5.01; Windows NT 5.0)',
CURLOPT_VERBOSE => true,
CURLOPT_URL => $url,
CURLOPT_SSLCERT => $cert_file,
);
curl_setopt_array($ch , $options);
$output = curl_exec($ch);
클라이언트 인증서 인증을 사용하려고합니다 (따라서 클라이언트의 공용 및 개인 키가 PEM에 있어야 함) 또는 서버 인증서의 유효성을 검사하려고합니까 (서버의 공용 인증서가 PEM에 있어야 함). 클라이언트 인증서 인증을위한 옵션을 설정하는 것처럼 보이지만 PEM 파일에는 개인 키가없는 공개 키만 제공됩니다. –
답변을 주셔서 감사합니다 한스 Z. 나는 내게 자신의 서버에 자신을 인증하기 위해 서버 관리자가 제공 한 인증서를 사용하고 있습니다. 나는 그것이 서버에 자신을 인증하는 방법으로 클라이언트 인증서 인증을 사용하려고 노력 중이므로 메시지를 게시 할 수 있음을 의미한다고 생각합니다. 내가 개인 키도 포함해야한다고 생각합니다. – mba12
예, PKI를 사용하여 인증하려면 개인 키가 필요합니다. –