ウェブサイトに security.txt を設置し OpenPGP でデジタル署名する

Amazon Linux
このサイトはアフィリエイト広告(Amazonアソシエイト含む)を掲載しています。
スポンサーリンク

ウェブサイトに security.txt を設置する機会がありましたので、作業した手順を残しておきます。

RFC9116(security.txt)とは

security.txt は、セキュリティに関する連絡先を記したテキストファイルで、インターネット関連技術の標準化団体である IETF(Internet Engineering Task Force)が発行する RFC(Request for Comments)9116 で規定されています。

ウェブサイトやサービスの脆弱性を発見した者に対し、セキュリティ担当者の連絡先を知らせるために設置します。

セキュリティ対策の強化に有効なsecurity.txtの導入と活用について  |IssueHunt
世界中のホワイトハッカーたちが、お客様のプロダクトを守ります。成果報酬型でコストパフォーマンス抜群の脆弱性診断。運用サポート付き国産バグバウンティ・プラットフォーム「IssueHunt」が、セキュリティ対策をサポートします。

配置するパス

配置するパスが定められており、https://example.com/.well-known/security.txt に配置する必要があります。

フォーマット

必須

  • Contact:(報告フォームの URL やメールアドレス、電話番号など)
  • Expires:(有効期限:1 年以内)

オプション

  • Preferred-Languages:(対応可能な言語)
  • Policy:(セキュリティポリシーページの URL)
  • Acknowledgements:(謝辞掲載ページの URL)
  • Hiring:(セキュリティ関連求人の URL)
  • Canonical:(この security.txt の URL)
  • Encryption:(PGP 暗号化キー の URL)

今回設置したウェブサイトにはセキュリティ報告フォームなどは無かったため、メールアドレスを設定しました。

Contact にメールアドレスを記載する場合、Encryption の項目で PGP(Pretty Good Privacy)公開鍵を指定する事が推奨されています。

RFC 9116: A File Format to Aid in Security Vulnerability Disclosure
When security vulnerabilities are discovered byresearchers, proper reporting channels are often lacking. As a result,vul...

OpenPGP の設定

security.txt は改竄されていない事が確認できるよう、OpenPGP の平文署名(Cleartext Signature)でデジタル署名することが推奨されています。

今回設定したサーバー(Amazon Linux 2023)には GPG(GNU Privacy Guard)は入っていましたが、設定が済んでいなかったので Pinentry を使って進めていきます。

GnuPG のインストール

以降は root 権限ではなく、ユーザー権限で作業します。

主鍵の作成

GPG で使用する鍵は主鍵と副鍵の 2 つがあります。主鍵は副鍵を生成・管理するために使用し、普段使いはしません。

また、GPG で作成できる鍵の用途には以下の 4 種類があります。

  • Certify(証明)
    • 公開鍵へ署名をするために使います。(主鍵)
  • Sign(署名)
    • ファイルなどのデータに対して電子署名を行うために使います。(副鍵)
  • Authenticate(認証)
    • SSH などのユーザー認証に使います。(今回は使用しない)
  • Encrypt(暗号化)
    • データの暗号化のために使います。(副鍵)

主鍵の用途に Certify(証明)だけを割り当てるように作成します。アルゴリズムには ECC を指定しました。

副鍵の作成

副鍵には Sign(署名)と Encrypt(暗号化)を割り当てます。アルゴリズムには RSA を指定しました。

主鍵のバックアップと削除

主鍵が漏れるとすべての鍵の有効性が失われるため、安全な場所(YubiKey など)にバックアップを取って、サーバーからは削除しておきます。

secret-masterkey.asc をバックアップを取り、削除します。

delete-secret-key コマンドで主鍵だけを削除します。

正しく削除されたか確認します。

※ sec の右に # が付いていれば、主鍵の秘密鍵が削除されている状態です。

主鍵の失効証明書を削除

失効証明書も主鍵(secret-masterkey.asc)と同様、安全な場所にバックアップしてサーバーから削除します。

副鍵の秘密鍵をエクスポート

副鍵の秘密鍵をエクスポートして、お使いの MUA(メールソフト)に設定します。

副鍵の公開鍵をエクスポート

副鍵の公開鍵をエクスポートして、公開用ディレクトリにコピーします。

パーミッションの問題については .well-known ディレクトリの所有者を USER に変更することで対処しました。

security.txt を作成

secutiry.txt の雛形をユーザーディレクトリ直下(/home/USER/security.txt)に作成します。

Expires は、1 年以内の日時を指定してください。

デジタル署名

security.txt にはデジタル署名する事が推奨されていますので、クリア署名(clearsign)を施します。

クリア署名をしたファイルを、Web の公開用ディレクトリに配置します。

以上で、security.txt を公開することができました。

更新の自動化

security.txt には期限が設けられており、1 年以上を指定することは推奨されていません。

手動で更新するのも面倒なので、定期的に期限を更新してデジタル署名しなおすスクリプトを作成しました。

USER の crontab を使って、月に一度スクリプトを動かします。

以上で security.txt の設定が完了しました!

設定の確認

internet.nl で security.txt のチェックができるので、設定したドメインを確認しておきましょう。

Test for modern Internet Standards like IPv6, DNSSEC, HTTPS, DMARC, STARTTLS and DANE.
Test for modern Internet Standards IPv6, DNSSEC, HTTPS, HSTS, DMARC, DKIM, SPF, STARTTLS, DANE, RPKI and security.txt

まとめ

後半はずっと OpenPGP に関する内容になってしまいましたが、自分がちゃんと理解できていなかった部分を記事にすることで整理できて良かったです。

参考にしたページ

PGP/GPGについての情報整理
GPG で始める暗号・署名ライフ - blog.livewing.net
PGP (Pretty Good Privacy) の実装のひとつである GPG (GNU Privacy Guard) を使用して鍵を生成する方法をゼロから紹介します。 また、ファイルを暗号化・署名してやりとりする方法や、 Git のコミ...

コメント

タイトルとURLをコピーしました