ホームページ >バックエンド開発 >Golang >Go で証明書を使用して HTTPS リクエストを検証する方法

Go で証明書を使用して HTTPS リクエストを検証する方法

Barbara Streisand
Barbara Streisandオリジナル
2024-12-11 00:34:10413ブラウズ

How to Verify HTTPS Requests Using Certificates in Go?

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 サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。