1
4

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

はじめに

こんにちは!今回は、FastAPIを使ってセキュアなHTTPS通信を実現する方法について解説します。特に、Windows環境での開発に焦点を当てて説明します。

1. 必要なもの

  • Python 3.7以上
  • FastAPI
  • uvicorn
  • mkcert(ローカル開発環境用の信頼された証明書生成ツール)

2. 環境のセットアップ

FastAPIとuvicornのインストール

まず、FastAPIとuvicornをインストールしましょう。

pip install fastapi uvicorn

Windows環境でのmkcertのインストール

Windows環境でmkcertをインストールする方法はいくつかあります:

  1. Chocolateyを使用する方法(推奨):

    • まず、Chocolateyをインストールします。
    • 管理者権限でPowerShellを開き、以下のコマンドを実行します:
      choco install mkcert
      
  2. 手動でインストールする方法:

    • mkcertのGitHubリリースページから最新のWindows用バイナリ(mkcert-v*-windows-amd64.exe)をダウンロードします。
    • ダウンロードしたファイルの名前をmkcert.exeに変更します。
    • このファイルをシステムのPATHが通っているディレクトリ(例:C:\Windows)に移動するか、新しいディレクトリを作成してPATHに追加します。
  3. Scoopを使用する方法:

    • Scoopがインストールされている場合は、以下のコマンドで簡単にインストールできます:
      scoop install mkcert
      

3. Windows環境での信頼された証明書の生成

mkcertを使用して、ローカル開発環境用の信頼された証明書を生成します。

  1. mkcertをセットアップ:
    管理者権限でコマンドプロンプトを開き、以下のコマンドを実行します:

    mkcert -install
    
  2. localhost用の証明書を生成:

    mkcert localhost 127.0.0.1 ::1
    

    これにより、localhost+2.pem(証明書)とlocalhost+2-key.pem(秘密鍵)が生成されます。

4. FastAPIアプリケーションの作成

以下のようなシンプルなFastAPIアプリケーションを作成します。

from fastapi import FastAPI

app = FastAPI()

@app.get("/")
async def root():
    return {"message": "Hello World over secure HTTPS!"}

このコードをmain.pyとして保存します。

5. WindowsでHTTPSアプリケーションを起動

mkcertで生成した証明書を使用して、uvicornでアプリケーションを起動します。コマンドプロンプトで以下を実行します:

uvicorn main:app --ssl-keyfile localhost+2-key.pem --ssl-certfile localhost+2.pem

6. ブラウザでの確認

ブラウザで https://localhost:8000 にアクセスします。mkcertで生成した証明書を使用しているため、ブラウザはこの接続を安全であると認識し、警告を表示しません。

image.png

Windows環境での注意点

  • Windows Defenderなどのセキュリティソフトが証明書の生成やアプリケーションの実行をブロックする可能性があります。その場合は、一時的に無効にするか、例外を設定してください。
  • PowerShellを使用する場合、実行ポリシーの設定が必要な場合があります。管理者権限でPowerShellを開き、Set-ExecutionPolicy RemoteSigned を実行してください。
  • コマンドプロンプトやPowerShellを管理者権限で実行することで、多くの問題を回避できます。

本番環境での考慮事項

  1. 信頼された認証局の証明書を使用する:

    • Let's EncryptやCertbotを使用して、無料のSSL証明書を取得します。
  2. リバースプロキシの使用:

    • NginxやTraefikなどのリバースプロキシを使用し、HTTPS通信の処理を任せる方法も効果的です。
  3. クラウドサービスの利用:

    • Heroku、AWS、Azureなどのクラウドプラットフォームを使用すると、HTTPS設定が自動的に行われる場合があります。

まとめ

以上の手順で、Windows環境でもFastAPIアプリケーションをセキュアなHTTPS経由で実行できます。mkcertを使用することで、開発環境でも信頼された証明書を使用でき、より本番環境に近い形でのテストが可能になります。

セキュアな通信は現代のWebアプリケーションにとって不可欠なので、ぜひ実装してみてください。

1
4
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
1
4

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?