Apacheのユーザー認証制御

Apacheのトップへ戻る

このページはApacheのユーザー認証について、私が過去に経験があるものをまとめてみました。

ここに書かれていることはApacheが完全に動作するのが前提条件です。そのつもりでお願いします。

自作スクリプトも置いてます。ご自由にお使いになるのはかまいませんが、あくまで自己責任でお願いします。何か問題があっても私は一切の責任は負いませんので、そのつもりでね。


ベーシック認証

認証手法 特徴
.htaccessによるユーザー認証 Apacheのベーシック認証を利用するのでもっともお手軽に設置できます。
MySQLを使ったデータベース認証
(Linux編, Windows編)
データベースを使ってユーザー管理をしますので、ユーザー管理がしやすいです。ユーザー数が多い場合はこちらがお勧め。
PHPスクリプトを使った認証 PHPスクリプトを使って認証します。この方法は独自のルールで認証できます。

暗号化認証

暗号化認証とは言っても、Linux+Apache+modSSLの環境では難しくありません。上記ベーシック認証と同じ手法で暗号化認証できす。

ただし、「.htaccessによるユーザー認証」「MySQLを使ったデータベース認証」では80番ポートでも認証できてしまうため、80番ポートを拒否する仕組みが必要となります。
この場合、443ポートへアクセスしたときだけ認証されるように、DocumentRootの設定を工夫してください。

PHPスクリプトを使った認証ではスクリプトで80番ポートからの接続を拒否するようにすればOKですね。

以下にVineLinuxでmod_sslを利用する方法を書きます(たぶん、redhatなどでも同様の操作で利用できると思います)。この作業はすべてrootで行ってください。

  1. rootになります。
    su -
  2. mod_sslのインストールを行います。
    VineLinuxでは、「apt-get install mod_ssl」でインストールしてください。他のデストリビュージョンではrpmをインストールしてください。
  3. 秘密鍵の生成を行います。
    cd /etc/httpd/conf
    make server.key
    Enter PEM pass phrase: パスフレーズの入力
    Verifying password - Enter PEM pass phrase: パスフレーズの再入力
  4. 秘密鍵からパスフレーズを削除します。
    openssl rsa -in server.key -out server.key
    Enter PEM pass phrase: パスフレーズの入力
  5. CSRの生成を行います。(CSRとは、サイト証明書を発行してもらうためのデータです)
    make server.csr
    Country Name (2 letter code) [AU]:JP ←国を入力
    State or Province Name (full name) [Some-State]:Mie ←都市を入力
    Locality Name (eg, city) []:Kuwana ←町を入力
    Organization Name (eg, company) [Internet Widgits Pty Ltd]:Tsuttayo ←会社名などを入力
    Organizational Unit Name (eg, section) []: ←必要ない
    Common Name (eg, your name or your server's hostname) []:tsuttayo.sytes.net ←アドレスを入力
    Email Address []:sg@tsuttayo.sytes.net ←メール・アドレスを入力
    
    Please enter the following 'extra' attributes
    to be sent with your certificate request
    A challenge password []: ←必要ない
    An optional company name []: ←必要ない
  6. 出来上がったserver.csrをベリサインなどの認証局に送るとサイト証明書が発行されます。これをserver.pemなどの名前で保存します。
    もしも認証局を使わずに、自分で署名する場合は次のようにします。
    openssl x509 -in server.csr -out server.pem -req -signkey server.key -days 365
  7. Apacheの設定を行います。httpd.confに以下の行があると思います(コメントになっていると思います)ので、コメントをはずして設定します。
    SSLCertificateFile /etc/httpd/conf/server.pem
    SSLCertificateKeyFile /etc/httpd/conf/server.key
  8. DocumentRootの設定を変える場合は、次の行を探して変えてください。
    <VirtualHost _default_:443>
    DocumentRoot SSLでアクセスしたときのDocumentRoot
  9. Apacheを再起動します。
    /etc/rc.d/init.d/httpd restart

これで設定完了です。https://でアクセス可能か確認してみましょう

Copyright©2001-2019 釣ったよ! All Right Reserved.    sg@tsuttayo.jpn.org