プライベート認証局でアクセス制限
目的
- アクセスできるユーザ・サーバを絞る
構築方法
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 上におく- おいたファイルをダブルクリックして、登録する
画面にアクセスする
注意点