Menyelesaikan Masalah Sambungan TLS dengan Sijil Ditandatangani Sendiri
Isu: Mewujudkan sambungan TLS menggunakan pelayan yang ditandatangani sendiri sijil gagal dengan ralat menunjukkan sijil yang tidak diketahui pihak berkuasa.
Kod Berkaitan:
Pelanggan:
CA_Pool := x509.NewCertPool() severCert, err := ioutil.ReadFile("./cert.pem") CA_Pool.AppendCertsFromPEM(severCert) config := tls.Config{RootCAs: CA_Pool}
Pelayan:
cert, err := tls.LoadX509KeyPair("./cert.pem", "./key.pem") config := tls.Config{Certificates: []tls.Certificate{cert}}
Ralat Mesej:
client: dial: x509: certificate signed by unknown authority (possibly because of "x509: invalid signature: parent certificate cannot sign this kind of certificate" while trying to verify candidate authority certificate "serial:0")
Punca Punca:
Sijil yang ditandatangani sendiri yang dihasilkan tidak mempunyai set bendera IsCA, yang menunjukkan bahawa ia bukan sijil perantaraan atau akar . Akibatnya, Kumpulan CA pelanggan tidak dapat mengesahkan sijil yang ditandatangani sendiri sebagai pihak berkuasa yang sah.
Penyelesaian:
Untuk membetulkan isu ini, pastikan bendera IsCA adalah ditetapkan apabila menjana sijil yang ditandatangani sendiri menggunakan x509.CreateCertificate. Kod yang betul untuk penjanaan sijil adalah seperti berikut:
certTemplate := &x509.Certificate{ IsCA: true, KeyUsage: x509.KeyUsageCertSign, // ... other certificate parameters }
Dengan menetapkan IsCA:true, sijil yang ditandatangani sendiri boleh berfungsi dengan betul sebagai pihak berkuasa sijil, membolehkan pelanggan mengesahkan kesahihannya.
Atas ialah kandungan terperinci Mengapa Sambungan TLS Saya Gagal dengan Sijil Ditandatangani Sendiri dan Bagaimana Saya Boleh Membetulkannya?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!