Форум сайта python.su
xp
python 3.4
openssl который внутри пайтона OpenSSL 1.0.1l 15 Jan 2015
А на хр стоит openssl 1.1.0j
Крипто про CSP 4.0.9975 Версия ядра СКЗИ 4.0.9021 КС1
Добрый день. Кто нибудь работает в python в связке с крипто про? Точнее есть кто делает защищенные соединения по гостовскому шифрованию на windows? Хочу достучать до сайта мдлп честного знака по api защищенному соединению и пока не удается. Или может нужна библиотека для связи с крипто про типа cryptoprosdk но не могу установить.
Вот пример ошибки:
self._sslobj.do_handshake()
ssl.SSLError: sslv3 alert handshake failure (_ssl.c:600)
Да понимаю что который на компе openssl стоит и там нет гостовского шифрования.В конфиге прописывал типа путь к библиотеке gostengy.dll версия 4.0.410.54443 скачанный с инета.После запуска openssl проверил cliphers не вижу гостовского шифрования.
Примерно такой код.
def http(url, secure=443, encoding='utf-8'): components = urllib.parse.urlsplit(url) print(components) path = '%s' % components.path if components.path else '/' HTTPS = (components.scheme == 'https') addr = components.hostname port = secure if HTTPS else 80 CRLF = '\r\n\r\n' print(HTTPS) print(addr) print(port) Page = namedtuple('Page', ('code', 'headers', 'body')) print(Page) def handshake(sock): # this will trigger the handshake # if sock is already connected new_sock = ssl.wrap_socket(sock, ciphers="GOST2012-GOST8912-GOST8912:HIGH", ssl_version=ssl.PROTOCOL_TLSv1, cert_reqs=ssl.CERT_REQUIRED, # I will verify your certificate ca_certs=certifi.where(), # using a list of trusted CA's certificates server_side=False, do_handshake_on_connect = True, certfile= None, keyfile= None ) return new_sock def make_header(): headers = [ 'Content-Type:application/json', 'Accept:application/json', 'Authorization: token %s' % token, 'POST %s HTTP/1.1' % (path), 'Host: %s' % addr, 'Charset: %s' % encoding ] print(headers) header = '\n'.join(headers) header += CRLF return bytes(header, encoding=encoding) def parse_response(resp): ''' resp http.client.HTTPResponse, not closed ''' resp.begin() code = resp.getcode() # assume status 200 headers = dict(resp.getheaders()) def get_charset(): ctt_type = headers.get('Content-Type') return cgi.parse_header(ctt_type)[1].get('charset', encoding) body = resp.read() body = str(body, encoding=get_charset()) return Page(code, headers, body) def request(header): sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM) sock.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1) print(addr) HOST = socket.getaddrinfo(addr, 443)[0][4][0] print(HOST) sock.connect((addr, port)) try: if HTTPS: sock = handshake(sock) sock.sendall(header) # receive it resp = HTTPResponse(sock) return parse_response(resp) finally: sock.shutdown(1) sock.close() return request(make_header()) url = "https://api.mdlp.crpt.ru/api/v1/reestr/sgtin/sgtins-by-list" rrr=http(url) print(rrr)
Офлайн