0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

PythonAdvent Calendar 2024

Day 16

PythonでSSL証明書を利用してREST APIを呼び出す方法

Last updated at Posted at 2024-12-03

はじめに

 Pythonで、SSL証明書が必要なサイトに対して、REST APIを呼ぶと下記のようなSSLエラーとなる。事前にダウンロードしたSSL証明書を指定することで、エラーを解消することができる(参考)。本記事では、SSL証明書をPython上でダウンロードしてREST APIで設定するまでを行う方法を紹介する。この方法は自己署名証明書などを利用している場合に有用である。

requests.exceptions.SSLError: HTTPSConnectionPool(host='example.com', port=443): Max retries exceeded with url: /exampleapi (Caused by SSLError(SSLError(1, '[SSL: CERTIFICATE_VERIFY_FAILED] certificate verify failed (_ssl.c:777)'),))

動作確認環境

  • Windows 10 64bit
  • Python 3.10.11

方法

依存関係のインストール

 以下のコマンドを使用して、必要なパッケージをインストールする。

  • requests

  • pyopenssl

    pip install requests
    pip install pyopenssl
    

Pythonコード

 SSL証明書をダウンロードして、REST APIを呼ぶサンプルコードを以下に示す。

#!/usr/bin/python3
# -*- coding: utf-8 -*-

import requests
from OpenSSL import crypto
import ssl
import socket

# SSL証明書をダウンロードしてファイルに保存する関数
def download_cert(hostname, port, output_file):
    context = ssl.create_default_context()
    conn = context.wrap_socket(socket.socket(socket.AF_INET), server_hostname=hostname)
    conn.connect((hostname, port))
    cert_bin = conn.getpeercert(True)
    cert = crypto.load_certificate(crypto.FILETYPE_ASN1, cert_bin)
    with open(output_file, 'wb') as f:
        f.write(crypto.dump_certificate(crypto.FILETYPE_PEM, cert))
    conn.close()

def main():
    # SSL証明書をダウンロードしてファイルに保存
    download_cert('example.com', 443, '/tmp/example-certificates.crt')
    # 上記SSL証明書を利用して、REST APIを呼ぶ
    requests.get('https://example.com/exampleapi', verify='/tmp/example-certificates.crt')

if __name__ == '__main__':
    main()

まとめ

 PythonでSSL証明書を利用してREST APIを呼び出す方法を紹介した。自己署名証明書を利用している場合に有用。 

参考

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?