ホームページ >バックエンド開発 >Golang >golang インストール証明書

golang インストール証明書

PHPz
PHPzオリジナル
2023-05-22 16:38:07984ブラウズ

Golang を使用して HTTPS リクエストを行う場合は、SSL 証明書をインストールする必要があります。そうしないと、次のようなエラーが発生します。

x509: certificate signed by unknown authority

Golang では、標準ライブラリの net/http パッケージを使用して HTTP(S) リクエストが行われます。このパッケージのデフォルトの動作では、サーバーの証明書が検証されます。サーバーの証明書が Golang の組み込みの信頼できる証明書リストにない場合、Golang は上記のエラーを報告します。

この問題を解決するには、サーバー証明書をインストールする必要があります。

1. 証明書のダウンロード

openssl コマンドを使用して、次のようにリモート サーバーから証明書をダウンロードします:

openssl s_client -connect example.com:443 < /dev/null | sed -ne '/-BEGIN CERTIFICATE-/,/-END CERTIFICATE-/p' > example.com.crt

このうち、example.com はドメイン名です。それをダウンロードする必要があります。このコマンドは、example.com のポート 443 から証明書をダウンロードし、example.com.crt ファイルとして保存します。

2. 証明書をインストールします

ダウンロードした証明書を Golang の信頼できる証明書リストに追加します。方法は 2 つあります:

2.1 方法 1: システム証明書ライブラリに追加する

証明書をシステム証明書ストアに追加し、Golang に自動的に認識させます。

Ubuntu を例として、証明書をシステム CA の保存場所にコピーします:

sudo cp example.com.crt /usr/local/share/ca-certificates/

次に、証明書を更新します:

sudo update-ca-certificates

2.2 方法 2: 証明書を手動で追加します。 Golang 組み込み証明書ライブラリ

Golang 組み込み証明書ライブラリのルート証明書プールに証明書を追加します。これは次の方法で実現できます。

package main
 
import (
    "crypto/tls"
    "crypto/x509"
    "io/ioutil"
    "fmt"
    "net/http"
)
 
func main() {
    // 从文件载入证书
    cert, err := ioutil.ReadFile("example.com.crt")
    if err != nil {
        fmt.Println(err)
        return
    }
 
    pool := x509.NewCertPool()
 
    // 将证书添加到根证书池中
    if ok := pool.AppendCertsFromPEM(cert); !ok {
        fmt.Println("Failed to parse root certificate")
        return
    }
 
    tr := &http.Transport{
        TLSClientConfig: &tls.Config{
            RootCAs: pool,
        },
    }
 
    client := &http.Client{Transport: tr}
 
    _, err = client.Get("https://example.com")
    if err != nil {
        fmt.Println(err)
        return
    }
 
    fmt.Println("Success")
}

このプログラムは、example.com.crt ファイルをロードし、ルート証明書プールに追加します。この証明書は、example.com Web サイトにアクセスするために使用されます。証明書の読み込みに成功すると「Success」が出力されます。

3. 証明書が正常にインストールされたかどうかを確認します

次のコードを実行します:

package main
 
import (
    "crypto/tls"
    "fmt"
    "net/http"
)
 
func main() {
    resp, err := http.Get("https://example.com")
    if err != nil {
        fmt.Println(err)
        return
    }
    defer resp.Body.Close()
    fmt.Println(resp.Status)
}

返されたステータス コードが 200 の場合は、証明書が正常にインストールされたことを意味します。それ以外の場合は、証明書やネットワークなど、確認する必要がある他の問題がある可能性があります。

上記はGolangにSSL証明書をインストールする方法です。実際の作業では、通常、システム証明書データベースの保守を担当するシステム管理者が存在するため、方法 1 の方が一般的です。 2 番目の方法は、いくつかの特殊な状況に適しています。

以上がgolang インストール証明書の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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