Rumah >pembangunan bahagian belakang >Golang >Ralat: Data tidak disulitkan diterima selepas permintaan SSL

Ralat: Data tidak disulitkan diterima selepas permintaan SSL

WBOY
WBOYke hadapan
2024-02-08 23:00:35636semak imbas

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

Editor PHP Baicao kadangkala menghadapi mesej ralat biasa semasa pembangunan rangkaian: "Ralat: Data tidak disulitkan diterima selepas permintaan SSL". Mesej ralat ini biasanya muncul apabila menggunakan protokol HTTPS untuk penghantaran data, menunjukkan bahawa data tidak disulitkan. Isu ini boleh menyebabkan kebocoran data atau gangguan, jadi ia perlu ditangani dengan segera. Dalam artikel ini, kami akan memperkenalkan punca dan penyelesaian ralat ini secara terperinci untuk membantu pembangun menyelesaikan masalah ini dengan lancar.

Kandungan soalan

Saya telah membuka sambungan tcp ke pelayan pangkalan data menggunakan kaedah berikut:

conn, err := net.dial("tcp", "localhost:5432") Saya berjaya selepas menjalankan kod ini:

_, 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]))

Ia mencetak: Balasan diterima: n

Fail log pelayan menunjukkan:

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

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

Penyelesaian

Secara lalai, pelayan postgresql memerlukan semua pelanggannya menggunakan sambungan yang disulitkan ssl, jadi ia akan sentiasa menolak permintaan anda.

Untuk tujuan ujian/pembangunan dan menyedari bahawa sambungan anda tidak akan selamat, terdapat beberapa helah yang boleh anda gunakan untuk membetulkannya:

  1. Buat sambungan ke pakej tls dan benarkan ia melangkau pengesahan sijil.
tlsconfig := &tls.config{
    insecureskipverify: true,
  }
        
  conn, err := tls.dial("tcp", "localhost:5432", tlsconfig)
  1. Sentiasa gunakan database/sql 包,它为您抽象了所有这些数据库供应商的具体情况。将 sslmode tetapkan kepada orang kurang upaya jika boleh.
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. Pasang fail postgresql data 目录中找到 pg_hba.conf dan tambah baris berikut untuk sentiasa mempercayai localhost anda:
host    postgres   postgres   127.0.0.1/32    trust

Andaikan nama pengguna ialah postgres

  1. Pasang data 目录中找到 postgres.conf 文件,并将 ssl 参数设置为 off dalam postgresql.

Perlu diingat bahawa semua konfigurasi ini masih akan menjadikan sambungan anda tidak selamat dan terdedah kepada serangan.

Untuk membuat sambungan ssl dengan betul, anda perlu menyediakan sijil. Intisari ini sepatutnya membantu.

Atas ialah kandungan terperinci Ralat: Data tidak disulitkan diterima selepas permintaan SSL. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Artikel ini dikembalikan pada:stackoverflow.com. Jika ada pelanggaran, sila hubungi admin@php.cn Padam