SSL証明書申請用メモ

日付 2016.02.02
タイトル SSL証明書申請用メモ
本文
1. 以下CSR作成用の情報を取得

-----
SSL接続の際のURL (FQDN Common Name)     :
国別記号                                :
都道府県名 (State or Province)          :
市区町村名 (Locality)                   :
申請団体の正式英語組織名 (Organization) :
部門名 (Organizational Unit)            :
-----


2. keyとcsrの作成

# ssl keyのパスワードを決めておいて
su -
mkdir work && cd work
export FQDN=[上記Common Name]

# 2048bit
(openssl genrsa -passout pass:dummy -aes256 -rand /dev/urandom 2048 | openssl rsa -passin pass:dummy) > $FQDN.key 2>/dev/null &&
  chmod 600 $FQDN.key &&
  openssl req -new -days 365 -key $FQDN.key -out $FQDN.csr

## 以前の1024bitで生成しなければいけない場合
#openssl genrsa -des 1024 > $FQDN.key &&
#    openssl rsa -in $FQDN.key -out $FQDN-nopw.key &&
#    chmod 600 $FQDN.key $FQDN-nopw.key &&
#    openssl req -new -days 365 -key $FQDN-nopw.key -out $FQDN.csr

# 申請内容の確認
openssl req -in $FQDN.csr -text

# 生成されたCSRの表示 → この内容/ファイルを提出
cat $FQDN.csr

# 開発などで一時的に代用の証明書を発行する場合は以下を利用
openssl x509 -in $FQDN.csr -out $FQDN.crt -req -signkey $FQDN-nopw.key -days 365


3. 申請

# CSRを証明機関へ提出
# 発行された証明書及び適合する中間証明書の取得


4. 証明書、中間証明書の整合性確認

# サーバ: ACCEPTで起動すれば秘密鍵と証明書は問題なし
>>> openssl s_server -cert [証明書] -key [秘密鍵] -CAfile [中間証明書] -www
Using default temp DH parameters
ACCEPT
<<<

# クライアント: Verify OKになれば問題なし。それ以外は中間証明書に問題あり
>>> openssl s_client -connect localhost:4433 -showcerts
~~~
Verify return code: 0 (ok)
<<<


5. 証明書、中間証明書、キーファイルを設置

# RHEL/CentOS系なら /etc/pki/tls/certs, privateへ



#
# 追記
#
# クライアント認証の一例

# クライアント認証に使用するファイル置き場を作成する
su - 
cd /etc/httpd/conf
mkdir ssl.clcert && cd ssl.clcert && chmod 700 .

# クライアント認証用CA(認証局)の作成
cp -p /usr/share/ssl/misc/CA ./CLCA
>>> vi CLCA
# CATOPを書き換える
CATOP=./clCA
<<<


>>> ./CLCA -newca
#CA certificate filename (or enter to create)
enter
# Country (国)                 : JP
# State/Province (都道府県)    : Tokyo
# City/Location (市区町村)     : Chiyoda-ku
# Organization (組織名)        : Systemix Inc.
# Organizational Unit (部門名) : system
# Common Name (コモンネーム)   : www.systemix.ne.jp
# Email Address []               : info@systemix.ne.jp
<<<

# client証明書の作成
openssl genrsa -des3 -out client.key 1024
>>> openssl req -new -days 365 -key client.key -out clcsr.pem
# Country (国)                 : JP
# State/Province (都道府県)    : Tokyo
# City/Location (市区町村)     : Chiyoda-ku
# Organization (組織名)        : Systemix Inc.
# Organizational Unit (部門名) : system
# Common Name (コモンネーム)   : www.systemix.ne.jp
# Email Address []               : info@systemix.ne.jp
<<<

cp -p /usr/share/ssl/openssl.cnf openssl-client.cnf
>>> vi openssl-client.cnf
# usr_certセクションのnsCertTypeのパラメータが以下の部分をコメントアウト
[ usr_cert ]
~~
nsCertType = client,email
<<<

# web serverに設置する証明書
# JSTは+0900, 期限は -days 365 で指定しても良いです
openssl ca -config openssl-client.cnf \
  -enddate YYMMDDHHMISS+0900 -in clcsr.pem -out clcert.pem

# PCにインストールするキーの作成
openssl pkcs12 -export -in clcert.pem -inkey client.key \
  -certfile clCA/cacert.pem -out clcert.p12

# パーミッションの変更
chmod 700 CLCA
chmod 600 clcert.p12 clcert.pem clcsr.pem client.key openssl-client.cnf
find clCA -type d -exec chmod 700 {} \;
find clCA -type f -exec chmod 600 {} \;

# キーを紛失した、漏れたなどで失効させる場合、以下を実行
openssl ca -config openssl-client.cnf -gencrl -revoke clcert.pem -out clCA/crl/crl.pem

# キーと証明書が正しいペアかどうかを確認
openssl x509 -in $cert_file -noout -text
openssl rsa -in $key_file -noout -text
# 両方のmodules項目が合致すればOK


4. apache2(httpd)の設定
>>> 例
  SSLCertificateFile /etc/httpd/conf/ssl.crt/www.example.com.crt
  SSLCertificateKeyFile /etc/httpd/conf/ssl.key/www.example.com-nopw.key
  SSLCertificateChainFile /etc/httpd/conf/ssl.crt/inca2011.pem 

  # for client certificate test.
  <Location ~ "/test/.+\.php">
    SSLCACertificateFile /etc/httpd/conf/ssl.clcert/clCA/cacert.pem
    SSLVerifyClient require
  </Location>
<<<

SSLCertificateChainFileに証明機関から指定されている中間証明書を、
SSLCACertificateFileに上記操作にて発行した、自分自身のCAの証明書を指定する必
要があります。


参考
OpenSSLを使った証明書取り扱いプログラミング
  http://mars.elcom.nitech.ac.jp/Research/MM/security/openssl/program.html