::: IT인터넷 :::

MinIO 파이썬 클라이언트에서 자체 서명 인증서 사용하기

곰탱이푸우 2022. 5. 24. 08:20
MinIO 파이썬 클라이언트에서 자체 서명 인증서를 사용하는 방법에 대해 정리한다.
 
Docker로 MinIO를 사용하는 방법은 다음 포스팅을 참고한다.
 
Python으로 MinIO를 사용하는 방법은 다음 포스팅을 참고한다.
 

인증서 검증 오류 발생

위의 방법으로 설정한 경우 자체 서명 인증서를 사용했기 때문에 오류가 발생한다.
 
자체 서명 인증서를 생성하고 MinIO 서버에 적용하는 방법은 다음 포스팅을 참고한다.
Python으로 MinIO 클라이언트를 생성하고 bucket에 접근한다.
from minio import Minio

client = Minio('127.0.0.1:9001', access_key='minio', secret_key='miniopass')

result = client.list_objects("buckettest")
for item in result:
    print(item.object_name)
 
그러나 아래와 같은 오류가 발생한다.
ssl.SSLCertVerificationError: [SSL: CERTIFICATE_VERIFY_FAILED]
certificate verify failed: unable to get local issuer certificate (_ssl.c:1131)
 

 

해결 방법

자체 서명 인증서의 발급자를 검증할 수 없어 발생하는 오류로 다음과 같이 해결 가능하다.
 
먼저 자체 서명 인증서에 서명한 rootca.crt 파일이 필요하다.
해당 파일에 대한 내용은 아래 포스팅을 참고한다.
urllib3 라이브러리의 PoolManager 인스턴스를 생성한다.
import urllib3

httpClient = urllib3.PoolManager(
    cert_reqs='CERT_REQUIRED',
    # rootca.crt 파일 경로 지정
    ca_certs='/mnt/d/docker/minio/certs/rootca.crt' 
)

 

관련 내용은 아래 기술 문서를 참고한다.

 

Advanced Usage - urllib3 1.26.9 documentation

Previous User Guide

urllib3.readthedocs.io

 

생성한 PoolManager 인스턴스를 Minio 인스턴스에 전달한다.
from minio import Minio

client = Minio('127.0.0.1:9000', access_key='minio', secret_key='miniopass',
               secure=True, http_client=httpClient)

 

위의 코드를 정리하면 다음과 같다.
import urllib3
from minio import Minio

httpClient = urllib3.PoolManager(
    cert_reqs='CERT_REQUIRED',
    ca_certs='/mnt/d/docker/minio/certs/rootca.crt'
)

client = Minio('127.0.0.1:9000', access_key='minio', secret_key='miniopass',
               secure=True, http_client=httpClient)

result = client.list_objects("buckettest")
for item in result:
    print(item.object_name)
 
 

동작 확인

rootca.crt 파일 경로를 지정하면 다음과 같이 정상적으로 동작하는 것을 확인할 수 있다.