2015-08-26 65 views
1

我使用phpseclib創建了一個X509證書,所有這些似乎都很好。一旦我創建了證書,我使用與證書關聯的私鑰將其作爲pkcs12文件保存在PHP中。但是,一旦我讀取該文件,我找回的私鑰就不同了。鑰匙不應該一樣嗎?PKCS12文件和私鑰 - PHP

舉例來說,假設我打電話:

openssl_pkcs12_export_to_file($cert , $write_loc, $priv_key , $pass); 

偉大的作品,現在當我閱讀該文件:

openssl_pkcs12_read($write_loc, $certs, $pass); 

在$證書輸出[ 'p鍵']從不同$ priv_key我傳遞給上面的export_to_file方法。

當然他們必須是一樣的,還是我混合了2個完全不同的東西?

謝謝!

回答

2

我認爲,這是怎麼回事,在PHP RSA key creation

解釋基本上,您使用的是與-----BEGIN RSA PRIVATE KEY-----開頭的鍵,你取回鑰匙開始了與-----BEGIN PRIVATE KEY-----

前者是PKCS1格式的私鑰,後者是PKCS8格式的私鑰。後者具有嵌入在base64編碼數據本身內的私鑰類型,而前者具有嵌入在人可讀字符串中的私鑰類型。

某些PHP/OpenSSL版本輸出PKCS8密鑰,其他版本輸出PKCS1密鑰..

+0

您好,是的,您是對的。我昨天在看到http://stackoverflow.com/questions/20065304/what-is-the-differences-between-begin-rsa-private-key-and-begin-private-key並用phpseclib報廢了密鑰生成後發現了這個問題並去了PHP的openssl功能。即使我告訴phpseclib使用PKCS8,它也不會。我想這是一個與他們一起提出的錯誤。 –

+0

如果您使用的是最新版本,它可以正常工作。如果你不認爲這是我會跟你打賭的。通過PayPal $ 10.00表示它可以正常工作,並且您要麼使用不正確,要麼正在使用過期版本。 – neubert

+0

所以,如果你是對的,這是一個最新版本(1.0.0)的錯誤,我會支付你10美元,如果你錯了,你會支付我10美元。 – neubert