Go での証明書を使用した HTTPS リクエストの検証
別のポートで提供される HTTPS 対応の REST API との通信を必要とするアプリケーションでは、 「x509: 不明な機関によって署名された証明書」などの SSL 検証エラーが発生することがよくあります。これは、アプリケーションが API の認証局 (CA) を認識しない場合に発生します。
この問題を解決するには、リクエストのトランスポート層に CA 証明書を追加する必要があります。その方法を示す Go コード スニペットは次のとおりです。
package main import ( "crypto/tls" "crypto/x509" "fmt" "io/ioutil" "log" "net/http" ) func main() { // Read the root CA certificate. caCert, err := ioutil.ReadFile("rootCA.crt") if err != nil { log.Fatal(err) } // Create a certificate pool from the CA certificate. caCertPool := x509.NewCertPool() caCertPool.AppendCertsFromPEM(caCert) // Configure the HTTP client with TLS settings. client := &http.Client{ Transport: &http.Transport{ TLSClientConfig: &tls.Config{ RootCAs: caCertPool, }, }, } // Make a GET request to the HTTPS URL. resp, err := client.Get("https://secure.domain.com") if err != nil { log.Fatal(err) } // Process the HTTP response as usual. fmt.Println(resp.Status) }
証明書に署名するための CA を作成していない場合は、次の手順に従ってください:
生成CA:
openssl genrsa -out rootCA.key 4096 openssl req -x509 -new -key rootCA.key -days 3650 -out rootCA.crt
の証明書を生成していますCA で署名された Secure.domain.com:
openssl genrsa -out secure.domain.com.key 2048 openssl req -new -key secure.domain.com.key -out secure.domain.com.csr
「共通名 (サーバーの FQDN またはユーザー名など) []:」という質問に対して、「secure.domain.com」と入力します。 " (実際のドメイン名).
openssl x509 -req -in secure.domain.com.csr -CA rootCA.crt -CAkey rootCA.key -CAcreateserial -days 365 -out secure.domain.com.crt
以上がGo で証明書を使用して HTTPS リクエストを検証する方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。