Khi tôi tạo ra chuỗi private key với mã PHP sau (và cùng config-tham số), họ được bao bọc giữa các chuỗi khác nhau:Tại sao các chuỗi khóa riêng tư khác nhau trong Linux hoặc Windows?
$configs = array('config' => 'OpenSSL.cnf',
'digest_alg' => 'sha1',
'x509_extensions' => 'v3_ca',
'req_extensions' => 'v3_req',
'private_key_bits' => 2048,
'private_key_type' => OPENSSL_KEYTYPE_RSA,
'encrypt_key' => false,
'encrypt_key_cipher' => OPENSSL_CIPHER_3DES);
$privateKeyResourceId = openssl_pkey_new($this->configs);
openssl_pkey_export($privateKeyResourceId, $privateKeyString);
Trên Linux các $ privateKeyString trông như thế này:
----- BEGIN PRIVATE KEY ----- NBgkqhkiG9w0BAQE .... ASDFasjkfa ----- END PRIVATE KEY -----
Trên Windows các $ privateKeyString trông như thế này:
----- BEGIN RSA PRIVATE KEY ----- NBgkqhkiG9E .... ASDFasjkfa ----- END RSA PRIVATE KEY -----
Khi tôi sao chép Windows chuỗi khóa riêng cho Linux nó hoạt động cho đến khi tôi xóa 'RSA' từ đầu/cuối (cùng một hành vi ngược lại). Tại sao điều này?
OpenSSL hỗ trợ nhiều định dạng khóa riêng. Mã định danh tiêu đề PEM có định dạng đang được sử dụng. Mẫu đầu tiên có định dạng PKCS chuẩn và bao gồm mã định danh cho biết đó là khóa RSA. Định dạng thứ hai có định dạng RSA cụ thể và do đó không cần định danh đó. Định dạng mặc định thay đổi giữa PHP 5.2.9 và 5.3.3. –
Cảm ơn nhận xét. Điều này có nghĩa rằng nó không phải là một vấn đề hệ điều hành. Phải kiểm tra xem nó ra. – Mike
Nó chắc chắn không phải là một vấn đề hệ điều hành. Đó là một vấn đề về PHP. (Không bị hỏng, nó chỉ là nếu mã của bạn mong đợi một và nhận khác, ...) –