2012-03-31 86 views
2

我在調試需要使用公鑰來簽署證書的django/python應用程序時遇到困難。 1.我使用下面的命令無法加載公鑰

openssl rsa -pubout -in ~/.ssh/id_rsa > samplePEMKey.pub 

的關鍵是下面

-----BEGIN PUBLIC KEY----- 
MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA8K/LfOBi+QrINSseqWwc 
JGo4uE49Dc42zF2Jwbmc6iXIln8AWX5M+yn15dYOXzbHGbopH8bpF9CsJ/DPHg87 
D1At1XwAy5aR5w7pXE//5p/saW50Sm/eY6Nugs9hgAXUTcMMAEXCIG17dLoUzhwE 
YdzuPm350h39bTmI7Fz95koTbsKJUi+6337GJ3cWKxMBkEmWvpGo4Nko01xtEnUZ 
GweKexr1roE8jZPpzuNeUy+S5tvH5emyBIBdroBVxBtz1OUIoP0oAOrQ5RtRPAcT 
TsSWjMtyF2gO5GxeMErRqnLAtWJs4QlaJacVnMMTAgRjrGkUZdsqngM/fjQXfeZV 
SwIDAQAB 
-----END PUBLIC KEY----- 

給我在Python應用程序我使用OpenSSL和嘗試加載所創建的PEM格式的鑰匙從我的私有密鑰鍵使用

pkey = crypto.load_privatekey(crypto.FILETYPE_PEM, samplePEMKey) 

當運行django應用程序時,我在上面的行得到以下錯誤。

Request Method:  POST 
Request URL: http://127.0.0.1:8000/snapshotuploader/single/ 
Django Version:  1.3.1 
Exception Type:  Error 
Exception Value:  

[('PEM routines', 'PEM_read_bio', 'no start line')] 

以下是我從文件

file_path = '/home/XXXX/co/certserver/LicenseServer/home_folder/dldl/samplePEMKey.pub' 
try: 
    fin = open(file_path, 'r') 
except IOError: 
    return HttpResponse('IO Error opening uploaded file.') 
try: 
    samplePEMKey = fin.read() 
    fin.close() 
except IOError: 
    return HttpResponse('IO Error reading uploaded file.') 

閱讀公鑰欣賞解決這個問題的任何幫助。提前致謝。

+0

至少'Crypto.Cipher.RSA.importKey( )'用你提供的密鑰與pycrypto-2.5一起工作,所以密鑰本身應該沒有問題。你如何讀取'samplePEMKey'變量的關鍵字? – Kimvais 2012-03-31 06:45:52

+0

FILE_PATH = '/home/XXXX/co/certserver/LicenseServer/home_folders/dldl/samplePEMKey.pub' \t 打印pubKeyFile 嘗試: 鰭=開放(FILE_PATH, 'R') 除了IO錯誤: 返回的HttpResponse( 'IO錯誤打開上傳的文件。') 嘗試: PUBKEY = fin.read() fin.close() 除了IO錯誤: 返回的HttpResponse( 'IO讀取錯誤上傳文件。') – 2012-03-31 07:01:01

+0

請編輯您的問題添加相關的代碼 - 也''pubKey'!='samplePEMKey' – Kimvais 2012-03-31 07:10:09

回答

1

一段時間以後才發現它,但你想讀一個私人關鍵方法的公共關鍵。如果您想使用load_privatekey,則應使用原始id_rsa作爲輸入。

我不記得怎麼做同樣的OpenSSL.crypto,但至少與pycrypto工具箱的RSA實現您的樣本關鍵進口就好:

>>> kt = open("samplePEMKey.pub").read() 
>>> from Crypto.PublicKey import RSA 
>>> key = RSA.import_key(kt) 
>>> key 
<_RSAobj @0x109916d40 n(2048),e> 
+0

太棒了。謝謝。我想使用samplePEMKey,它是從id_rsa生成的公共PEM密鑰來簽署X509請求。我想將樣本公開從一個從文件中讀取的字符串轉換爲在簽名X509請求時將被接受的格式。你能指出我使用的功能嗎? – 2012-03-31 07:43:52

+0

我需要使用OpenSSL.crypto – 2012-03-31 09:32:13