2016-10-29 81 views
1

我創造了我的SSH密鑰accordingly的OpenSSL無法加載證書後端

ssh-keygen -t rsa -C "[email protected]" 

這會給我的兩個文件:

myKey.key.pub 
myKey.key 

然後轉換爲PEM格式我運行command

ssh-keygen -f myKey.key.pub -e -m pem > myKey.pem 

myKey.pem是要爲後端提供的文件C program

不過,我一直堅持的類似error

unable to load certificate 
140387178489504:error:0906D06C:PEM routines:PEM_read_bio:no start  
line:pem_lib.c:703:Expecting: TRUSTED CERTIFICATE 

所以,我也跟着steps

openssl rsa -text -in file.key -inform DER 
openssl pkcs8 -in file.key -inform der 

我也查了一些其他commentssuggestions。但問題仍然存在:

error:0D0680A8:ASN1 encoding routines:ASN1CHECK_TLEN:wrong tag:tasn_dec.c:1338 
error:0D07803A:ASN1 encoding routines:ASN1CHECK_ITEM_EX_D2I:nested asn1 error:tasn_dec.c:390:Type=X509_SIG 

此證書將與後端一起使用。或者獲取文件pem的方法是實際創建並手動編輯它?如果是這樣,那麼certificate部分來自哪裏?

有什麼建議可能是我的錯誤?所有意見都非常歡迎:)

+2

SSH key!= SSL證書。你想達到什麼目的? – Jakuje

+0

Hi @Jakuje!我用過:我用過:ssh-keygen -f myKey.key.pub -e -m pem> myKey.pem。那麼應該用什麼作爲證書?非常感謝你。 –

+1

要獲得SSL/TLS證書,您需要使用_private_密鑰(並且在您的情況下以及許多但不是所有其他OpenSSH _private_密鑰文件與OpenSSL兼容)來生成_Certificate簽名請求_ aka CSR並將CSR提交至證書管理局又名CA獲得證書。如果你想讓陌生人信任你的服務器,你需要使用像Verisign,GoDaddy,LetsEncrypt等公共CA.如果只有你或者你認識你的人喜歡朋友/同事,你可以使用openssl創建你自己的ad-hoc CA ,甚至是自簽名證書(無CA)。 –

回答

2

當密鑰受密碼保護時可能會發生這種情況。

你必須解密

$ OpenSSL的RSA -in protected.key退房手續unprotected.key

然後,你必須創建一個新的.pem文件

$貓unprotected.key yourcert .crt> yourcert.pem

我也建議你檢查你的密鑰和證書文件的行尾(openssl不喜歡Windows的)和BOM標記。

請確保您的證書是Windows的「兼容」,最重要的是它沒有^ M中的每一行

如果你打開它的結束會是這樣的:

- ---- BEGIN CERTIFICATE -----^M MIIDITCCAoqgAwIBAgIQL9 + 89q6RUm0PmqPfQDQ + mjANBgkqhkiG9w0BAQUFADBM^M

爲了解決 「本」 與寫入或記事本++打開它,並把它轉換到Windows的 「風格」

+0

嗨克里斯塔洛!非常感謝您的意見。請檢查我更新的問題。要創建pem文件,我使用了:ssh-keygen -f myKey.key.pub -e -m pem> myKey.pem。還有什麼遺漏?謝謝! –

+1

OpenSSL沒有任何類型的PEM中的空行結束符(CRLF),或者確實可以找到任何類型的空白符。它在BOM(通常)或UTF-16(總是)方面確實存在問題,但由於PEM設計只是ASCII,所以不需要它們,大多數Windows程序不會將其添加到不需要的地方。 –

+0

@ dave_thompson_085。謝謝你的評論。我在Linux上。不是Windows。 –