Аутентификация клиента с использованием CAC (смарт-карты) с python M2Crypto - PullRequest
0 голосов
/ 20 мая 2019

Я пытаюсь использовать M2Crypto и urllib2 для связи с веб-сайтом, защищенным CAC (смарт-картой).Проведя некоторые исследования, я понимаю, что мне нужно предоставить клиентский сертификат и закрытый ключ с карты, а также сертификаты CA, которые я скачал онлайн.Я не могу понять, если я пропускаю шаг;не могу получить правильно аутентифицированное соединение.

import sys, os, time, cgi, urllib, urlparse
from M2Crypto import m2urllib2 as urllib2
from M2Crypto import m2, SSL, Engine

userPin = "SOMEPIN"
theurl = "https://www.example.com"

rootCertsPath = "/Path/to/folder/with/multiple/certfiles"

# load dynamic engine
e = Engine.load_dynamic_engine("pkcs11", "/usr/local/Cellar/engine_pkcs11/0.1.8/lib/engines/engine_pkcs11.so")
pk = Engine.Engine("pkcs11")
pk.ctrl_cmd_string("MODULE_PATH", "/usr/local/lib/opensc-pkcs11.so")
if len(userPin) > 0: pk.ctrl_cmd_string("PIN", userPin)
m2.engine_init(m2.engine_by_id("pkcs11")) 

# grab pkey and cert from smartcard
key = e.load_private_key("id_01")
cert = e.load_certificate("id_01")

# create context
ssl_context = SSL.Context("sslv23")
ssl_context.set_cipher_list("HIGH:!aNULL:!eNULL:@STRENGTH") 
ssl_context.set_session_id_ctx("foobar")
ret = ssl_context.load_verify_locations(capath=rootCertsPath)

m2.ssl_ctx_use_x509(ssl_context.ctx, cert.x509)
m2.ssl_ctx_use_pkey_privkey(ssl_context.ctx, key.pkey)

opener = urllib2.build_opener(ssl_context)
urllib2.install_opener(opener)

req = urllib2.Request(theurl)
res = urllib2.urlopen(req);

print res.read()
...