自己署名証明書を使用した TLS 接続のトラブルシューティング
問題: 自己署名サーバーを使用した TLS 接続の確立証明書が不明な証明書を示すエラーで失敗する権限。
関連コード:
クライアント:
CA_Pool := x509.NewCertPool() severCert, err := ioutil.ReadFile("./cert.pem") CA_Pool.AppendCertsFromPEM(severCert) config := tls.Config{RootCAs: CA_Pool}
サーバー:
cert, err := tls.LoadX509KeyPair("./cert.pem", "./key.pem") config := tls.Config{Certificates: []tls.Certificate{cert}}
エラーメッセージ:
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")
根本原因:
生成された自己署名証明書には IsCA フラグが設定されておらず、中間証明書またはルート証明書ではないことを示しています。その結果、クライアントの CA プールは自己署名証明書を有効な認証局として検証できません。
解決策:
この問題を修正するには、IsCA フラグが有効であることを確認してください。 x509.CreateCertificate を使用して自己署名証明書を生成するときに設定されます。証明書生成の正しいコードは次のとおりです。
certTemplate := &x509.Certificate{ IsCA: true, KeyUsage: x509.KeyUsageCertSign, // ... other certificate parameters }
IsCA:true を設定すると、自己署名証明書が認証局として適切に機能し、クライアントがその信頼性を検証できるようになります。
以上が自己署名証明書を使用すると TLS 接続が失敗するのはなぜですか?それを修正するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。