> 백엔드 개발 > Golang > Go에서 사용자 정의 인증서 또는 신뢰할 수 없는 인증서를 사용하여 HTTPS 요청을 처리하는 방법은 무엇입니까?

Go에서 사용자 정의 인증서 또는 신뢰할 수 없는 인증서를 사용하여 HTTPS 요청을 처리하는 방법은 무엇입니까?

Mary-Kate Olsen
풀어 주다: 2024-12-11 12:05:10
원래의
597명이 탐색했습니다.

How to Handle HTTPS Requests with Custom or Untrusted Certificates in Go?

Go에서 인증서와 함께 HTTPS 요청 보내기

인증서 확인이 필요한 HTTPS 서비스와 상호작용할 때 개발자는 다음과 관련된 오류가 발생할 수 있습니다.授权机构. 이 문제를 극복하기 위해 Go는 신뢰할 수 있는 CA 인증서를 사용하여 서버 인증서를 검증하는 메커니즘을 제공합니다.

문제를 해결하려면 서버 인증서를 발급한 신뢰할 수 있는 기관의 CA 인증서를 얻어야 합니다. CA 인증서가 있으면 아래와 같이 이를 HTTP 클라이언트의 전송 계층에 추가할 수 있습니다.

import (
    "crypto/tls"
    "io/ioutil"
    "log"
    "net/http"
    "crypto/x509"
)

func main() {
    caCert, err := ioutil.ReadFile("rootCA.crt")
    if err != nil {
        log.Fatal(err)
    }
    caCertPool := x509.NewCertPool()
    caCertPool.AppendCertsFromPEM(caCert)

    client := &http.Client{
        Transport: &http.Transport{
            TLSClientConfig: &tls.Config{
                RootCAs:      caCertPool,
            },
        },
    }

    _, err := client.Get("https://secure.domain.com")
    if err != nil {
        panic(err)
    }
}
로그인 후 복사

또한 보안 통신을 위해 사용자 정의 CA 인증서를 생성하고 자체 인증서에 서명할 수 있습니다. 다음 단계에서는 특정 도메인에 대한 자체 CA 및 인증서를 생성하는 방법을 간략하게 설명합니다.

  1. CA 생성:

    openssl genrsa -out rootCA.key 4096
    openssl req -x509 -new -key rootCA.key -days 3650 -out rootCA.crt
    로그인 후 복사
  2. 인증서 생성 도메인:

    openssl genrsa -out secure.domain.com.key 2048
    openssl req -new -key secure.domain.com.key -out secure.domain.com.csr
    openssl x509 -req -in secure.domain.com.csr -CA rootCA.crt -CAkey rootCA.key -CAcreateserial -days 365 -out secure.domain.com.crt
    로그인 후 복사

이 단계에 따라 Go 애플리케이션에서 서버 인증서를 확인하고 보안 HTTPS 연결을 설정할 수 있습니다.

위 내용은 Go에서 사용자 정의 인증서 또는 신뢰할 수 없는 인증서를 사용하여 HTTPS 요청을 처리하는 방법은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

원천:php.cn
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
저자별 최신 기사
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿