<p>aiohttp-Sitzung konnte dem SSL-Zertifikat nicht vertrauen</p>

Erstellt am 22. Sept. 2016  ·  5Kommentare  ·  Quelle: aio-libs/aiohttp

Um es kurz zu machen

Ich möchte https-Anfragen schnüffeln, aber mit dem sslError fehlgeschlagen

  1. Ich verwende Charles, um die https-Anfragen nach Sitzung von aiohttp zu schnüffeln.
  2. Ich habe dafür gesorgt, dass Schlüsselketten meinem Charles-Root-Zertifikat auf meinem Mac OSX vertrauen.
  3. Dann habe ich festgestellt, dass mein Chrome Charles vertraut, aber Python aiohttp nicht.

Erwartetes Verhalten

Ich möchte, dass die aiohttp-Sitzung meinem Charles-Root-Zertifikat vertraut (mein Betriebssystem hat ihm bereits vertraut) oder die SSL-Überprüfung überspringen.

Tatsächliches Verhalten

Neigher vertraut dem chrales-Zertifikat der aiohttp-Sitzung noch überspringt es die SSL-Überprüfung

Schritte zum Reproduzieren

import asyncio
import aiohttp

async def sync(i):
    url = 'https://baidu.com'
    async with aiohttp.ClientSession() as session:
        print('synci'+i)
        data = {
            'key': 'abc',
        }

        async with session.post(url, data=data,proxy="http://127.0.0.1:8888") as resp:
            #assert await resp.json() == { "cookies": {"cookies_are": "working"}}
            print(await resp.text())

async def f1(i):
    print('init'+str(i));
    await sync(str(i));
r1=f1(1)
r2=f1(2)
print('start')
asyncio.get_event_loop().run_until_complete(asyncio.gather(*[ r1, r2, ]))

Ausgabe:

 ssl.SSLError: [SSL] shutdown while in init (_ssl.c:2098)

Ihre Umgebung

python3.5.2
Mac OS X

outdated

Hilfreichster Kommentar

Leider liegt das Problem außerhalb des Anwendungsbereichs von aiohttp.

Sie könnten aiohttp.Connector mit benutzerdefinierten ssl_context erstellen (siehe https://docs.python.org/3/library/ssl.html zum Erstellen eines SSL-Kontextobjekts).
Möglicherweise müssen Sie den Kontext mithilfe Ihrer Zertifikatsketten richtig konfigurieren.

PS aiohttp.Connector(verify_ssl) deaktiviert die SSL-Zertifikatsüberprüfung.

Alle 5 Kommentare

Leider liegt das Problem außerhalb des Anwendungsbereichs von aiohttp.

Sie könnten aiohttp.Connector mit benutzerdefinierten ssl_context erstellen (siehe https://docs.python.org/3/library/ssl.html zum Erstellen eines SSL-Kontextobjekts).
Möglicherweise müssen Sie den Kontext mithilfe Ihrer Zertifikatsketten richtig konfigurieren.

PS aiohttp.Connector(verify_ssl) deaktiviert die SSL-Zertifikatsüberprüfung.

@asvetlov
Leider unterstützt _aiohttp's seesion_ keinen Connector: TypeError: _request() got an unexpected keyword argument 'connector'

import asyncio
import aiohttp

async def sync(i):
    url = 'https://baidu.com'
    async with aiohttp.ClientSession() as session:
        print('synci'+i)
        data = {
            'key': 'abc',
        }

        help(session.post)
        async with session.post(url, data=data,proxy="http://127.0.0.1:8888", connector=aiohttp.TCPConnector(verify_ssl=False)) as resp:
            #assert await resp.json() == { "cookies": {"cookies_are": "working"}}
            print(await resp.text())

async def f1(i):
    print('init'+str(i));
    await sync(str(i));
r1=f1(1)
r2=f1(2)
print('start')
asyncio.get_event_loop().run_until_complete(asyncio.gather(*[ r1, r2, ]))

Übergeben Sie die Connector-Instanz an den aiohttp.ClientSession Konstruktor, nicht an die session.post() Coroutine.

@asvetlov Es funktioniert, vielen Dank!

Dieser Thread wurde automatisch gesperrt, da es keine gab
alle Aktivitäten der letzten Zeit, nachdem es geschlossen wurde. Bitte öffnen Sie eine [neue Ausgabe] für
verwandte Fehler.

Wenn Sie das Gefühl haben, in dieser Diskussion wurden wichtige Punkte angesprochen,
bitte fügen Sie diese Auszüge in diese [neue Ausgabe] ein.

War diese Seite hilfreich?
0 / 5 - 0 Bewertungen