Happy Growth Engineer

成長と幸せな働き方の両立をするために役に立つ

プライベート認証局でアクセス制限

目的

  • アクセスできるユーザ・サーバを絞る

構築方法

sudo yum -y install mod_ssl openssl

事前準備

CSR情報
■Country                                  JP
■State or Province Name (full name) []:   Tokyo
■Locality Name (eg, city) [Default City]: Shibuya-ku
■Organization         [会社名]
■Organizational Unit  Technical dept.
■Common Name          [ドメイン名]
パスフレーズの用意
パスワード準備する時は、mkpasswd コマンドを使うと簡単にランダムパスワード作成できます
インストール:sudo yum -y expect
コマンド例:mkpasswd -l 16
      (-l オプションで長さを指定できます)

プライベートCA

CAの編集
$ sudo cp -p /etc/pki/tls/misc/CA /etc/pki/tls/misc/CA.org
$ sudo vi /etc/pki/tls/misc/CA
----------
# 有効期限を伸ばす。以下の値を3650(10年)へ
DAYS="-days 365"
CADAYS="-days 1095"
     ↓↓↓↓↓↓
DAYS="-days 3650"
CADAYS="-days 3650"
openssl.cnfの編集
$ sudo cp -p /etc/pki/tls/openssl.cnf /etc/pki/tls/openssl.cnf.org
$ sudo vi /etc/pki/tls/openssl.cnf
--------------------
[ CA_default ]
default_days    = 3650                  # how long to certify for ←上記で対応した内容

[ req_distinguished_name ] # CSRのデフォルト情報を設定しておく(上述のCSR情報)
countryName_default             = JP
stateOrProvinceName_default    = Tokyo
localityName_default    = Shibuya-ku
0.organizationName_default      = [会社名]
organizationalUnitName_default = Technical dept.
構築
$ sudo cp -p /etc/pki/tls/openssl.cnf /etc/pki/tls/openssl-ca.cnf
$ sudo vi /etc/pki/tls/openssl-ca.cnf
-----
[ usr_cert ]
basicConstraints=CA:TRUE  # デフォルトでCA証明書として使用

[ v3_ca ]
nsCertType = sslCA, emailCA  # デフォルトでSSL認証局、電子メール認証局とする

$ cd /etc/pki/tls/
$ sudo /etc/pki/tls/misc/CA -newca
サーバ証明書
$ sudo cp -p /etc/pki/tls/openssl.cnf /etc/pki/tls/openssl-server.cnf
$ sudo vi /etc/pki/tls/openssl-server.cnf
-------
[ usr_cert ]
basicConstraints=CA:FALSE # デフォルトでCA証明書として使用しません
nsCertType = server # デフォルトでサーバー用証明書を作成します

$ cd /etc/pki/tls/
$ sudo /etc/pki/tls/misc/CA -newreq
認証局署名を入れたサーバ証明書を作成
$ cd /etc/pki/tls/
$ sudo /etc/pki/tls/misc/CA -sign

Sign the certificate? [y/n]:y
1 out of 1 certificate requests certified, commit? [y/n]y
移動
$ sudo mv /etc/pki/tls/newcert.pem /etc/pki/CA/certs/[ドメイン名].crt
サーバ用秘密鍵パスフレーズ埋め込み
$ sudo openssl rsa -in /etc/pki/tls/newkey.pem -out /etc/pki/CA/private/[ドメイン名].key

クライアント証明書

クライアント用にOpenSSLの設定ファイル
$ sudo cp -p /etc/pki/tls/openssl.cnf /etc/pki/tls/openssl-client.cnf
$ vi /etc/pki/tls/openssl-client.cnf
----------
[ usr_cert ]
...
basicConstraints=CA:FALSE # デフォルトでCA証明書として使用しません
nsCertType = client, email, objsign # デフォルトでクライアント用証明書を作成します
クライアント用の証明書作成
$ cd /etc/pki/tls/
$ sudo /etc/pki/tls/misc/CA -newreq
認証局の署名を入れたクライアント証明書
$ cd /etc/pki/tls/
$ sudo /etc/pki/tls/misc/CA -sign
作成したクライアント用証明書、秘密鍵PKCS#12フォーマットに変換
$ cd /etc/pki/tls/
$ sudo openssl pkcs12 -export -in newcert.pem -inkey newkey.pem -out client.[ドメイン名].pfx -name "[ドメイン名]"

クライアント証明書、秘密鍵等を整理

$ sudo mkdir -p /etc/pki/CA/client/certs/
$ sudo mkdir -p /etc/pki/CA/client/private/

$ sudo mv /etc/pki/tls/newcert.pem /etc/pki/CA/client/certs/client.[ドメイン名].crt
$ sudo mv /etc/pki/tls/newreq.pem /etc/pki/CA/client/private/client.[ドメイン名].csr
$ sudo mv /etc/pki/tls/newkey.pem /etc/pki/CA/client/private/client.[ドメイン名].key
$ sudo mv /etc/pki/tls/client.[ドメイン名].pfx /etc/pki/CA/client/private/

Apache の設定

$ sudo vim /etc/httpd/conf.d/ssl.conf
-> 全コメントアウト

$ sudo vim /etc/httpd/conf.d/zzz_application.conf
-----
LoadModule ssl_module modules/mod_ssl.so
Listen 443
NameVirtualHost *:443
SSLSessionCache         shmcb:/var/cache/mod_ssl/scache(512000)
SSLSessionCacheTimeout  300

<VirtualHost *:80>
  <IfModule mod_rewrite.c>
    RewriteEngine On
    RewriteLog /var/log/httpd/rewrite.log
    RewriteLogLevel 1
    RewriteCond %{HTTP:X-Forwarded-Port} !^443$
    RewriteRule ^(.*)?$ https://%{HTTP_HOST}$1 [R=301,L]
  </IfModule>
</VirtualHost>

<VirtualHost *:443>
  SSLEngine on
  SSLProtocol all -SSLv2
  ServerName [ドメイン名]
  DocumentRoot /var/www/html/application/public
  ErrorLog /var/log/httpd/application_error.log
  TransferLog /var/log/httpd/application_access.log
  SSLCertificateFile /etc/pki/CA/certs/[ドメイン名].crt
  SSLCertificateKeyFile /etc/pki/CA/private/[ドメイン名].key
  SSLCACertificateFile /etc/pki/CA/cacert.pem
  SSLVerifyClient require
  SSLVerifyDepth  10

  PassengerEnabled on
  PassengerPoolIdleTime 0
  RailsMaxPoolSize 4
  RailsPoolIdleTime 86400

  <Directory /var/www/html/application/public>
   AllowOverride all
   Options -MultiViews
   Order allow,deny
   allow from all
  </Directory>
</VirtualHost>

PC からサーバにアクセスする方法

  • client.[ドメイン名].pfx を PC 上におく
  • おいたファイルをダブルクリックして、登録する
  • 画面にアクセスする

  • 注意点

    • FireFox はアクセスできないようなので、気をつけてください
    • 参考URL

参考資料