>백엔드 개발 >Golang >golang 설치 인증서

golang 설치 인증서

PHPz
PHPz원래의
2023-05-22 16:38:07963검색

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.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 웹사이트에 액세스합니다. 인증서가 성공적으로 로드되면 "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이 더 일반적입니다. 두 번째 방법은 일부 특수한 상황에 적합합니다.

위 내용은 golang 설치 인증서의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.