Golang을 사용하여 HTTPS 요청을 하는 경우 SSL 인증서를 설치해야 합니다. 그렇지 않으면 다음과 유사한 오류가 발생합니다.
x509: certificate signed by unknown authority
Golang에서는 표준 라이브러리의 net/http 패키지를 사용하여 HTTP(S) 요청을 합니다. 이 패키지의 기본 동작은 서버의 인증서를 확인하는 것입니다. 서버의 인증서가 Golang의 내장된 신뢰할 수 있는 인증서 목록에 없으면 Golang은 위의 오류를 보고합니다.
이 문제를 해결하려면 서버 인증서를 설치해야 합니다.
다음과 같이 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 파일로 저장합니다.
다운로드한 인증서를 Golang의 신뢰할 수 있는 인증서 목록에 추가합니다. 두 가지 방법이 있습니다.
시스템 인증서 저장소에 인증서를 추가하고 Golang이 인식하도록 합니다. 자동으로요.
Ubuntu를 예로 들어 인증서를 시스템 CA 저장 위치에 복사합니다:
sudo cp example.com.crt /usr/local/share/ca-certificates/
그런 다음 인증서를 업데이트합니다:
sudo update-ca-certificates
인증서 추가 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"가 출력됩니다.
다음 코드를 실행합니다.
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 중국어 웹사이트의 기타 관련 기사를 참조하세요!