自己署名サーバー証明書を使用して TLS 接続を確立すると、ユーザーは頻繁に「x509: 証明書の署名者」というメッセージに遭遇します。不明な権限」エラーが表示されます。この問題は、クライアントが自己署名証明書を信頼できる認証局として認識できない場合に発生します。
このエラーを解決するには、問題は証明書の生成プロセスにあります。提供されたコード スニペットは自己署名証明書を作成しますが、「IsCA:true」フラグの設定を無視します。このフラグは、証明書を認証局 (CA) として指定し、他の証明書に署名できるようにします。
修正されたコードは次のようになります。
証明書の生成:
func generateCertificate() { key, err := ecdsa.GenerateKey(elliptic.P256(), rand.Reader) if err != nil { log.Fatal(err) } subject := x509.Certificate{ SerialNumber: big.NewInt(42), Subject: pkix.Name{ Organization: []string{"My Organization"}, }, } template := x509.Certificate{ SerialNumber: big.NewInt(43), Subject: subject.Subject, KeyUsage: x509.KeyUsageCertSign, IsCA: true, // Setting IsCA to true designates the certificate as a CA ExtKeyUsage: []x509.ExtKeyUsage{x509.ExtKeyUsageServerAuth}, } cert, err := x509.CreateCertificate(rand.Reader, &template, &template, &key.PublicKey, key) if err != nil { log.Fatal(err) } // Save the certificate and key to pem files }
クライアント構成:
func clientSetup() (*tls.Config, error) { cert, err := ioutil.ReadFile("./cert.pem") if err != nil { return nil, err } certpool := x509.NewCertPool() certpool.AppendCertsFromPEM(cert) config := &tls.Config{ RootCAs: certpool, InsecureSkipVerify: true, //!!! Skip certificate verification for testing purposes only } return config, nil }
注: 運用環境では、サーバーの信頼性を確保するために証明書の検証を有効にする必要があります。
以上が自己署名 TLS 証明書を使用する場合の「x509: 不明な認証局によって署名された証明書」エラーを解決する方法は?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。