当社はIT技術のオンライン教育を得意としたセミナー専門会社です。 | 一戸英男

ITエンジニアの技術力UPをお約束します。

HTTP2対応 CaddyWEBサーバで仮想サーバ作る場合のやり方

HTTP2対応 CaddyWEBサーバで仮想サーバ作る場合のやり方


caddy Webサーバで仮想サーバを作る場合は、/etc/caddy/配下にvhostsフォルダを作成し大元の設定ファイルをコピーしてドメインに該当する箇所とSSLの在り処、Pushする箇所のみ書き換えれば良い。
仮想サーバ設定はimportのある最下行だけ削除しましょう。仮想サーバ設定ファイルは名前は何でも良い。拡張子が.confであるならすべてそのフォルダーにあるファイルを読み込んでくれる。 仮想サーバは大元設定ファイル(Caddifile)の一番最下行にあるimport文で仮想ホストのインクルードを行う。ワイルドカードが使えるのでこの一行でvhostsに配置する仮想サーバ設定は終わりだ。 今回はWEBメールのRoundcubeとPhpMyadminを以下の設定を修正してやってみたがあっさり動いた。caddyは設定が簡単でいいね。

※設定ファイルの編集前に事前にフォルダー/etc/caddy/vhostsは作る必要があります。

タグ: , , ,

CentOS7/CentOS6 共通h2o HTTP/2対応Web サーバのインストール with WORDPRESSで動かしてみる。


h2oサーバの導入の動機

h2oを使ってみようと思った理由はHTTP/2.xで通信できることかな。最近のGoogle検索順位は早さも大切な評価ウェイトをしめているためサイトの速度アップは重要なことです。
このHTTP/2.xのプロトコルはHTTPS通信において表示速度を向上させ並列してリクエストを処理できるため、表示速度が向上します。
Nginxも早いのですが、H2OはそのNginxを凌ぐ早さで表示できるようです。通信スレッドはマルチプロセス・マルチスレッド方式です。CPUのコア数に合わせてnum-threadsを設定すれば良いようだ。

h2oのレポジドリーの追加

h2oのインストールはCentOS7/CentOS6で共通です。基本はyumのレポジトリーに以下の記述を追加し保存するだけでyum経由でレポジトリー からのインストールが可能になります。

h2oのインストールと起動

h2oを実際にyumを使ってインストールし、起動する手順になります。

ユーザh2oの作成とドキュメントルート作成&WORDPRESSの設置

SSL & WORDPRESSを動かす際のコンフィグレーション例(h2o.conf)

今回はSSLを使ってh2o環境でWORDPRESSを動かすケースのh2o.confを挙げてみたいと思います。
let’s encryptを使ってSSLライセンス取得し、実験してみました。Let’s Encrypt取得のやり方はここ
ドキュメントルートに/opt/html/content1として、実行ユーザはh2oユーザを新たに作り設定しています。
nginxにも似ている書き方にも感じますが、インデントで設定の範囲がきまるので注意しましょう。
尚、fastCGIをh2oは直接管理できるので通常行うようなfastCGIの設定は不要です。
SSL証明書の項目設定の中でCAファイル(認証局証明、中間証明等)を設定する箇所はありません。
従ってサーバ証明書とCAファイルはcatコマンドで結合を行ってください。結合後に結合ファイルの終点と開始点の間に改行が正しく入っていなかったらエラーになりますので必ず結合の後にチェックが必要です。
最初にサーバ証明書が来るようにするのがポイントです。尚、LetsEncryptの場合fullchain.pemが既に結合されたものです。

おまけ:ソースからのh2oコンパイル

CentOS6.10のデフォルトのgccバージョン(4.4.7)では宣言エラー(同じ関数名で異なるタイプ宣言)が出てしまいました。しかしHomebrewで導入しているgccのバージョン(5.5.0)では 問題なくコンパイルが完了しました。gccバージョン毎のプロトタイプ宣言の解釈と処理の違いがあるようです。尚centOS7,centOS8では簡単にコンパイルできます。ライブラリーが足りないと途中出てきますが2つほどマニュアルでライブラリー追加すれば問題ありません。Ubuntu系の最新バージョンではソースコード中のUINT_MAXをUINT8_MAXに置き換える作業がありましたがこちらもすんなりコンパイル出来ます。

タグ: , , , , , ,

SSL化対応-証明書をWEBサーバに埋め込む


色々なWEBサーバにより指定方法が異なりますが一般的であるApache Webサーバを例にとって説明していきたいと思います。

現在Linuxサーバで使われているApacheのバージョンは概ね2種類の系統がありバージョン2.2系とバージョン2.4系になりますが、バージョンにより設定が若干異なります。

サーバ証明書とサーバーキー(秘密鍵)の設定

まず最初にApache2.2系での設定を見ていこう。


Apache2.2 ssl.confで重要なディレクティブ)

NameVirtualhost *:443
LoadModule ssl_module modules/mod_ssl.so
Listen 443
SSLEngine on
SSLProtocol all -SSLv2 -SSLv3 -TLSV1
SSLCipherSuite HIGH:MEDIUM:!aNULL:!MD5:!SSLv3:!SSLv2:!TLSv1
SSLCertificateFile SSL証明書発行局から頂いているサーバ証明書ファイルのパス
SSLCertificateKeyFile SSL証明書を発行局に申請するCSRファイルを生成する段階で使った秘密鍵ファイル
SSLCertificateChainFile SSL証明書発行局から頂いている中間証明書


Apache2.4 ssl.confで重要なディレクティブ)

Apache2.4からNameVirtualHostは必要でなくなりました。

LoadModule ssl_module modules/mod_ssl.so
Listen 443
SSLEngine on
SSLProtocol all -SSLv2 -SSLv3 -TLSV1
SSLCipherSuite HIGH:MEDIUM:!aNULL:!MD5:!SSLv3:!SSLv2:!TLSv1
SSLCertificateFile
SSLCertificateFile SSL証明書発行局から頂いているサーバ証明書ファイルのパス
SSLCertificateKeyFile SSL証明書を発行局に申請するCSRファイルを生成する段階で使った秘密鍵ファイル

Apache 2.4.8以降をご利用の方

Apache 2.4.8 から中間CA証明書を指定するSSLCertificateChainFile ディレクティブが廃止されたので設定ファイルはコメントのままにしておきましょう。
中間CA証明書、クロスルート証明書の類はサーバ証明書とその他の証明書ファイルマージしてください。そのうえでSSLCertificateFileディレクティブにそのファイルを指定してください。

<<マージの例>>

タグ: , , ,

SSL化対応-証明書の受け取り


SSL証明書の申請が受理される途中段階で発行局により指示がでます。承認方法は何種類か存在します。つまり本人確認を証明するための手段が何種類か存在しその中の何れかを選択あるいは、発行局が指示して承認処理が進みます。

幾つかの承認方法

  • メール確認。whoisに登録されたドメインオーナのメールアドレス、又はどのドメインにもありがちな典型的なメールアドレスに確認用のURLが送られ、そのリンクを踏むと承認される

  • ファイル法。メールアドレスで送られてきた暗号コードが入った内容のファイルを指定フォルダーのファイル設置で発行局が確認し承認が行われる
  • ドメイン法。メールアドレスに送られてきたコードをドメインのTXTレコードに記述することで発行局が確認し承認が行われる

※尚、申請情報に問題があれば上記承認前に却下の通知がメールで届きます。

承認後の流れ

  • メールにアーカイブで証明書類が添付される(概ねZIPファイルで添付かメールテキストラインに暗号化コードが貼り付けられているのを人のファイルに保存)
  • 添付は基本、サーバ証明書、CA発行局のチェーンファイル、CA発行局の証明書が添付されている。チェーンファイルがない場合もある
  • ブラウザに該当の発行局の証明書が存在しない場合はCA発行局の証明書を手動でインストールする必要がある場合が稀に発生する。
  • WEBサーバのサーバ設定ファイル(仮想サーバ設定も含む)に一致するサーバ証明書や発行局の証明ファイルを埋め込んで再起動できるように配置する。

タグ: , , , ,

delegated Reverse Proxy SSL接続 ワンライナーWEBサーバとの連携にどうぞ!


昔からある和製ProxyサーバDelegated Proxy Server。海外のオープンソースがひしめく中で高機能で堅牢なProxyサーバです。他のProxy Serverにはない機能が沢山あり使う度にこんなこともできるんだと感心することもあります。今回の投稿ではこの和製ProxyサーバでSSL接続する方法を紹介したいと思います。


まずはdelegated proxyサーバをダウンロードしましょう。ソースからコンパイルして使うのが良いですね。CentOSというかRedHat系はすんなりコンパイルできますが、Ubuntuは古いバージョンのDelegatedでないと確実にエラーが発生しますので、最新のDelegatedバージョンを入れるならバイナリーをダウンロードして設置しsslwayだけRedhat系でコンパイルしたものを持ってきて使うのが簡単です。当方で確認した限りでは特に問題なくこのやり方でSSLの接続動作しました。何故かsslwayはバイナリーパッケージにはバンドルされていなかった。

Delegated ダウンロード公式ページ(source) Delegated ダウンロード公式ページ (Binary)

※現在の最新は9.9.13でソースからコンパイルするならdelegate9.9.13.tar.gzをダウンロードしてください。

コンパイルの仕方

直接起動スクリプトにパラメータを設定してdelegatedを起動する場合の必要最低限のインストール

Reverse Proxy構成例

起動スクリプトの準備

下記は内部8080ポートで起動しているWEBサーバにproxy転送する場合だ。最近のプログラム言語は自前でWEBサーバが起動できるケースが殆どなので、マルチスレッドで内部WEBサーバを立てローカルホストでListen起動させておけば余計なポート&アドレスへの攻撃から遮断した上で本格的なSSL接続仕様にできる。
Reverse Proxy仕様でSSLを行う場合のメリットは元のサーバのソースコードを弄らなくて良いところ、そして堅牢性に不安がある場合にある一定の防御壁として動作してくれるため通常の外部WSGIサーバ連携などよりもいい場合もある。やはりケースバイケースのSSL接続の方式選択があると思う。

このケースではSSLの証明書は作成時にパスワード無しで処理しているがパスワード付きで証明書を生成しているなら「-pass file:path」or 「-pass pass:password」をsslwayの引数指定で設定すれば問題ない。尚「POODLE」攻撃を防ぐ施策として「-tls1 -tls1_1 -tls1_2 -no_ssl23」の指定を行っている。このパラメータは本サイトで紹介されていないので非公開のスイッチかもしれない。ソースコードから調査して見つけました。ペネトレーションテストでも調査済みで有効なSSLスイッチでした。またCipherSuiteに関しても環境変数(SSL_CIPHER)で指定できることがわかりましたのでご紹介しています。

SSL証明書の指定は-certと-keyが使えるので、もしCA rootの証明書があるならサーバ証明書「-cert」のファイルにサーバ証明書とCA root証明書を結合して設置すればOK。

実行権を付与しdelegatedの起動

タグ: , , , ,