2015-01-27 2 views
1

저는 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); 
+0

클라이언트 인증서 인증을 사용하려고합니다 (따라서 클라이언트의 공용 및 개인 키가 PEM에 있어야 함) 또는 서버 인증서의 유효성을 검사하려고합니까 (서버의 공용 인증서가 PEM에 있어야 함). 클라이언트 인증서 인증을위한 옵션을 설정하는 것처럼 보이지만 PEM 파일에는 개인 키가없는 공개 키만 제공됩니다. –

+0

답변을 주셔서 감사합니다 한스 Z. 나는 내게 자신의 서버에 자신을 인증하기 위해 서버 관리자가 제공 한 인증서를 사용하고 있습니다. 나는 그것이 서버에 자신을 인증하는 방법으로 클라이언트 인증서 인증을 사용하려고 노력 중이므로 메시지를 게시 할 수 있음을 의미한다고 생각합니다. 내가 개인 키도 포함해야한다고 생각합니다. – mba12

+0

예, PKI를 사용하여 인증하려면 개인 키가 필요합니다. –

답변

2

가 보이는 : 여기

내 PHP 스크립트의 핵심입니다. 개인 키도 필요합니다.