mmts1007’s diary

プログラミング関連の技術系ブログです。

SSL クライアント認証を試してみる

Web サーバへのアクセス制限をするために、 SSL クライアント認証を試してみた。

その時調べた内容や、動作確認をした時の内容などをまとめてみました。

SSL クライアント認証とは

SSL クライアント証明書を利用して、クライアントを認証する方法です。
SSL クライアント証明書を持っているクライアントしか利用できないため、セキュアと言えます。

SSL クライアント証明を理解するために参考になったページ

利用方法

SSL クライアント認証を利用するには

  • クライアント証明書
  • Web サーバの設定

が必要です。

今回は上記内容に加えて

も利用しました。

プライベート認証局

認証局がないと証明書を発行できないため、はじめに認証局を作成します。

プライベート認証局の証明書、サーバー証明書、クライアント証明書の作成方法について | レンタルサーバー・自宅サーバー設定・構築のヒント

を参考に作成しました。

サーバ証明書、クライアント証明書

こちらも

プライベート認証局の証明書、サーバー証明書、クライアント証明書の作成方法について | レンタルサーバー・自宅サーバー設定・構築のヒント

を参考に作成しました。

Web サーバの設定

今回 Web サーバは nginx を利用しました。
以下のリンクを参考に conf ファイルを作成しました。
(conf ファイルはしっかり調べてないので、ベストな設定ではないかも・・・)

ssl.conf

server {
    listen                 443 ssl;
    server_name            www.example.com;
    ssl_certificate        /etc/pki/CA/certs/www.example.com.crt;
    ssl_certificate_key    /etc/pki/CA/private/www.example.com.key;
    ssl_verify_client      on;
    ssl_client_certificate /etc/pki/CA/cacert.pem;
    ssl_protocols          TLSv1 TLSv1.1 TLSv1.2;
    ssl_ciphers            HIGH:!aNULL:!MD5;

    location / {
        root   /usr/share/nginx/html;
        index  index.html index.htm;
    }
}

この ssl.conf を /etc/nginx/conf.d/ に配置し、 nginx を再起動

$ ls /etc/nginx/conf.d/
default.conf  ssl.conf

$ sudo /etc/init.d/nginx start

デモ

Web サーバにリクエストすると、サーバから証明書を求められる f:id:mmts1007:20170909144301p:plain

適切な証明書を選択すると、 nginx の welcome ページが表示される f:id:mmts1007:20170909144327p:plain

証明書を渡さないと、エラーページに遷移される f:id:mmts1007:20170909144349p:plain

(基本参考のリンクばかりになってしまったw)