0
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

mod_auth_openidc で OpenID Connect (OIDC) 認証を --- 1. 準備編

Last updated at Posted at 2022-06-26

Apache HTTP Server + mod_auth_openidc で OpenID Connect (OIDC) 認証が必要な Web サイトを作ってみます。

本記事は「1. 準備編」で、https のサイトを作るところまでです。次の記事は「2. d アカウント・コネクト編」です。

もしかしたらマズい設定などがあるかもしれません。気が付いた方はご指摘いただけるとありがたいです。

環境

とりあえず Windows 10 で WSL2 に Ubuntu 20.04 という環境でやってみます。インストールは済んでいるものとします。異なる環境、異なる設定で試したい場合は適宜必要な変更をするなりして読み替えてください。

IP アドレスとホスト名

Windows から example.com という名前で WSL2 にアクセスできるようにします。Ubuntu のコンソールで

$ hostname -I
172.28.160.85

とするか Windows のコマンドプロンプトで

>wsl -e hostname -I
172.28.160.85

などとすると WSL2 の IP アドレスがわかります。これは起動のたびに毎回変わりますが、上記の例だと 172.28.160.85 ですね。この IP アドレスを使って Windows の C:\Windows\System32\drivers\etc\hosts

172.28.160.85 example.com

というような行(もちろん IP アドレスは毎回変わるのでその時の IP アドレスに変える)を追加します(要管理者権限)。なお、この行は本件の動作確認するときだけ追加し、他のことをするときや、WSL2 を終了するとき、Windows をシャットダウンするときには消すようにします。

SSH

個人的に標準のコンソールがあまり好きではないので WSL2 に SSH でアクセスできるようにします。Ubuntu のコンソールで

$ sudo apt install openssh-server
$ sudo ssh-keygen -A

として OpenSSH をインストールし、ホスト鍵を生成しておきます。また、ユーザの鍵ペアを Windows 側で生成し、公開鍵を Ubuntu の ~/.ssh/authorized_keys に登録しておきます。ここまでは一回だけやれば OK です。

WSL2 では OpenSSH サーバを自動起動してくれないので、WSL2 起動時は毎回 Ubuntu のコンソールから以下を実行して OpenSSH サーバを起動します。

$ sudo service ssh start

これで Windows から example.com へ SSH 接続すると WSL2 の Ubuntu につながるようになります。

Apache HTTP Server

Apache HTTP server をインストールするには、Ubuntu のコンソールで

$ sudo apt install apache2

とします。ここまでは一回だけやれば OK ですが、WSL2 では Apache HTTP Server を自動起動してくれないので、WSL2 起動時は毎回 Ubuntu のコンソールから以下を実行して Apache HTTP Server を起動します。

$ sudo service apache2 start

Windows のブラウザ(Edge など)で http://example.com を開いて Apatch HTTP Server の画面が出てくれば成功です。

オレオレ証明書

http ではなくて https 、つまり https://example.com に警告など無しにアクセスできるようにするためオレオレ証明書を作ります。作り方は何でもよいのですが、ここでは以下のようにしてみました。

作る

まず Ubuntu で

$ cd
$ mkdir -p git/github/trueroad/
$ cd git/github/trueroad/
$ git clone https://github.com/trueroad/make-cert-kit.git
$ cd make-cert-kit/samples/RSA-SHA2/server/

としてから、そこにある csr.conf, extension.cnf に以下のような変更を加えます。

.patch
--- csr.cnf.org
+++ csr.cnf
@@ -17,4 +17,4 @@
 L                      = Some-City
 O                      = Some-Company
 OU                     = Some-Section
-CN                     = www.example.com
+CN                     = example.com
--- extension.cnf.org
+++ extension.cnf
@@ -15,4 +15,4 @@
 subjectKeyIdentifier=hash
 authorityKeyIdentifier=keyid,issuer:always
 
-subjectAltName=DNS:www.example.com
+subjectAltName=DNS:example.com

そして以下のようにしてルート証明書、中間証明書、サーバ証明書を生成します。

$ cd ..
$ make -C root
$ make -C inter
$ make -C server

Apache HTTP Server で使えるようにする

できた証明書などを /etc 以下に入れておきます。

$ sudo cp server/cert.crt /etc/ssl/certs/ssl-cert-test-example-com.pem
$ sudo cp server/private/key.pem /etc/ssl/private/ssl-cert-test-example-com.key
$ sudo mkdir /etc/apache2/ssl.crt
$ sudo cp inter/cert.crt /etc/apache2/ssl.crt/test-intermediate-ca.pem

Windows へのインストールと削除

オレオレ証明書を Windows にインストールします。あくまでもオレオレ証明書なので動作確認するときだけインストールして、動作確認が終わったらすぐに削除するようにした方がよいでしょう。オレオレ証明書を Windows へインストールしたまま使用するのは危険です。

Windows にオレオレ証明書をインストールするには \\wsl$\Ubuntu-20.04\home\trueroad\git\github\trueroad\make-cert-kit\samples\RSA-SHA2\root にある cert.crt を開いて「証明書のインストール」ボタンを押します。証明書ストアの選択では「証明書の種類の基づいて、自動的に証明書ストアを選択する」ではなくて「証明書をすべて次のストアに配置する」を選択し「参照」ボタンを押して「信頼されたルート証明機関」を選びます。

Windows にインストールしたオレオレ証明書を削除するには certmgr.msc を起動して、「信頼されたルート証明機関」→「証明書」の中にある「Test Root CA RSA 4096 with SHA-384」を右クリックして「削除」を選びます。

http/https サイト設定

Ubuntu ではデフォルトのサイトのファイルは /var/www/html 以下に入っていますが、こことは別に example.com 用のファイルを /var/www/example.com 以下に入れるように設定します。

設定ファイル

まず http のデフォルト設定ファイル /etc/apache2/sites-available/000-default.conf を元に http://example.com 用の設定を書いた以下の内容の /etc/apache2/sites-available/001-example.com.conf を置きます。

001-example.com.conf
<VirtualHost *:80>
	ServerName example.com

	ServerAdmin webmaster@example.com
	DocumentRoot /var/www/example.com

	ErrorLog ${APACHE_LOG_DIR}/error.log
	CustomLog ${APACHE_LOG_DIR}/access.log combined
</VirtualHost>

次に https のデフォルト設定ファイル /etc/apache2/sites-available/default-ssl.conf を元に https://example.com 用の設定を書いた以下の内容の /etc/apache2/sites-available/example.com-ssl.conf を置きます。証明書などは上記で /etc/ 以下に入れたものを使用します。

example.com-ssl.conf
<IfModule mod_ssl.c>
	<VirtualHost _default_:443>
		ServerAdmin webmaster@example.com

		DocumentRoot /var/www/example.com

		ErrorLog ${APACHE_LOG_DIR}/error.log
		CustomLog ${APACHE_LOG_DIR}/access.log combined

		SSLEngine on

		SSLCertificateFile /etc/ssl/certs/ssl-cert-test-example-com.pem
		SSLCertificateKeyFile /etc/ssl/private/ssl-cert-test-example-com.key

		SSLCertificateChainFile /etc/apache2/ssl.crt/test-intermediate-ca.pem
	</VirtualHost>
</IfModule>

設定の有効化

デフォルトのサイト設定ファイルを無効化(/etc/apache2/sites-enabled のシンボリックリンクを消す)します。

$ sudo a2dissite 000-default
$ sudo a2dissite default-ssl

example.com のサイト設定ファイルを有効化(/etc/apache2/sites-enabled にシンボリックリンクを作る)します。

$ sudo a2ensite 001-example.com
$ sudo a2ensite example.com-ssl

https でアクセスできるように mod_ssl を有効化(/etc/apache2/mods-enabled にシンボリックリンクを作る)します。

$ sudo a2enmod ssl

コンテンツの配置

以下のような適当なコンテンツを /var/www/example.com/index.html に置きます。

index.html
<DOCTYPE! html>
  <html lang="ja">
    <head>
      <meta charset="UTF-8">
      <title>example.com テストページ</title>
    </head>
    <body>
      <h1>example.com テストページ</h1>
    </body>
  </html>

設定の確認とサービス再起動

Apache HTTP Server の設定が正しいか確認します。Ubuntu のコンソールで

$ sudo apache2ctl configtest
Syntax OK

として上記のように Syntax OK と出たら確認 OK ですので、

$ sudo service apache2 restart

として Apache HTTP Server を再起動します。

動作確認

Windows のブラウザ(Edge など)で https://example.com を開き、警告など無しで「example.com テストページ」が表示されれば成功です。

次回

引き続き d アカウント・コネクトでソーシャルログインできるようにしてみる「2. d アカウント・コネクト編」に続きます。

0
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?