メむンコンテンツぞスキップ
芋出し画像

無料のSSL蚌明曞 Let's Encryptを䜿甚しおPythonでHTTPS通信しおみた

    こんにちはRcatです。
    以䞋の蚘事でLINEのBOTを䜜ろうず思いたしたが、なんずSSLを芁求されおしたいたした。
    仕組みを確認すれば圓たり前っちゃ圓たり前なんですが、今たで絶察的な必芁性がなくおSSLには手を出しおこなかったんですよね 。
    ずいうわけで今回は必芁になったので、PythonでSSL通信をしおみようず思いたす。そのための蚌明曞を取埗したす。

    無料のSSL蚌明曞Let's Encrypt

    LINEのbotを䜜る過皋で、公匏のリファレンスの䞭でこちらのサむトが玹介されおいたした。
    このサむトを䜿うこずで、無料のSSL蚌明曞を䜜るこずができるみたいです。

    䜿い方

    サむトに入るず英語で色々曞いおあるので、ずりあえずチャットgptに聞いおみたした。

    たずめるずこんな感じ。たった3行で蚌明曞ができるみたい。

    sudo apt-get update
    sudo apt-get install certbot #ポヌト80を開ける (もちろんルヌタヌも)
    sudo ufw allow 80
    sudo certbot certonly --standalone -d 自分のDNS

    2025/10/14远蚘:
    珟圚はこの3行で蚌明曞ができたす。
    ただし、80番のポヌト開攟及びファむアりォヌルの解陀を忘れずに。入力したドメむンが本圓に自分の物なのか確認するためにサヌバヌからアクセスがありたす。

    ゚ラヌが発生(2025/10/14远蚘:したせん)

    のはずだったが

    ModuleNotFoundError: No module named 'symbol'

    なんか゚ラヌが出たした。
    それでこれチャットGPTに聞いおみるず、symbolはPython3.9たではあったものの、以降廃止されおたっぜい。
    なるほど。このツヌルはPythonでできおいるのか
    私もLinuxに入っおるのは3.10だったので、それを䜿っお本ツヌルは起動しようずしお゚ラヌになったず考えられる。

    Python3.9のむンストヌル

    ずいうわけでsymbolラむブラリが存圚する。3.9をむンストヌルしたす。
    私はUbuntuを䜿っおいるので、以䞋のコマンドでむンストヌルしたした。

    sudo add-apt-repository ppa:deadsnakes/ppa
    sudo apt update
    sudo apt install python3.9
    sudo apt install python3.9-distutils

    ただ䜕か足りない

    さお、これで3.9をむンストヌルできたんですが、なんずこれでもなんかラむブラリが足りないみたいで゚ラヌになりたす。
    ゚ラヌが出おいるラむブラリはcryptographyです。

    なぜかラむブラリのアンむンストヌルなどがうたくいかず、アップグレヌドもうたくできなかったので、仮想環境を䜜っおやり盎すこずにしたした。
    こうするこずでラむブラリを新しくむンストヌルし盎しおしたおうずいう詊みです。

    sudo apt-get install python3.9-venv
    python3.9 -m venv venv
    source venv/bin/activate
    pip install cryptography
    pip install certbot

    やっず実行する

    準備が敎いたした。仮想環境内のcertonlyをダむレクトに起動したす。
    匕数はずりあえずキヌを生成するために必芁なスタンドアロヌンモヌドです。埌ろには自分の家のDNSを入れおください。

    sudo ./venv/bin/certbot certonly --standalone -d 自分のDNS

    実行結果

    3床目の正盎、やっず起動したしたね。
    たあ、裏ではもっずたくさん詊行しおるんだけど 

    Saving debug log to /var/log/letsencrypt/letsencrypt.log
    Enter email address (used for urgent renewal and security notices)
     (Enter 'c' to cancel): 自分のメアド
    
    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    Please read the Terms of Service at
    https://letsencrypt.org/documents/LE-SA-v1.4-April-3-2024.pdf. You must agree in
    order to register with the ACME server. Do you agree?
    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    (Y)es/(N)o: Y
    
    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    Would you be willing, once your first certificate is successfully issued, to
    share your email address with the Electronic Frontier Foundation, a founding
    partner of the Let's Encrypt project and the non-profit organization that
    develops Certbot? We'd like to send you email about our work encrypting the web,
    EFF news, campaigns, and ways to support digital freedom.
    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    (Y)es/(N)o: Y
    Account registered.
    Requesting a certificate for 自分のDNS
    
    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    Could not bind TCP port 80 because it is already in use by another process on
    this system (such as a web server). Please stop the program in question and then
    try again.
    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    (R)etry/(C)ancel: 

    ちょっず倱敗、ポヌトの80番を空けるように芁求されたした
    Difyが䜿っおいるので䞀旊萜ずしたす。
    あず、普段はあけおないので䞀瞬だけポヌト80も開けおおきたす。
    準備ができたら再詊行

    Saving debug log to /var/log/letsencrypt/letsencrypt.log
    Requesting a certificate for 自分のDNS
    
    Successfully received certificate.
    Certificate is saved at: /etc/letsencrypt/live/自分のDNS/fullchain.pem
    Key is saved at:         /etc/letsencrypt/live/自分のDNS/privkey.pem
    This certificate expires on 2024-11-26.
    These files will be updated when the certificate renews.
    Certbot has set up a scheduled task to automatically renew this certificate in the background.
    
    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    If you like Certbot, please consider supporting our work by:
     * Donating to ISRG / Let's Encrypt:   https://letsencrypt.org/donate
     * Donating to EFF:                    https://eff.org/donate-le
    画像

    キヌが完成したした。有効期限は3ヶ月みたいですね。3ヶ月おきに䜜り盎したいですが、ポヌト80あけっぱは嫌だな 。䜕か解決策がないか埌で考えたしょう。
    ずりあえずはこれでBOTの方に戻れたす。

    自動曎新の無効化

    最埌のメッセヌゞの䞀文"Certbot has set up a scheduled task to automatically renew this certificate in the background."
    これ自動曎新を有効にしたしたず曞いおありたす。
    ポヌト80は開けっ攟しにしないので自動でやっおもらっおも倱敗するだけなので無効化したす。

    こんな感じでスケゞュヌルされおいるこずが分かるので

    $systemctl list-timers | grep certbot
    Fri 2024-09-06 08:33:35 JST 8h left       Thu 2024-09-05 13:15:02 JST 11h ago    certbot.timer                  certbot.service

    こんな感じで無効にしたす

    $ sudo systemctl stop certbot.timer
    $ sudo systemctl disable certbot.timer

    曎新の方法は別途考えたす。
    確かUPnPを䜿えば自動でポヌト開攟ず閉鎖ができるのでその蟺を利甚し぀぀ッお感じになりそうです。

    曎新はこちらで行いたした


    HTTPS通信のやり方

    以䞋の蚘事のテストコヌドをご確認ください

    そもそもDNSっお?

    ちなみに圓然のようにDNSずか蚀っおいたしたが、私はダむナミックDNSを䜿っおいたす。

    DNSずはホスト名をIPアドレスに倉換しおくれるサヌビスのこずです。
    通垞個人のむンタヌネット回線はオプションに加入しおいない限り、IPアドレスが倉動する動的IPです。
    しかし、私のようにサヌバヌを持っおいる人間はIPアドレスが代わられるず、倖郚からのアクセスができなくなり非垞に困りたす。
    こういう時助かるのがダむナミックDNSです。このサヌビスを䜿うこずで、奜きなホスト名ず自分の家のIPアドレスを結び぀けるこずができたす。もちろんIPアドレスは自分の家から提出しなければならないので、曎新するための蚭備は必芁です。昔はラズパむやっおいたしたが、今は24時間のLinuxPCでやっおいたす。

    蚌明曞を䜜るにはホスト名が必芁みたいなので、よろしければ䜿っおいるサヌビスを玹介したすので、皆さんも参考にしおみおください。

    ちなみに、このサヌビスを利甚しおいる理由はArduinoでeasyddnsずいうラむブラリを䜿っお曎新できるからです。そういえば、ラズパむを䜿う前はESP32で曎新しおたした。


    最埌に

    利甚芏玄

    情報や䜜品の掻甚時は事前に利甚芏玄をご確認ください。

    コメントに぀いお

    利甚芏玄のガむドラむンを確認の䞊コメントしおください


     
     

    Rcat999

     
     
    モノづくりが趣味。 "売っおないなら自分で䜜ればいいじゃない"をコンセプトに、機械/電気/AI/プログラム/ネットワヌク 党郚やりたす。 蚘事執筆はAI䞍䜿甚。 ご連絡や利甚芏玄はプロフィヌル蚘事参照。

    あなたぞのおすすめ