Apache 2.4系でHTTP/2サーバを構築してみるテスト。
最新情報関連ソフトウエアのサポート期間OpenSSL 1.1.1系のサポート終了まであと、000日です。(サポート終了予定日:2023年9月11日)OpenSSL 3.0.0系のサポート終了まであと、000日です。(サポート終了予定日:2026年9月7日)サポートが終了したソフトウエアACME v1のサービスが完全終了しました。(終了日:2021年6月1日)ACME v2に対応したACMEエージェントをご利用ください。OpenSSL 1.1.0系のサポートが終了しました。(サポート終了日:2019年9月11日) OpenSSL 1.1.1系へのアップグレードをお急ぎください。OpenSSL 1.0.2系のサポート終了しました。(サポート終了日:2019年12月31日) OpenSSL 1.1.1系へのアップグレードをお急ぎください。OpenSSL 1.0.1系のサポートが終了しました。(サポート終了日:2016年12月31日) OpenSSL 1.1.1系へのアップグレードをお急ぎください。Apache httpd サーバ 2.2系のセキュリティーパッチ提供を含むメンテナンスが終了しました。(メンテナンス終了日:2017年12月31日) Apache 2.4系へのアップグレードをお急ぎください。
昨日のアクセス解析2023年06月01日に当サイトを訪れた方が使ったHTTPプロトコル
2023年06月01日に当サイトを訪れた方が使ったTLSプロトコル
【グラフ】当サイトに対する2018年10月以降の、HTTP/2及びTLSv1.3を使ったアクセスの割合 [参考]>>「あなたのブラウザのTLS/HTTP接続情報」
更新履歴
>> 2020年の更新履歴 >> 2019年の更新履歴 >> 2018年の更新履歴 >> 2017年の更新履歴 >> 2016年以前の更新履歴
はじめにこのサイトでは、HTTP/2のWebサーバを構築するにあたって、必要となる知識のすべてを、理解していただくことを目標としています。 HTTP/2についてよくわからないという方は、先に以下のページをご覧ください。 [参考]>>HTTP/2とは
いまや、一般的なブラウザの多くがHTTP/2に対応しており、サーバさえ対応すればだれでも利用できる状況です。 HTTP/2は、TLS暗号化接続(いわゆるSSL)を前提とはしておりますが、TLS/SSLで使用するサーバ証明書も、無償での取得が、できるようになってきており、敷居は、低くなってきています。 以下の順番で進んでいけば、HTTP/2サーバの構築と、仕組みを理解することができます。
基本編当サイトには、HTTP/2に関する一通りの設定が説明されています。 知りたい設定がございましたら、下記から検索して頂くと、目的のページに素早くたどり着けるかもしれません。 説明は、以下の順番で読んで頂くのが良いと思いますが、ご存じの項目があれば飛ばして頂いて結構です。 1. インストールするものまず、HTTP/2を実現するにあたって必要となるライブラリなどをインストールします。 ここでは、HTTP/2に必要となるライブラリを含んだApache2.4をインストールして、まずは、非暗号化(平文)のHTTP/1.1サーバとして起動するところまで行います。 非暗号化(平文)のHTTP/1.1サーバが無ければ、無償の証明書発行機関(Let's Encryptプロジェクト)を使うことができませんので、ここから始めます。 2. サーバ証明書次に、TLS通信を行うためのサーバ証明書を導入します。 一般的な有償の証明書発行機関を使う場合と、ACMEプロトコルを使った無償の証明書発行機関(Let's Encryptプロジェクト)を使う場合の2通りを説明しています。 また、Let's Encryptについては、Let's Encryptのサーバ証明書を自動更新する方法についても説明します。 ここでは、HTTP/1.1のHTTPSサーバのとして動作するところまで進めます。 3. HTTP/2の各種設定準備が整ったところで、HTTP/2に必要となる設定を行います。 h2cとh2の設定を行い、h2については、TLSの暗号スイート(アルゴリズム)や、OCSPステープリングについても設定します。また、同一ドメイン間のHTTP→HTTPSリダイレクトを行う場合は、HSTSを設定します。これらは、HTTP/1.1のTLS接続においても有用です。ここに記載のTLS設定を行えば、、QUALYS SSL LabsのSSLサーバテストで、A+をとれます。 h2cについては、ダイレクトモードの有効・無効を設定する方法を説明します。 4. HTTP/2の動作確認HTTP/2の動作確認方法について、説明します。 まず、h2cプロトコルでの通信で確認し、その後、h2プロトコルの通信を試します。 5. HTTP/2のチューニングHTTP/2のプッシュ機能など、チューニングの基本について、説明します。
HTTP/2 応用編1. HTTP/2のチューニング[応用編]Apacheのmod_http2用の応用編チューニングです。 2. HTTP/2のチューニング[TLS応用編]Apacheのmod_http2用のTLS応用編チューニングです。 3. 103 Early HintsとH2PushResource についてApache 2.4.24から導入されたディレクティブを使った際の挙動を調べてみました。 4. mod_http2のリファレンスmod_http2用の設定ファイルのディレクティブはコチラをご覧ください。 5. mod_rewriteの設定例mod_rewrite用の設定例はコチラをご覧ください。 6.TLS接続の確認TLS接続の動作確認方法をまとめました。Google Chromeを利用する方法と、コマンドラインから、OpenSSLを利用する方法を記載しました。特に、OpenSSL1.0.2以降は、証明書の署名アルゴリズムを指定して、TLS接続を開始することができます。 7. サーバ負荷をRSAとECDSAで比較基本編では、Let's Encryptなどの証明書発行機関のRSA暗号署名の証明書について説明しました。サーバ証明書の署名には、RSA暗号のほか、楕円曲線暗号を利用した、ECDSA署名の証明書も入手できます。まずRSA暗号と、ECDSA、ECDHEの違いを理解して、サーバ負荷がどうなるか比較します。 8. 暗号スイートの暗号強度と、公開鍵のビット数の設定ECDHEやRSAなど、鍵交換を行う場合の公開鍵のビット数をどのように決めるとよいか、暗号スイートの選択と併せて、一例を示しています。 9. マルチアルゴリズム証明書の使い方フィーチャーフォン用のサイトを、HTTP/2と同じFQDN名のサーバで運用する際に、フィーチャーフォン用のRSA対応のサーバ証明書と、スマートフォン・PC向けのECDSA対応のサーバ証明書を共存することができます。 10. 2016年度Accessログのまとめ2016年度の当サイトのアクセスログをまとめてみて、HTTP/2の変化を振り返ってみます。 11.HTTP/1.x(HTTP/0.9)の小技HTTP/0.9を無効にする方法を説明します。 12.TLS1.3を設定してみる。TLSv1.3に対応したOpenSSL1.1.1-pre3がリリースされたので、Apache HTTPD WebサーバでTLSv1.3を利用する設定をご紹介します。 13.H2PaddingについてAapche HTTP Webサーバ2.4.39以降で利用できる「H2Padding」ディレクティブの挙動を調べてみました。
Let's Encrypt 応用編1. Let's Encryptの機能のまとめLet's Encryptで、できることの一覧と、最新情報はコチラをご覧ください。 2. Let's Encrypt ベストプラクティス現時点で、最善と思われるLet's Encryptの使い方を紹介します。 3. certbotコマンドの使い方やオプションletsencrypt-autoとほとんど一緒ですが、公式ACMEエージェントとなったcertbotコマンド(ACMEエージェント)のオプションなどを説明します。 4. acme.shスクリプトの使い方やオプションLet's Encrypt非公式ACMEエージェントであるacme.shのオプションなどを説明します。Let's Encryptが、国際化ドメイン名(IDN)に対応したので、IDN取得例もこちらです。 5. letsencrypt-autoコマンドの使い方やオプション基本編では紹介しきれなかったletsencrypt-autoコマンド(ACMEエージェント)のオプションなどを説明します。 6. dehydratedコマンドの使い方やオプションcertbot(letsencrypt-auto)とは別の、ACMEエージェントです。シェルスクリプトベースのため、簡単にLinux以外のOSでも動かしやすいです。楕円曲線暗号ECDSA対応の証明書の取得も簡単です。負荷分散装置を使っている方には、dehydratedのフックを利用した、dns-01認証チャレンジがお勧めです。 7. 自分でCSRを生成して、Let's Encryptをつかう場合CSRを自分で作って、そこから、Let's Encryptを使って、サーバ証明書を発行してもらう方法を説明します。なお、Let's Encryptは、ドメイン認証(DV)なので、ドメイン名(CN)以外は証明書に含まれません。応用例として、HPKPの実装例方法を説明します。 8. ECDSA対応CSRを生成して、Let's Encryptをつかう場合ECDSA対応のCSRを自分で作って、そこから、Let's Encryptを使って、サーバ証明書を発行してもらう方法を説明します。基本は、自分でCSRを生成して、Let's Encryptをつかう場合と同じです。 9. Certification Authority Authorization(DNS CAA)設定認証局(証明書発行機関)もピンキリです。セキュリティー上の問題を含む認証局が、自分のドメインの証明書を他人に発行してしまうこともあり得ます。DNS CAAはDNSに証明書を発行して良い認証局を明示することで、他人への意図しない証明書の発行を防ぎます。 10. nsdを使って、Let's Encryptのdns-01認証チャレンジにより証明書を取得してみる。Let's Encryptのドメイン認証チャレンジには、dns-01と呼ばれるDNSサーバを利用する方法があります。ゾーンファイルと呼ばれるファイルを使ってDNSサーバを設定する方法で利用できるhookスクリプトをご紹介します。 11.ACMEv2を使って、ワイルドカード証明書を取得してみる。Let's EncryptがACMEv2に対応して、ワイルドカード証明書の発行ができるようになりました。acme.shを使って、実際にワイルドカード証明書を取得します。 11.Let's EncryptのCertificate Transparency対応Let's Encryptが、証明書署名タイムスタンプ(SCT : Signed Certificate Timestamp)を証明書に埋め込んで発行することで、CT(Certificate Transparency:証明書の透明性)の監査に対応しました。
IPv6 応用編1. IPv6についてIPv6アドレスの構造を説明し、クライアントのアクセス回線の設定を行います。 2. IPv6の設定の確認(Windowsクライアント編)クライアントのアクセス回線に割り当てられたIPv6アドレスを確認し、IPv6のアドレス自動設定を説明します。 3. IPv6のサーバ設置ネットワークの設定DHCPv6-PDを利用したルータの設定を行い、サーバ設置ネットワークを構築します。 4. IPv6スタティックアドレスの設定DHCPv6-PDの割り当て情報から、スタティックアドレスを決めて、サーバに設定します。 5. IPv6対応ネームサーバのインストールと設定IPv6に対応したDNSサーバを構築し、レジストラに登録します。 6. Apache HttpdのIPv6の設定と確認Webサーバの設定を確認し、IPv6によるアクセスができるか確認します。 7. WebサーバのIPv6対応のススメWebサーバをIPv6に対応させることで、IPv4よりたくさんのお客さんを捌けるようになる可能性があることを説明します。
OpenSSL応用編1. プライベートルート証明書・中間証明書・サーバ証明書の作り方OpenSSLを使って、自分で認証局を作ってみます。いわゆるプライベート認証局です。 ここでは、中間証明書を含む証明書発行について説明します。 2. プライベートルート証明書のクライアント機へのインストールプライベート証明書を作ったら、クライアントにインストールしなければ、暗号化チェーンが完成しません。そこで、Windows、Linux、Solarisへのインストール方法を説明します。 3. プライベート認証局でECDSAサーバ証明書の作り方ECDSAのサーバ証明書を作ります。ここでは、中間証明書はRSAのものを使い、システム全体のパフォーマンスを優先します。 4. OpenSSL3.0.0についてOpenSSL3.0.0の情報を整理します。 5. Apache 2.4.52のOpenSSL3.0系への対応についてApache HTTP Serverがバージョン2.4.52から、OpenSSL3.0系に対応しました。 6. OpenSSL1.1.1についてTLSv1.3に対応したOpenSSL1.1.1について、説明します。 7. OpenSSL1.1.0について現在の長期サポート対象のOpenSSL1.0.2と、OpenSSL1.1.0の違い等について、説明します。 8. OpenSSL1.1.0と以前のバージョンとの互換性OpenSSL1.1.0と以前のバージョンとの互換性の問題で、実際に嵌まったので、記録として残しておきます。 9. OpenSSL1.1.0系の暗号スイートOpenSSL1.1.0の暗号スイートのベンチマークを取り、最適な暗号スイートの設定を検討します。楕円曲線(EC)暗号の処理は、以前計測したベンチマークよりも良くなっています。 10. TLS接続のHTTP/1.1プロトコルの確認コマンドラインのOpenSSLから、GETメソッドなどを使用して、HTTP/1.1プロトコルを試す方法を説明します。特に、Apache HTTPD Webサーバの2.2.32以降もしくは 2.4.24以降は挙動が厳密になっています。 11.あなたのブラウザのTLS/HTTP接続情報ブラウザがTLS接続を開始する際の、鍵交換方式、署名方式、暗号スイートを確認できるページを公開しました。 12.ブラウザ毎のTLS実装の違いについてTLS接続を開始する際に利用できる、鍵交換方式、署名方式、暗号スイートには、ブラウザ毎に特徴があります。これをまとめてみました。 13.Multi-prime RSAを使ってみたOepnSSL1.1.1で新たに対応したMulti-prime RSA、つまり3個以上の素数を使うRSA暗号の秘密鍵を作成し、証明書を作ってみました。
HTML編1. Google Search Consoleに「クリック可能な要素同士が近すぎます」と言われたときの対応Google Search Consoleの「モバイル ユーザビリティ」で「クリック可能な要素同士が近すぎます」と言われてしまいました。このテストに合格するまでに苦労したので、私が試した対処方法を紹介しておこうと思います。
FreeBSD応用編1. Microsoft AzureでFreeBSDをインストールしてみる。Microsoft Azureのマーケットプレイスから、FreeBSD 11.0をインストールして、基本的なパッケージをインストールしてみます。 2. Microsoft AzureのFreeBSDでZFSを設定してみる。Microsoft AzureにインストールしたFreeBSD 11.0にデータディスクを追加してみます。 3. FreeBSDでZFSを設定してみる。追加したデータディスクにZFSを設定してみます。 4. FreeBSDのZFSのACLを設定してみる。ZFSでは、「モード」に加えて、アクセスコントロールリスト(ACL)と呼ばれる新しい形式で、ファイルのアクセス権限を管理します。 5. FreeBSDのタイムゾーンとcronを設定してみる。Azureにインストールした直後のFreeBSDのタイムゾーンは、UTC(世界標準時)で稼働しています。そこで、日本の標準時でログなどを記録するように設定します。 6. FreeBSDをバージョンアップしてみる。AzureにインストールしたFreeBSDのサポート期間が終了していたので、バージョンアップしてみました。 7. FreeBSDで、libinotifyによるディレクトリ監視を使ってみるFreeBSDで、Linuxのinotifyを再現するlibinotifyが利用できるようになったので試して見ました。 8. FreeBSDのemscriptenを使って、C++コードでWebアセンブリの開発してみる。FreeBSDでWebアセンブリの開発をするため、emscriptenのインストール方法、Apacheの設定、C++で記述したコードと、JavaScriptとのデータの連係を説明してみます。
モジュール編1. Apache Moduleのフック関数リストモジュール作りの基本であるフック関数のリストです。
番外編1. Let's Encryptを使ってqmailのTLSv1.2対応Webサービスに、メールはつきもの。ということで、Let's Encryptを利用して、qmailのpop3接続と、SMTP-submission接続の暗号化を行います。HTTP/2と同様に、前方秘匿性(Forward Secrecy)を実現した暗号スイートを使えるようにします。 2. CISCO社のWebVPNを設定してみる。プライベートルート証明書などを利用して、Cisco社のWebVPNの設定を行ってみます。 3. SSH公開鍵認証を使ったログインの手順ECDSAの256ビットの秘密鍵を使う場合を例に、SSH公開鍵認証の手順を説明します。 4. Internet Explorer /Microsoft EdgeのTLS1.2対応Windowsのグループポリシーにおいて、TLSv1.2を使わない設定になっていると、当サイトのようにTLS v1.2しか話さないサーバに接続できなくなります。そこで、TLSv1.2を使うように設定する方法を記載しました。 5.TLS1.2のみ対応のサイトに移行すると、どうなる?TLS1.2のみ対応するようにサーバを設定すると、当然古いブラウザからはアクセスできなくなります。いったいどういったメッセージが表示され、どうなるのか試してみました。 6.wgetコマンドの小技wgetコマンドを使う際に、TLSプロトコルのバージョンをTLSv1.2に指定する方法をご紹介します。 7.Sender Policy Framework(SPF)で嵌まった話qmailにSPFパッチを適用して運用する際に、一番厳しい設定にすると、SPFレコードが存在しないドメインからのメールを受信できなくなります。SPFレコードが存在しない場合に例外設定を用意してメールを受信する方法を紹介します。 8.Adobe Illustratorで、Fireworksの「書き出し」⇒「レイヤーからファイルへ」を実現するスクリプトAdobe Illustratorで、Fireworksの「書き出し」⇒「レイヤーからファイルへ」を実現するスクリプトをつくってみました。 9.User-Agent暗号プロトコル辞典CDN等を使っていると見えてこない、TLS暗号プロトコルと、User-Agentの関係をご覧いただけます。 10.ボット観察日記User-Agent暗号プロトコル辞典に現れた、巡回ロボット(通称ボット、クローラ)の暗号方式の移り変わりなどを記録していきます。 11.Visual Studioからgitを使ってみる。Visual Studioの拡張機能と、自前のサーバのgitを使って、ソースコードの共有を行ってみます。
|