2012-04-12 50 views
2

我打開我的密鑰文件,它說這是錯誤的,我不知道爲什麼。當我用記事本打開時,我的鑰匙看起來很好。爲什麼它不工作,我這樣做是首次,所以請原諒我,如果這件事情很明顯..錯誤的私鑰 - 爲什麼它是錯誤的?

這是我讀它

// Reading private key 
$fp = fopen("certs/cert.pem", "r"); 
$priv_key = fread($fp, 8192); 
fclose($fp); 
$pkeyid = openssl_get_privatekey($priv_key); // Empty 

openssl_error_string()給我error:0906D06C:PEM routines:func(109):reason(108)

+2

你沒有錯誤檢查,看看你是否成功打開並從文件中讀取任何東西。 – 2012-04-12 14:18:52

+0

因爲我試圖打印'$ priv_key'並且確實打開了,所以我打開了它。 – sed 2012-04-12 14:19:54

+0

文件的內容是PEM格式的私鑰嗎? – 2012-04-12 14:24:49

回答

3

它看起來像你試圖從證書文件中獲取私鑰;私鑰沒有存儲在證書中,它被單獨存儲。你從哪裏得到證書?如果您自己生成CSR並稍後由CA簽名,則會爲您生成密鑰文件以及CSR。如果您使用openssl生成了CSR,但未指定其他選項,例如 openssl -req -new 該密鑰將位於名爲privkey.pem的文件中。它將由---- BEGIN RSA PRIVATE KEY ---進行分隔,並且內容受密碼保護(當您生成CSR時,系統會提示您輸入密碼)。

+0

是的,當我生成公鑰時,我確實生成了密鑰。謝謝。 – sed 2012-04-12 14:57:53

1

如何診斷OpenSSL的錯誤:

查看錯誤信息:

error:0906D06C:PEM routines:func(109):reason(108) 

就拿原因代碼(108),並確定錯誤:

grep 108 include/openssl/ssl.h 
#define SSL_F_GET_SERVER_FINISHED      108 
#define SSL_R_BAD_DH_G_LENGTH       108 
#define SSL_R_TLSV1_ALERT_INTERNAL_ERROR     1080 

現在谷歌SSL_R_BAD_DH_G_LENGTH

沒有太多的運氣。查看源代碼告訴我們這個錯誤是在

內觸發的
ssl3_get_key_exchange() in s3_clnt.c 

也許這會有所幫助。