2015-05-19 3 views
1

Получить строку с веб-страницы, как этоКак декодировать CSR с помощью pyOpenssl

-----BEGIN NEW CERTIFICATE REQUEST----- 
MIIDPzCCAqgCAQAwZDELMAkGA1UEBhMCQ04xCzAJBgNVBAgTAmJqMQswCQYDVQQH 
EwJiajERMA8GA1UEChMIbXhjei5uZXQxETAPBgNVBAsTCG14Y3oubmV0MRUwEwYD 
VQQDEwx3d3cubXhjei5uZXQwgZ8wDQYJKoZIhvcNAQEBBQADgY0AMIGJAoGBAMQ7 
an4v6pHRusBA0prMWXMWJCXY1AO1H0X8pvZj96T5GWg++JPCQE9guPgGwlD02U0B 
NDoEABeD1fwyKZ+JV5UFiOeSjO5sWrzIupdMI7hf34UaPNxHo6r4bLYEykw/Rnmb 
GKnNcD4QlPkypE+mLR4p0bnHZhe3lOlNtgd6NpXbAgMBAAGgggGZMBoGCisGAQQB 
gjcNAgMxDBYKNS4yLjM3OTAuMjB7BgorBgEEAYI3AgEOMW0wazAOBgNVHQ8BAf8E 
BAMCBPAwRAYJKoZIhvcNAQkPBDcwNTAOBggqhkiG9w0DAgICAIAwDgYIKoZIhvcN 
AwQCAgCAMAcGBSsOAwIHMAoGCCqGSIb3DQMHMBMGA1UdJQQMMAoGCCsGAQUFBwMB 
MIH9BgorBgEEAYI3DQICMYHuMIHrAgEBHloATQBpAGMAcgBvAHMAbwBmAHQAIABS 
AFMAQQAgAFMAQwBoAGEAbgBuAGUAbAAgAEMAcgB5AHAAdABvAGcAcgBhAHAAaABp 
AGMAIABQAHIAbwB2AGkAZABlAHIDgYkAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA 
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA 
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA 
AAAAAAAAAAAAAAAAAAAAADANBgkqhkiG9w0BAQUFAAOBgQBIKHVhHb9FZdVLV4VZ 
9DK4aBSuYY//jlIpvsfMIdHXfAsuan7w7PH87asp1wdb6lD9snvLZix1UGK7VQg6 
wUFYNlMqJh1m7ITVvzhjdnx7EzCKkBXSxEom4mwbvSNvzqOKAWsDE0gvHQ9aCSby 
NFBQQMoW94LqrG/kuIQtjwVdZA== 
-----END NEW CERTIFICATE REQUEST----- 

Как декодировать его PLAINTEXT как

Certificate information 
Common name: www.xxx.net 
Organization:xxx.net 
Organizational unit:xxx.net 
City/locality:bj 
State/province:bj 
Country:CN 
Signature algorithm:SHA1 
Key algorithm:RSA 
Key size:1024 

Я знаю, что есть pyopenssl третья сторона, но не как обрабатывать строковый буфер из веб-интерфейса. Или у вас есть идея? Спасибо

ответ

3

Вы можете загрузить сертификат с помощью OpenSSL.crypto.load_certificate_request(), а затем получить доступ к информации о ключах и предметах, например.

import OpenSSL.crypto 
from OpenSSL.crypto import load_certificate_request, FILETYPE_PEM 

csr = '''-----BEGIN NEW CERTIFICATE REQUEST----- 
MIIDPzCCAqgCAQAwZDELMAkGA1UEBhMCQ04xCzAJBgNVBAgTAmJqMQswCQYDVQQH 
EwJiajERMA8GA1UEChMIbXhjei5uZXQxETAPBgNVBAsTCG14Y3oubmV0MRUwEwYD 
VQQDEwx3d3cubXhjei5uZXQwgZ8wDQYJKoZIhvcNAQEBBQADgY0AMIGJAoGBAMQ7 
an4v6pHRusBA0prMWXMWJCXY1AO1H0X8pvZj96T5GWg++JPCQE9guPgGwlD02U0B 
NDoEABeD1fwyKZ+JV5UFiOeSjO5sWrzIupdMI7hf34UaPNxHo6r4bLYEykw/Rnmb 
GKnNcD4QlPkypE+mLR4p0bnHZhe3lOlNtgd6NpXbAgMBAAGgggGZMBoGCisGAQQB 
gjcNAgMxDBYKNS4yLjM3OTAuMjB7BgorBgEEAYI3AgEOMW0wazAOBgNVHQ8BAf8E 
BAMCBPAwRAYJKoZIhvcNAQkPBDcwNTAOBggqhkiG9w0DAgICAIAwDgYIKoZIhvcN 
AwQCAgCAMAcGBSsOAwIHMAoGCCqGSIb3DQMHMBMGA1UdJQQMMAoGCCsGAQUFBwMB 
MIH9BgorBgEEAYI3DQICMYHuMIHrAgEBHloATQBpAGMAcgBvAHMAbwBmAHQAIABS 
AFMAQQAgAFMAQwBoAGEAbgBuAGUAbAAgAEMAcgB5AHAAdABvAGcAcgBhAHAAaABp 
AGMAIABQAHIAbwB2AGkAZABlAHIDgYkAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA 
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA 
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA 
AAAAAAAAAAAAAAAAAAAAADANBgkqhkiG9w0BAQUFAAOBgQBIKHVhHb9FZdVLV4VZ 
9DK4aBSuYY//jlIpvsfMIdHXfAsuan7w7PH87asp1wdb6lD9snvLZix1UGK7VQg6 
wUFYNlMqJh1m7ITVvzhjdnx7EzCKkBXSxEom4mwbvSNvzqOKAWsDE0gvHQ9aCSby 
NFBQQMoW94LqrG/kuIQtjwVdZA== 
-----END NEW CERTIFICATE REQUEST-----''' 

req = load_certificate_request(FILETYPE_PEM, csr) 
key = req.get_pubkey() 
key_type = 'RSA' if key.type() == OpenSSL.crypto.TYPE_RSA else 'DSA' 
subject = req.get_subject() 
components = dict(subject.get_components()) 
print "Common name:", components['CN'] 
print "Organisation:", components['O'] 
print "Orgainistional unit", components['OU'] 
print "City/locality:", components['L'] 
print "State/province:", components['ST'] 
print "Country:", components['C'] 
print "Signature algorithm:", '?' 
print "Key algorithm:", key_type 
print "Key size:", key.bits() 

К сожалению, я не знаю, как получить алгоритм подписи.

+0

Да, это работает для меня. спасибо, в то время как размер ключа здесь кажется неправильным. – Kent

+0

@ kent: это хорошо. Я думаю, что размер ключа правильный, это то же самое, что указано в 'openssl req -text mhawke

+0

yep, используя команду openssl req, размер ключа - 1024 бит , запустив key.bit через pyopenssl, открытый ключ 2048 бит. – Kent

Смежные вопросы