2014-10-16 13 views
6

Hiện đang cố đọc .pem khóa công khai để xác minh thông qua openssl.openssl_verify(): thông số khóa được cung cấp không thể bị ép buộc vào khóa công khai cho tệp .pem

/** 
* Check whether the signed message sent back by the server is 
* correct or not. 
*/ 
function check($str, $MAC) 
{ 
    $fp = fopen(
     dirname(__FILE__) . '/rsa_public_key.pem', 
     'r' 
    ); 

    $cert = fread($fp, 8192); 

    fclose($fp); 

    $pubkeyid = openssl_get_publickey($cert); 

    return openssl_verify($str, $MAC, $pubkeyid); 
} 

Với những gì đã nói, sau khi thực hiện kịch bản của tôi, tôi nhận được lỗi này:

openssl_verify(): supplied key param cannot be coerced into a public key in some/path at line X

Ban đầu, tôi đã viết chức năng này để chấp nhận .cer xác nhận. Dưới đây là giải thích về sự khác biệt giữa tất cả các số different key formats này. Theo hiểu biết của tôi, .pem tương tự như .cer, tuy nhiên, tôi không thể cho cuộc sống của tôi tìm ra cách cho phép tập lệnh của tôi đọc tệp .pem của tôi.

Câu hỏi của tôi là - tôi cần phải làm gì để chức năng đọc khóa chung này?

EDIT: Khi một số Googling, tôi đã thử sử dụng file_get_contents() cho một đường dẫn cụ thể nhưng tôi sẽ nhận được cùng một lỗi.

Điều gì có thể gây ra lỗi này?

Trả lời

4

Khi mở tệp .pem này, tất cả chỉ là một dòng. Nó xuất hiện mỗi dòng yêu cầu độ dài 64 ký tự, vì vậy tôi đảm bảo mỗi dòng là 64 dòng và nó được phân tích cú pháp thành công. Không có gì để làm với .cer.

+0

Bạn có nghĩa là bạn đã đảm bảo mỗi dòng là 64 ký tự? – Lamy

+0

Mỗi dòng của khối Base64, tôi đoán, không phải dòng đầu trang/chân trang. –

+0

@ theGreenCabbage, câu trả lời sẽ có nhiều giá trị hơn với mã trong đó. – Eugene

2

Ngoài ra, các dòng -----BEGIN PUBLIC KEY----------END PUBLIC KEY----- phải chứa chính xác năm dấu gạch ngang ở mỗi bên. Không nhiều không ít.

Có thể có hoặc không có dòng mới ở cuối dòng cuối cùng.

Kết thúc dòng Windows (CR/LF) được cho phép, ngay cả trên PHP được lưu trữ trên nix.

Các vấn đề liên quan