🍣

【Python】エラー:urllib.error.URLError/ SSL: CERTIFICATE_VERIFY_FAILED

2023/03/24に公開

概要

Flaskでアプリケーションを構築していたところ、下記エラーに遭遇した。

どういったエラーか説明すると、/drinks-detailsというjwt認証を必要とするエンドポイントにリクエストを送ると、上記エラーが発生する。具体的なコードは下記の通り。

@app.route('/drinks-detail', methods=['GET'])
@requires_auth('get:drinks-detail')
def get_drinks_detail(jwt):
    try:
        drinksLongList = [drink.long() for drink in Drink.query.all()]
        print(drinksLongList)
        return jsonify({
            'success': True,
            'drinks-detail': drinksLongList
        }), 200
    except:
        return json.dumps({
            'success': False,
            'error': "Error with loading drinks occured"
        }), 500

ちなみに、@requires_authの部分を削除すると、正しくレスポンスが返ってくるので、requires_authで何かが起きていることは明白だった。

原因

エラーが発生している理由として、自分のOSが自己署名されたリクエストをブロックしていることだった。自己署名されたリクエストは、信頼できないソースから送信された可能性がある。そのため、OS側でセキュリティ上の理由から、これらのリクエストをブロックしていた。

対応策

自己署名したリクエストがブロックされないように、OS側のセキュリティ設定を変更する必要がある。Macの場合、Pythonのアプリケーションタブへ移動して、"Install Certificates.command" をダブルクリックすると、セキュリティ設定を変更できる。下記URLでも同様の記載がされている。
https://stackoverflow.com/questions/50236117/scraping-ssl-certificate-verify-failed-error-for-http-en-wikipedia-org

GitHub

https://github.com/yxo5017/cd0039-Identity-and-Access-Management/tree/master/Project/03_coffee_shop_full_stack

Discussion