Heim >Backend-Entwicklung >Golang >Fehler: Nach SSL-Anfrage wurden unverschlüsselte Daten empfangen

Fehler: Nach SSL-Anfrage wurden unverschlüsselte Daten empfangen

WBOY
WBOYnach vorne
2024-02-08 23:00:35640Durchsuche

错误:SSL 请求后收到未加密的数据

Der PHP-Editor Baicao stößt während der Netzwerkentwicklung manchmal auf eine häufige Fehlermeldung: „Fehler: Nach SSL-Anfrage empfangene unverschlüsselte Daten“. Diese Fehlermeldung erscheint normalerweise bei Verwendung des HTTPS-Protokolls zur Datenübertragung und weist darauf hin, dass die Daten nicht verschlüsselt sind. Dieses Problem könnte zu Datenlecks oder -manipulationen führen und muss daher umgehend behoben werden. In diesem Artikel stellen wir die Ursache und Lösung dieses Fehlers im Detail vor, um Entwicklern bei der reibungslosen Lösung dieses Problems zu helfen.

Frageninhalt

Ich habe mit der folgenden Methode eine TCP-Verbindung zum Datenbankserver geöffnet:

conn, err := net.dial("tcp", "localhost:5432") Es ist mir gelungen, nachdem ich diesen Code ausgeführt habe:

_, err = conn.Write([]byte(query))
    if err != nil {
        fmt.Printf("Query failed: %v\n", err)
        return


    // Read the response and print the result in table view
    buf := make([]byte, 50000)
    n, err := conn.Read(buf)
    if err != nil {
        fmt.Printf("Failed to read response: %v\n", err)
        return
    }
    fmt.Printf("Response received: %s\n", string(buf[:n]))

Es wird gedruckt: Antwort erhalten: n

Die Protokolldatei des Servers zeigt:

2023-02-22 22:59:49.834 pkt [54802] fatal: ssl 请求后收到未加密的数据

2023-02-22 22:59:49.834 pkt [54802] 详细信息:这可能是客户端软件错误或尝试中间人攻击的证据。

Problemumgehung

Standardmäßig verlangt der Postgresql-Server, dass alle seine Clients SSL-verschlüsselte Verbindungen verwenden, sodass er Ihre Anfrage immer ablehnt.

Zu Test-/Entwicklungszwecken und um zu erkennen, dass Ihre Verbindung nicht sicher ist, gibt es einige Tricks, mit denen Sie das Problem beheben können:

  1. Erstellen Sie eine Verbindung zum TLS-Paket und lassen Sie es die Zertifikatsüberprüfung überspringen.
tlsconfig := &tls.config{
    insecureskipverify: true,
  }
        
  conn, err := tls.dial("tcp", "localhost:5432", tlsconfig)
  1. Immer verwenden database/sql 包,它为您抽象了所有这些数据库供应商的具体情况。将 sslmode wenn möglich auf deaktiviert stellen.
connstr := "user=myuser password=mypassword dbname=mydb host=localhost sslmode=disable"
  db, err := sql.open("postgres", connstr)
  if err != nil {
      fmt.printf("failed to connect to server: %v\n", err)
      return
  }
  defer db.close()
  1. Installieren Sie die Postgresql-Datei data 目录中找到 pg_hba.conf und fügen Sie die folgende Zeile hinzu, um Ihrem lokalen Host immer zu vertrauen:
host    postgres   postgres   127.0.0.1/32    trust

Angenommen, der Benutzername lautet postgres

  1. Installieren data 目录中找到 postgres.conf 文件,并将 ssl 参数设置为 off in Postgresql.

Bedenken Sie, dass all diese Konfigurationen Ihre Verbindung immer noch unsicher und anfällig für Angriffe machen.

Um eine SSL-Verbindung korrekt herzustellen, müssen Sie ein Zertifikat einrichten. Dieses Wesentliche sollte helfen.

Das obige ist der detaillierte Inhalt vonFehler: Nach SSL-Anfrage wurden unverschlüsselte Daten empfangen. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Dieser Artikel ist reproduziert unter:stackoverflow.com. Bei Verstößen wenden Sie sich bitte an admin@php.cn löschen