SSL通信や暗号署名などを行う場合に、サーバの証明や署名の証明を行うための機関であり、通常はVerisignなどのセキュリティ大手がサービスしており、IEやFirefoxなどの一般のブラウザに、それらの会社のルート証明書が信頼できる証明書として登録されているため、多くの会社では費用を払って証明を受けている。 ここを参照するとより詳しい仕組みについて理解できると思われる。
CA(Certification Authority:認証局)の設定には、最初にOpenSSLがインストールされていることが必要であり、OpenSSLの導入については、Server/Security/OpenSSL?を参照し、導入した事を前提とする。
最初に、OpenSSLのインストールされた、/usr/local/ssl に移動し、フォルダには bin misc include man lib などのフォルダが作成された事を確認。その後、自分が使うスクリプトをコピーする。
# cd /usr/local/ssl # cp /usr/local/ssl/misc/CA.sh .
コピーが終了し、自分で修正できる環境になったら、CA.shを自分の環境に合わせて修正する。
# emacs CA.sh CATOP=/usr/local/ssl/CA CAKEY=ca.key CAREQ=ca.csr CACERT=ca.crt
OpenSSLの設定ファイルは、openssl.confというものがありここに必要な設定を記述する。
# emacs /usr/local/ssl/openssl.cnf # HOME = . RANDFILE = $ENV::HOME/.rnd oid_section = new_oids [ new_oids ] #--- CA設定 ------------------------------------------------------# [ ca ] default_ca = CA_default # 初期値のCAセクションを下記で指定 [ CA_default ] dir = ./CA # CAのホームディレクトリ設定 certs = $dir/certs # 証明書を保管する場所 crl_dir = $dir/crl # 失効リスト(CRL)を置く場所 database = $dir/index.txt # シリアルと発行した証明書のインデックス new_certs_dir = $dir # 自分が発行した新証明書のフォルダ certificate = $dir/ca.crt # CAの証明書 serial = $dir/serial # 次に発行する証明書の番号 crl = $dir/crl.pem # 自分で失効した証明書のCRL private_key = $dir/ca.key # CAの秘密鍵 RANDFILE = $dir/.rand # デフォルトのランダムファイル x509_extensions = usr_cert # x509のv3拡張を下記に定義 default_days = 365 # 証明書の有効期限 default_crl_days = 7 # CRLの収集間隔 default_md = sha1 # sha1が一般的だがmd5を選択可能 preserve = no # 古いIEのためのオプション policy = policy_match # 発行ポリシーは下記の設定を利用 [ policy_match ] # matchはCAのものと一致、optionalは任意(空欄可)、suppliedは空欄不可 # CSR作成時にmatchのものはCAのものと一致させる必要があります countryName = match # 国名 organizationName = supplied # 組織名 stateOrProvinceName = supplied # 県名 localityName = supplied # 市の名称 organizationalUnitName = optional # 組織の部署名 commonName = supplied # 一般名 emailAddress = optional # e-mailアドレス #--- 証明書要求書の設定 -------------------------------------# [ req ] # 証明書発行要求(CSR)に関する初期値設定 default_bits = 2048 # 公開鍵の鍵長 default_keyfile = ca.key # キー指定しない時の初期秘密鍵 distinguished_name = req_dist_name # 下記に詳細を設定 default_md = sha1 # 初期通信符号の設定 x509_extensions = v3_ca # 自己署名はv3_caを参照 string_mask = nombstr # 2バイト文字禁止 [ req_dist_name ] # Distinguished Nameの詳細設定領域 countryName = Country Name (2 letter code) countryName_default = JP countryName_min = 2 countryName_max = 2 stateOrProvinceName = State or Province Name (full name) stateOrProvinceName_default = Tokyo localityName = City name (full name) localityName_default = Kashiwa-city organizationName = Organization Name (eg, company) organizationName_default = Gamvaro organizationalUnitName = Organizational Unit Name (eg, section) organizationalUnitName_default = sales commonName = Domain Name (when CA, It is Company name) commonName_max = 64 emailAddress = Email Address emailAddress_max = 40 #--- CAを設置する場合 ---# [ usr_cert ] basicConstraints = CA:true subjectKeyIdentifier = hash authorityKeyIdentifier = keyid:always,issuer:always nsCertType = sslCA, emailCA # keyUsage = cRLSign, KeyCertSign #--- 通常のサーバ用の証明書を作成する場合 ---# [ usr_cert ] #basicConstraints = CA:false #nsCertType = server, client # 証明書のタイプは、server, client, email, objsign が組み合わせ利用可能 [ v3_ca ] basicConstraints = CA:true # CAの証明書を発行時はTRUE subjectKeyIdentifier = hash authorityKeyIdentifier = keyid:always,issuer:always #--- KeyUsage の選択できる引数 ---------------------------# # digitalSignature デジタル署名 # nonRepudiation 否認防止 # keyEncipherment 鍵配布 # dataEncipherment データ暗号化 # keyAgreement 鍵の検証 # keyCertSign 鍵署名 # cRLSign 証明書失効リスト(CRL)の検証 # encipherOnly 暗号化のみ # decipherOnly 復号化のみ
# cd /usr/local/ssl/CA # ./CA.sh -newca ( openssl req -new -x509 -keyout ca.key -out ca.crt -days 3650 と同じ) 最初に、エンターを押して新規作成を選び、次に4文字以上のパスを入力 その後必要パラメータを入力して、無事に作成 # openssl x509 -text -in ca.crt <- 出来上がったファイルの確認
CA用のキーからパスフレーズを削除(ここで1回入力すれば後に不要)
# openssl rsa -in ca.key -out ca.key
CRTファイル(ca.crt)をバイナリ形式であるDER(ca.der)に変更する。
# openssl x509 -in ca.crt -outform DER -out ca.der
作成したルートCRT(証明書ファイル)をWEBブラウザが閲覧できる場所において、アクセスする人がダウンロードできるように設定する。
# cp ca.crt /usr/local/apache2/htdocs/ca.crt
その後、このアクセスアドレスを公開して、ブラウザでアクセスしてもらい、証明書をインストールしてもらう必要がある。
作成された csr ファイルを元に署名された形の crt ファイルを作成します。
# openssl ca -in server.csr -out server.crt ( openssl x509 -in server.csr -out server.crt -req -signkey cakey.pem)不明 # chmod 400 server.crt (安全のため権限を制限) # openssl x509 -in server.crt -text -noout (出来上がったファイルの中身をみる)
これで、CRTファイル"server.crt"が作成されます。
以前発行した証明書要求が失効されていない状態で、再度、証明書の発行を行なうと以下のエラーメッセージが出力される。
failed to update database TXT_DB error number 2
この場合は、失効手続きを一度行ってから再発行を行う。
失効させたい証明である、server.crt(x509)のあるフォルダに移動する。その後、下記のコマンドを実行する。
# openssl ca -gencrl -revoke server.crt -out /usr/local/ssl/CA/ca.crl
PEM(Privacy Enhanced Mail) | テキスト形式による証明書データ |
DER(Distinguished Encoding Rules) | ブラウザに組み込まれる証明書(バイナリ) |
CSR(Crtificate Signing Request) | 証明書の署名要求ファイル |
CRT | 署名済みの証明書(当サイトでは、自己証明を行います) |
http://www.linux.or.jp/JF/JFdocs/SSL-Certificates-HOWTO/x169.html
http://www.daily-labo.com/opensslcnf.txt