Python의 requests 라이브러리는 Web API를 사용하거나 HTTP 통신을 간단하게 수행하기 위해 널리 사용됩니다. 하지만 안전한 통신을 확보하기 위해서는 SSL/TLS 프로토콜을 통한 암호화가 중요합니다. requests 라이브러리는 기본적으로 SSL 인증서를 검증하지만 환경에 따라 오류가 발생할 수 있습니다. 인증서 오류를 올바르게 처리하고 통신의 보안을 유지하기 위해서는 SSL 인증서 검증의 메커니즘을 이해하고 적절하게 설정하는 것이 필수적입니다. 본 기사에서는 requests 라이브러리를 사용한 SSL 인증서 검증 방법과 자주 발생하는 문제의 해결 방법을 알기 쉽게 설명합니다.
SSL 인증서 검증의 기본 개념
SSL(Secure Sockets Layer) 인증서는 웹 서버와 클라이언트 간의 통신을 암호화하고, 제3자가 통신을 도청하거나 변조하는 것을 방지하는 시스템입니다. 현재는 SSL의 후속 규격인 TLS(Transport Layer Security)가 주류를 이루고 있지만, 일반적으로 “SSL 인증서”라고 불립니다.
SSL 인증서의 원리
SSL 인증서는 웹사이트 운영자가 인증 기관(CA)에서 발급받아 신뢰할 수 있는 사이트임을 증명합니다. 브라우저나 HTTP 클라이언트가 SSL/TLS 통신을 수행할 때, 인증서를 검증하여 다음 사항을 확인합니다.
- 인증서의 발급자가 신뢰할 수 있는 CA인지를 확인
- 인증서의 대상 도메인명이 일치하는지 확인
- 인증서의 유효 기간이 만료되지 않았는지 확인
인증서 검증의 중요성
SSL 인증서를 검증함으로써 다음과 같은 보안 위험을 방지할 수 있습니다.
- 스푸핑 공격: 가짜 서버가 사용자 데이터를 훔치는 것을 방지합니다.
- 중간자 공격(MITM): 통신 내용을 도청하거나 변조하는 위험을 줄입니다.
적절히 인증서를 검증하는 것은 안전한 통신을 확보하는 데 매우 중요합니다. requests 라이브러리도 기본적으로 SSL 인증서를 검증하도록 설계되었습니다.
requests 라이브러리의 기본적인 SSL 검증 설정
requests 라이브러리는 SSL 인증서를 자동으로 검증하는 기능을 제공합니다. 이를 통해 통신의 보안을 확보하고 신뢰할 수 있는 웹사이트와만 연결을 시도합니다.
`verify` 파라미터의 역할
requests 라이브러리에서는 SSL 인증서 검증을 제어하기 위해 verify
파라미터를 사용합니다. 이 파라미터에는 두 가지 설정이 가능합니다.
- True(기본값): 인증서 검증을 활성화합니다.
- False: 인증서 검증을 비활성화합니다(비추천).
기본 동작은 verify=True
로, 신뢰할 수 있는 CA 목록을 참조하여 인증서를 검증합니다.
기본적인 사용법
다음은 verify
파라미터 사용법의 예입니다.
import requests
# SSL 인증서를 검증하고 HTTPS 요청을 보냅니다
response = requests.get('https://example.com', verify=True)
print(response.status_code)
인증서 검증을 비활성화하는 방법
테스트나 디버깅 목적으로 인증서 검증을 비활성화하려면 다음과 같이 설정합니다.
import requests
# SSL 인증서를 검증하지 않고 요청을 보냅니다(비추천)
response = requests.get('https://example.com', verify=False)
print(response.status_code)
이 경우 Python은 경고를 출력합니다. 경고를 억제할 수도 있지만, 실제 환경에서는 절대로 사용하지 않아야 합니다.
import requests
from requests.packages.urllib3.exceptions import InsecureRequestWarning
# 경고 억제
requests.packages.urllib3.disable_warnings(InsecureRequestWarning)
# SSL 검증을 비활성화하고 요청을 보냅니다
response = requests.get('https://example.com', verify=False)
print(response.status_code)
주의사항
인증서 검증을 비활성화하면 보안 위험이 증가합니다. 악성 사이트에 연결되거나 중간자 공격을 받을 수 있기 때문에 verify=False
사용은 테스트 환경이나 특정 상황에 한정해야 합니다.
SSL 인증서 비활성화와 그 리스크
SSL 인증서 검증을 비활성화하면 통신 오류를 피할 수 있지만, 이는 심각한 보안 위험을 동반합니다. requests 라이브러리에서는 verify=False
를 지정하여 인증서 검증을 건너뛸 수 있지만, 실제 환경에서의 사용은 권장되지 않습니다.
SSL 인증서 검증 비활성화 방법
인증서 검증을 비활성화하려면 verify=False
를 설정합니다.
import requests
# SSL 검증을 비활성화합니다
response = requests.get('https://example.com', verify=False)
print(response.text)
이 설정에서는 요청이 인증서의 유효성을 확인하지 않고 전송됩니다.
인증서 검증 비활성화 리스크
- 중간자 공격(MITM) 취약성
검증을 비활성화하면 신뢰할 수 없는 서버와 통신할 수 있게 되어 악의적인 공격자가 통신을 가로채고 데이터를 변조하거나 도용할 수 있습니다. - 스푸핑 서버와의 통신
악의적인 제3자가 공식 서버로 위장하는 경우라도 인증서가 검증되지 않기 때문에 연결이 성립됩니다. 이로 인해 중요한 정보가 유출될 위험이 있습니다. - 취약점 이용 가능성
SSL/TLS 통신의 보안 프로토콜을 무시함으로써 오래된 암호화 방식이나 취약점이 있는 서버와의 통신이 이루어질 가능성이 커집니다.
경고 무시가 초래하는 추가 리스크
requests를 사용할 때 경고가 출력되는 이유는 리스크를 명확히 인식시키기 위해서입니다. urllib3.disable_warnings
를 사용하여 이를 억제하는 것은 보안 문제를 간과하게 만들 수 있습니다.
# 비추천 경고 억제
from requests.packages.urllib3.exceptions import InsecureRequestWarning
requests.packages.urllib3.disable_warnings(InsecureRequestWarning)
권장 사항
인증서 검증을 비활성화하는 대신 다음과 같은 방법으로 문제를 해결하는 것을 고려하십시오:
- 신뢰할 수 있는 CA 인증서 설치: 서버의 인증서가 올바르게 발급되었는지 확인합니다.
- 맞춤 인증서 설정: 특정 CA 인증서를
verify
옵션에 지정합니다(다음 항목에서 설명합니다). - 적절한 서버 설정: 서버 측에서 올바른 SSL 인증서를 사용하고 있는지 확인합니다.
인증서 검증을 비활성화하는 것은 문제를 해결하거나 임시 디버깅에 한정하고, 반드시 보안 연결을 최우선으로 하세요.
고유의 인증서를 사용한 SSL 검증
경우에 따라 고유의 인증 기관(CA)이 발급한 SSL 인증서를 사용해야 할 때가 있습니다. 이 경우 requests 라이브러리의 verify
파라미터에 사용자 정의 인증서 파일을 지정하여 인증서 검증을 수행할 수 있습니다.
사용자 정의 CA 인증서 준비
사용자 정의 CA 인증서를 사용하려면 먼저 해당 인증서(일반적으로 .pem
형식)를 얻어 로컬 환경에 저장해 두어야 합니다. 예를 들어 my_ca_cert.pem
이라는 인증서 파일이 있다고 가정합니다.
사용자 정의 인증서 사용 방법
requests 라이브러리에서는 다음과 같이 verify
파라미터에 인증서 파일 경로를 지정합니다.
import requests
# 사용자 정의 CA 인증서를 사용하여 요청을 보냅니다
response = requests.get('https://example.com', verify='path/to/my_ca_cert.pem')
print(response.status_code)
이 설정에 따라 지정된 CA 인증서를 사용하여 서버 인증서를 검증합니다.
인증서 체인 주의사항
사용자 정의 CA 인증서가 중간 인증서를 필요로 할 경우, 인증서 체인이 올바르게 구성되어 있는지 확인해야 합니다. my_ca_cert.pem
에 필요한 중간 인증서를 포함시켜 두면 검증이 성공할 확률이 높아집니다.
검증 성공 예시
다음은 사용자 정의 인증서를 사용하여 HTTPS 요청을 보내는 성공 예시입니다.
# 인증서가 올바른 경우
response = requests.get('https://securedomain.com', verify='my_ca_cert.pem')
if response.ok:
print("연결 성공!")
else:
print("연결 실패. 상태 코드:", response.status_code)
사용자 정의 인증서가 인식되지 않는 경우의 해결 방법
- 인증서 형식 확인
PEM 형식으로 인코딩되어 있는지 확인합니다. 형식이 다른 경우 OpenSSL을 사용하여 변환할 수 있습니다.
openssl x509 -in my_ca_cert.crt -out my_ca_cert.pem -outform PEM
- 인증서 경로 확인
정확한 파일 경로가 지정되었는지 확인합니다. - 인증서 체인 통합
중간 인증서가 필요한 경우 메인 CA 인증서에 통합합니다.
cat intermediate_cert.pem >> my_ca_cert.pem
시스템 전체에서 인증서 사용
자주 사용자 정의 인증서를 사용하는 경우 시스템의 기본 CA 인증서 저장소에 추가하는 것을 고려할 수 있습니다. 이는 신뢰할 수 있는 연결을 확보하면서 코드도 간결하게 유지하는 데 도움이 됩니다.
sudo cp my_ca_cert.pem /usr/local/share/ca-certificates/
sudo update-ca-certificates
권장 사항
사용자 정의 인증서를 사용할 때도 항상 인증서의 신뢰성을 확인하십시오. 적절하게 관리된 인증서를 사용하여 안전한 통신을 유지할 수 있습니다.
인증서 오류 해결 방법
requests 라이브러리를 사용하여 SSL 인증서를 검증할 때 인증서 오류가 발생할 수 있습니다. 이러한 오류는 인증서의 결함이나 시스템 환경 문제로 인해 발생합니다. 여기서는 일반적인 인증서 오류의 원인과 해결 방법을 설명합니다.
자주 발생하는 오류와 원인
- 인증서가 신뢰되지 않음 (
Certificate verify failed
)
서버 인증서가 인증 기관(CA)에 의해 서명되지 않았거나, CA 인증서가 시스템의 신뢰 저장소에 없는 경우 발생합니다.
예외 메시지:
requests.exceptions.SSLError: [SSL: CERTIFICATE_VERIFY_FAILED]
- 인증서의 만료 (
Expired certificate
)
서버의 인증서가 유효 기간을 지나면 발생합니다. - 인증서의 도메인명 불일치 (
Hostname mismatch
)
인증서의 대상 도메인명(Common Name 또는 SAN)이 요청한 URL의 도메인명과 일치하지 않는 경우 발생합니다. - 중간 인증서 부족 (
Incomplete certificate chain
)
서버 인증서에 필요한 중간 인증서가 제공되지 않으면 발생합니다.
오류 해결 방법
1. CA 인증서 추가
신뢰되지 않는 인증서가 원인인 경우, 사용자 정의 CA 인증서를 준비하여 verify
파라미터로 지정합니다.
import requests
# 사용자 정의 CA 인증서 사용
response = requests.get('https://example.com', verify='path/to/ca_cert.pem')
print(response.status_code)
2. 시스템의 CA 인증서 저장소 업데이트
시스템의 신뢰 저장소가 오래된 경우 인증서 오류가 발생할 수 있습니다. 아래 명령어로 인증서 저장소를 업데이트하세요.
- Debian/Ubuntu
sudo apt update
sudo apt install --reinstall ca-certificates
- macOS
- 정기적으로 시스템의 CA 인증서 저장소를 업데이트합니다.
- 서버의 인증서가 올바르게 설정되었는지 확인합니다.
- 필요에 따라 사용자 정의 CA 인증서를 사용하여 안전한 통신을 확보합니다.
- 웹사이트에 접속: 대상 사이트에 접속합니다(예:
https://example.com
). - 인증서 정보 표시:
- Chrome: 주소 표시줄의 자물쇠 아이콘을 클릭하고, “상세정보”를 선택합니다.
- Firefox: 자물쇠 아이콘을 클릭하고 “연결의 상세정보”를 선택합니다.
- 인증서 세부 사항 확인: 발급자, 대상 도메인, 유효 기간을 확인합니다.
- 도메인명 일치: 인증서의 CN 또는 SAN(Subject Alternative Name)이 접속하려는 도메인명과 일치하는지 확인합니다.
- 중간 인증서 존재: 인증서 체인이 올바른지, 모든 중간 인증서가 포함되어 있는지 확인합니다.
- 유효 기간: 인증서의 유효 기간이 지나지 않았는지 확인합니다.
- 서버에서 인증서를 직접 얻을 경우: OpenSSL을 사용합니다.
- requests 라이브러리의 신뢰 CA 목록을 확인할 경우: certifi를 사용합니다.
- 인증서 정보를 직관적으로 확인할 경우: 브라우저를 사용합니다.
- 통신이 성공하는지.
- 상태 코드나 응답 내용이 정확한지.
- 오류 발생 시 상세 정보를 얻을 수 있는지.
- 적절한 SSL 검증 설정: 보안을 최우선으로 하여
verify
파라미터를 활용하여 안전한 통신을 수행합니다. - 오류 처리를 철저히: 통신 실패 시 상세 로그를 남겨 문제를 파악하고 해결할 수 있도록 합니다.
- 사용자 정의 인증서 활용: 고유의 CA 인증서나 클라이언트 인증서를 활용하여 내부 API 통신을 안전하게 수행합니다.
- 기본 SSL 인증서 검증 설정을 활용하여 안전한 통신을 확보합니다.
- 사용자 정의 CA 인증서를 적절히 지정하여 내부 API 통신을 안전하게 수행합니다.
- SSL 검증을 비활성화하는 것은 테스트 환경에 한정하고, 실제 환경에서는 반드시 검증을 활성화합니다.
security add-trusted-cert -d -r trustRoot -k /Library/Keychains/System.keychain path/to/ca_cert.pem
3. 서버 인증서 확인
서버의 인증서가 만료되었거나 도메인명이 일치하지 않으면 서버 운영자에게 연락하여 인증서를 갱신하거나 수정하도록 해야 합니다. openssl
명령어로 인증서를 확인할 수 있습니다.
openssl s_client -connect example.com:443 -showcerts
4. 중간 인증서 통합
중간 인증서가 부족한 경우 인증서 체인을 구축하여 통합합니다.
cat intermediate_cert.pem >> server_cert.pem
5. 임시 해결책(비추천)
어떻게든 인증서 오류를 피하고 싶다면, verify=False
를 설정하여 검증을 비활성화할 수 있습니다. 그러나 보안 위험이 높아지므로 실제 환경에서는 사용을 피해야 합니다.
response = requests.get('https://example.com', verify=False)
오류 해결의 최선의 방법
이 방법들을 사용하면 SSL 인증서 관련 오류를 효과적으로 해결하고 안전한 통신을 확보할 수 있습니다.
외부 도구를 이용한 인증서 확인
SSL 인증서와 관련된 문제를 해결하려면 인증서의 세부 정보를 확인하고 문제의 원인을 파악해야 합니다. requests 라이브러리뿐만 아니라 외부 도구를 사용하여 인증서를 조사하는 것도 매우 효과적입니다. 여기에서는 인증서 확인에 유용한 도구와 사용법을 설명합니다.
OpenSSL을 사용한 인증서 확인
OpenSSL은 SSL/TLS 통신 및 인증서 관리에 널리 사용되는 도구입니다. 서버의 인증서를 얻고 문제를 확인할 때 유용합니다.
서버 인증서 얻기
다음 명령어로 지정한 서버의 인증서를 얻고 세부 정보를 표시합니다.
openssl s_client -connect example.com:443 -showcerts
출력 예시:
Certificate chain
0 s:/CN=example.com
i:/CN=Example CA
---
Server certificate
-----BEGIN CERTIFICATE-----
(인증서 데이터)
-----END CERTIFICATE-----
인증서 유효 기간 확인
얻은 인증서의 유효 기간을 확인하려면 다음 명령어를 사용합니다.
openssl x509 -in server_cert.pem -noout -dates
출력 예시:
notBefore=Nov 1 00:00:00 2023 GMT
notAfter=Oct 31 23:59:59 2024 GMT
certifi를 사용한 CA 인증서 확인
Python의 requests 라이브러리는 기본적으로 certifi
라는 라이브러리를 사용하여 신뢰할 수 있는 CA 인증서를 관리합니다. certifi
를 사용하면 현재의 CA 인증서 목록을 확인할 수 있습니다.
certifi 설치
certifi가 설치되지 않은 경우, 다음 명령어로 설치할 수 있습니다.
pip install certifi
certifi를 이용한 인증서 경로 확인
현재 사용 중인 CA 인증서의 경로를 확인하려면 다음 코드를 실행합니다.
import certifi
# CA 인증서 경로 출력
print(certifi.where())
출력 예시:
/path/to/python/site-packages/certifi/cacert.pem
브라우저를 사용한 인증서 확인
브라우저를 사용하여 SSL 인증서를 직접 확인하는 것도 가능합니다. Chrome이나 Firefox에서는 다음 절차를 통해 확인할 수 있습니다.
검증의 중요한 포인트
도구 선택의 기준
이 도구들을 활용하면 SSL 인증서 문제를 파악하고, 안전한 통신 환경을 유지하기 위한 중요한 정보를 효율적으로 얻을 수 있습니다.
requests를 사용한 구체적인 SSL 검증 코드 예시
여기서는 Python의 requests 라이브러리를 사용하여 SSL 인증서를 검증하는 실제 코드 예시를 소개합니다. SSL 인증서를 검증하는 기본 방법부터, 사용자 정의 인증서 사용 예시까지 포괄적으로 설명합니다.
기본적인 SSL 검증 예시
requests 라이브러리에서는 기본적으로 SSL 인증서를 검증합니다. 이 설정으로 HTTPS 요청을 보내는 예시를 보여드립니다.
import requests
# 정상적으로 검증된 HTTPS 요청
url = 'https://www.google.com'
response = requests.get(url)
print(f"상태 코드: {response.status_code}")
print(f"응답 헤더: {response.headers}")
이 코드는 인증서 검증에 성공하면 HTTP 상태 코드와 응답 헤더를 출력합니다.
SSL 인증서 검증 오류 예시
인증서 검증에 실패하면 requests.exceptions.SSLError
가 발생합니다. 다음 코드는 자체 서명된 인증서를 사용하는 사이트에 접속할 때 발생하는 오류 예시입니다.
url = 'https://self-signed.badssl.com'
try:
response = requests.get(url)
except requests.exceptions.SSLError as e:
print(f"SSL 검증 오류: {e}")
이 경우, 신뢰할 수 없는 CA가 발급한 인증서 때문에 오류가 발생합니다.
사용자 정의 CA 인증서 사용 예시
사용자 정의 CA 인증서를 지정하여 검증을 수행하는 예시를 보여드립니다.
url = 'https://example.com'
ca_cert_path = '/path/to/your/ca_cert.pem'
# 사용자 정의 인증서를 지정하여 요청을 보냅니다
response = requests.get(url, verify=ca_cert_path)
print(f"상태 코드: {response.status_code}")
print(f"응답 본문: {response.text}")
이 코드는 verify
파라미터에 사용자 정의 CA 인증서 경로를 지정하여 서버 인증서를 검증합니다.
SSL 검증을 비활성화하는 예시(비추천)
SSL 검증을 비활성화하고 요청을 보내는 예시입니다. 이 방법은 테스트 환경 외에서는 권장되지 않습니다.
url = 'https://self-signed.badssl.com'
# 검증을 비활성화하고 요청을 보냅니다
response = requests.get(url, verify=False)
print(f"상태 코드: {response.status_code}")
print(f"응답 본문: {response.text}")
이 코드는 SSL 검증을 비활성화한 상태에서 통신을 진행합니다. Python은 이 설정에 대해 경고를 출력합니다.
인증서 검증의 상세 로그를 활성화하는 예시
인증서 검증 문제를 디버깅할 때 상세 로그를 활성화하여 유용한 정보를 얻을 수 있습니다.
import requests
import logging
# 로그 활성화
logging.basicConfig(level=logging.DEBUG)
url = 'https://www.google.com'
response = requests.get(url)
print(f"상태 코드: {response.status_code}")
로그에는 TLS 핸드쉐이크나 인증서의 상세 정보 등 검증 과정에 관한 정보가 표시됩니다.
종합 예시: 여러 경우를 처리하는 함수
SSL 검증 성공과 실패를 처리하는 범용 함수 예시입니다.
def fetch_url(url, ca_cert=None, disable_ssl=False):
try:
if disable_ssl:
response = requests.get(url, verify=False)
elif ca_cert:
response = requests.get(url, verify=ca_cert)
else:
response = requests.get(url)
return response.text
except requests.exceptions.SSLError as e:
return f"SSL 오류: {e}"
except Exception as e:
return f"기타 오류: {e}"
# 사용 예시
print(fetch_url('https://example.com', ca_cert='/path/to/ca_cert.pem'))
print(fetch_url('https://self-signed.badssl.com', disable_ssl=True))
이 함수는 verify
파라미터를 유연하게 설정하여, 일반적인 검증, 사용자 정의 인증서 사용, 검증 비활성화를 전환할 수 있게 합니다.
실행 결과 확인
실제 코드를 실행하여 다음 사항을 확인하십시오:
이러한 구체적인 예시를 참고하여 다양한 SSL 인증서 검증 시나리오에 대응할 수 있습니다.
응용 예시: API 통신에서의 SSL 인증서 검증
API 통신에서는 SSL 인증서를 적절하게 검증하는 것이 특히 중요합니다. 잘못된 서버에 연결되는 것을 방지하고 데이터를 안전하게 주고받기 위해 SSL 인증서 검증 설정과 최선의 방법을 실천합시다. 여기에서는 API 통신에서의 SSL 검증 실제 예시를 소개합니다.
인증이 필요한 API 통신에서의 SSL 검증
많은 API에서는 토큰이나 API 키를 사용한 인증이 필요합니다. SSL 검증을 활성화하고 적절한 헤더를 설정하여 요청을 보내는 예시를 보여드립니다.
import requests
api_url = 'https://api.example.com/data'
api_key = 'your_api_key_here'
headers = {
'Authorization': f'Bearer {api_key}',
'Content-Type': 'application/json'
}
# HTTPS 요청을 보냅니다
response = requests.get(api_url, headers=headers)
if response.status_code == 200:
print("데이터 얻기 성공:", response.json())
else:
print(f"오류: {response.status_code}, 상세: {response.text}")
이 코드는 API 통신 중 SSL 인증서가 검증되어 안전한 통신이 확보됩니다.
사용자 정의 인증서를 사용한 내부 API 통신
사내 시스템이나 프라이빗 API에서는 고유의 CA 인증서를 사용하는 경우가 있습니다. 이 경우, 사용자 정의 CA 인증서를 지정하여 요청을 보냅니다.
api_url = 'https://internal-api.example.com/data'
ca_cert_path = '/path/to/internal_ca_cert.pem'
# 사용자 정의 인증서를 지정
response = requests.get(api_url, verify=ca_cert_path)
if response.status_code == 200:
print("내부 API 통신 성공:", response.json())
else:
print(f"오류: {response.status_code}, 상세: {response.text}")
인증서 검증을 비활성화한 테스트 통신
개발 환경에서는 자체 서명된 인증서를 사용하는 경우가 있습니다. 이 경우 인증서 검증을 비활성화하고 통신을 진행할 수 있습니다. 단, 이 방법은 테스트 환경에 한정하십시오.
api_url = 'https://dev-api.example.com/data'
# SSL 검증을 비활성화하고 요청
response = requests.get(api_url, verify=False)
if response.status_code == 200:
print("테스트 통신 성공:", response.json())
else:
print(f"오류: {response.status_code}, 상세: {response.text}")
보안 강화 최선의 방법
API 통신에서 SSL 검증을 안전하게 실시하기 위해 다음 최선의 방법을 채택합시다.
1. 반드시 SSL 검증을 활성화합니다
테스트 환경 외에서는 verify=False
를 사용하지 않습니다. 이를 통해 잘못된 서버와의 통신을 방지할 수 있습니다.
2. 인증서의 유효성을 정기적으로 확인합니다
운영 중인 인증서가 만료되지 않도록 정기적으로 인증서의 유효 기간을 모니터링합니다.
openssl x509 -in /path/to/certificate.pem -noout -dates
3. 오류 처리를 적절히 구현합니다
SSL 오류가 발생할 경우 대비하여 예외 처리를 구현하여 상세 오류 정보를 기록합니다.
try:
response = requests.get(api_url, verify=True)
response.raise_for_status()
except requests.exceptions.SSLError as e:
print(f"SSL 오류: {e}")
except requests.exceptions.RequestException as e:
print(f"통신 오류: {e}")
4. 클라이언트 인증서를 활용합니다
클라이언트 인증이 필요한 API에서는 클라이언트 인증서를 설정합니다.
api_url = 'https://secure-api.example.com/data'
client_cert = '/path/to/client_cert.pem'
client_key = '/path/to/client_key.pem'
response = requests.get(api_url, cert=(client_cert, client_key), verify=True)
if response.status_code == 200:
print("클라이언트 인증 성공:", response.json())
else:
print(f"오류: {response.status_code}, 상세: {response.text}")
정리
이 방법들을 실천하면 API 통신에서 SSL 인증서 검증을 안전하고 효율적으로 실시할 수 있습니다.
정리
본 기사에서는 Python의 requests 라이브러리를 사용하여 SSL 인증서를 검증하는 방법을 설명했습니다. SSL 인증서는 통신의 안전성을 확보하는 중요한 역할을 합니다. requests의 기본 설정부터, 사용자 정의 인증서 사용 방법, 오류 해결 절차, API 통신에서의 실습 예시까지 폭넓게 소개했습니다.
안전한 통신을 유지하기 위한 포인트를 다음과 같이 정리합니다:
이 지식을 활용하여 보다 안전하고 신뢰할 수 있는 HTTP 통신을 구현하세요.