#floatcontents
 * OpenSSLで作成した鍵をSSHの公開鍵認証に使う [#ic6bb2f8]
 SSHの公開鍵認証を行う際には新規にキーペアを作ることが多いと思いますが、下記で説明するOpenSSLで作成した個人証明書をSSHの公開鍵認証に使う方法をメモしておきます。SSHのキーペアを作成する際にも使用するssh-keygenを使います。~
 秘密鍵newkey.pemを元に作成します。~
 オプション''-y''で秘密鍵からauthorized_keys用の公開鍵文字列を作成できます。コマンドは以下の通り。
  % ssh-keygen -y -f newkey.pem
  Enter passphrase:(秘密鍵のパスフレーズ)
  ssh-rsa AAAA....
 というようなssh-rsaに続く文字列が出力されます。これをauthorized_keysに追加すれば、newkey.pemを用いて公開鍵認証を行うことが可能です。追加する場合は以下のような感じ。
  % ssh-keygen -y -f newkey.pem >> /home/dobuo/.ssh/authorized_keys
 なおnewkey.pemを使う時はid_rsaとして保存しておきます。
  % cp newkey.pem /home/dobuo/.ssh/id_rsa
  % chmod 600 /home/dobuo/.ssh/id_rsa
 
 ** よく忘れること [#s5928d80]
 なお、authorized_keysを新規作成した場合はパーミッションを600にセットしておかないと、
  Authentication refused: bad ownership or modes for file /home/dobuo/.ssh/authorized_keys
 と怒られて認証が失敗します。(secureログに出力されるので一般ユーザーだと気付かないかも・・・)
 
 * OpenSSLによる証明書作成等の作業 [#hc62cce4]
 ネット上を探せばOpenSSL関係の解説を数多く見つけることはできますが、自分用にちょっとメモしておきます。
 
 ** 環境設定 [#e952f5b3]
 この解説では作業を全て一般ユーザーで行います。ここではユーザー名をdobuo、ホームディレクトリを/home/dobuoとして進めます。~
 まずは環境設定を行います。証明書作業を行うディレクトリを/home/dobuo/certs以下とします。
 
 *** ディレクトリの作成と設定ファイルのコピー [#z0af7efe]
  % mkdir /home/dobuo/certs
  % cp /usr/share/ssl/misc/openssl.cnf /home/dobuo/cert  <-- 設定ファイルのコピー。CentOSでは/etc/pki/tls/openssl.cnfをコピー
 
 *** 環境変数の設定 [#m2669f09]
 スクリプトにパスを通しますが、ディストリビューションにより場所が異なるようです。Vineでは/usr/share/ssl/misc、CentOSでは/etc/pki/tls/miscです。
 :bashの場合|
  export PATH=/usr/share/ssl/misc:$PATH
  export CATOP=$HOME/certs/'''BioKidsCA'''               <-- CAディレクトリ名前は任意
  export SSLEAY_CONFIG="-config $HOME/certs/openssl.cnf" <-- 使用する設定ファイルを指定
 
 :tcshの場合|
  setenv PATH /usr/share/ssl/misc:$PATH
  setenv CATOP $HOME/certs/'''BioKidsCA'''
  setenv SSLEAY_CONFIG="-config $HOME/certs/openssl.cnf"
 
 *** openssl.cnfの修正 [#o551ce67]
 ディフォルト値などの状況に合わせて修正します。/home/dobuo/certs/openssl.cnfを修正を行います。修正のポイントは以下。
 - CAディレクトリの場所
 - 鍵長
 
 + CAディレクトリの場所 &color(red){''必須''};
 35行目付近のdirパラメータ
  37: #dir            = ./demoCA              # Where everything is kept
  38: dir             = $ENV::CATOP           # Where everything is kept <-- 環境変数CATOPを参照する
 
 + 鍵長を2048bitsにする
 101行目付近のdefault_bitsパラメータ
  101: [ req ]
  102: #default_bits           = 1024
  103: default_bits            = 2048
 
 ** プライベート認証局の構築 [#a63259a2]
 設定ができたら、まずはプライベート認証局(CA)を構築します。
 
 *** 入力項目について [#qbe1f44e]
 入力項目はサイトのポリシーにあわせればいいと思いますが、ここでは国名(C)、組織名(O)、部局名(OU)を入力しました。もちろんCommon Name(CN)は必須です。それ以降の部分は空でも問題ないでしょう。~
 ただし、ディフォルトのopenssl.cnfではState or Provine Name(ST)が必須になっているので、不要な場合は以下の部分を修正します。
  78: # For the CA policy
  79: [ policy_match ]
  80: countryName             = match    <-- matchはCA署名の際に確認されるためめ入力項目として必要
  81: stateOrProvinceName     = match
  82: organizationName        = match
  83: organizationalUnitName  = optional <-- optionalは署名の際なくてもよい
  84: commonName              = supplied <-- CSRで指定される
  85: emailAddress            = optional
 この部分のstateOrProvinceNameを''optional''に変更することでSTを外すことができます。~
 なお、初期値等は以下の部分で指定します。
  125: [ req_distinguished_name ]
  126: countryName                     = Country Name (2 letter code)
  127: countryName_default             = JP
  128: countryName_min                 = 2
  129: countryName_max                 = 2
  130:
  131: stateOrProvinceName             = State or Province Name (full name)
  132: #stateOrProvinceName_default    = Some-State
 この部分の''stateOrProvinceName''_defaultなどの項目を変更すれば初期値が変わります。不要の場合はコメントアウトしておきます。
 
 *** 構築作業 [#jdee10d7]
 設定が済んだら作業に入ります。作業はCAシェルスクリプトを用いて行います。ディストリビューションによって場所が異なると思われますが、Vine 5では''/usr/share/ssl/misc/CA''、CentOS 5では''/etc/pki/tls/misc/CA''です。環境設定でパスが通っているはずです。
  % CA -newca
  CA certificate filename (or enter to create)
  (何も入力せずにEnter)
  Making CA certificate ...
  Generating a 2048 bit RSA private key
  .............+++
  .....+++
  writing new private key to '/home/nobrin/certs/BioKidsCA/private/./cakey.pem'
  Enter PEM pass phrase: (秘密鍵のパスフレーズを設定)
  Verifying - Enter PEM pass phrase: (確認のため再入力)
  ...(省略)...
  Country Name (2 letter code) [JP]: JP
  State or Province Name (full name) []: (openssl.cnfで修正していない場合は入力が必要;後述)
  Locality Name (eg, city) []:
  Organization Name (eg, company) [BioKids]: BioKids (組織名/会社名)
  Organizational Unit Name (eg, section) [BioKids Operations]: BioKids Operations (部局名)
  Common Name (eg, YOUR name) []: BioKids Private CA (CAの名前)
  Email Address []:
  
  Please enter the following 'extra' attributes
  to be sent with your certificate request
  A challenge password []:
  An optional company name []:
  ...(省略)...
  Write out database with 1 new entries
  Data Base Updated
 これで/home/dobuo/certs/BioKidsCA以下に認証局が構築されました。
 
 ** 証明書署名要求の作成およびCAによる署名 [#h79f2595]
 CAが構築できたら、証明書の作成を行うことができます。証明書は以下のように作成されます。
 + 申請者による証明書署名要求(CSR)の作成
 + CAによるCSRへの署名
 
 混乱しやすいのはCSRの作成と署名が別人格で行われるということです(作業するユーザーは同一)。CSRはその名の通り''要求''なので申請者がCAに対して「この内容を証明してね」という申請書の作成になり、それに対してCAが署名する、という流れです。ここでは作業するユーザーは同一なので、申請者とCAの役割を演じる「一人ごっこ遊び」と考えればいいのかもしれません。
 
 *** CSRの作成(申請者) [#j2427d3e]
 基本的にはCAの構築とあまり変わりません。ユーザーdobuoで行いますが、今は申請者として作業を行います。従って、この作業はCAには影響を与えません。~
 ここではBioKidsのBioKids Authors部門に所属するDobuo(/C=JP/O=BioKids/OU=BioKids Authors/CN=Dobuo)という設定で申請してみます。なお、上記の設定で作成したCAは国名および組織名を一致したものに署名するようになっているので、国名および組織名はCAとあわせる必要があります。
  % CA -newreq
  Generating a 2048 bit RSA private key
  ......................+++
  ....................+++
  writing new private key to 'newkey.pem'
  Enter PEM pass phrase: (作成する秘密鍵のパスフレーズ)
  Verifying - Enter PEM pass phrase: (再入力)
  ...(省略)...
  Country Name (2 letter code) [JP]:
  State or Province Name (full name) []:
  Locality Name (eg, city) []:
  Organization Name (eg, company) [BioKids]:BioKids
  Organizational Unit Name (eg, section) [BioKids Operations]:BioKids Authors
  Common Name (eg, YOUR name) []:Dobuo
  Email Address []:
  ...(省略)...
  Request is in newreq.pem, private key is in newkey.pem
 この作業により、秘密鍵newkey.pemおよびCSR newreq.pemが作成されます。newkey.pemは秘密鍵なので大切に保管します。署名を申請する際に必要なのはnewreq.pemです。
 
 *** CSRへの署名(CAとして) [#lca29c81]
 申請者として作成したnewreq.pemがあるディレクトリで署名スクリプトを実行します。
  % CA -sign
  Using configuration from /home/nobrin/certs/openssl.cnf
  Enter pass phrase for /home/nobrin/certs/BioKidsCA/private/cakey.pem: (CAの秘密鍵のパスフレーズ)
  Check that the request matches the signature
  Signature ok
  Certificate Details:
          Serial Number:
              XX:XX:XX:XX:XX:XX:XX:XX
          Validity
              Not Before: Nov 23 02:14:42 2011 GMT
              Not After : Nov 22 02:14:42 2012 GMT
          Subject:
              countryName               = JP
              organizationName          = BioKids         <-- CSRに記載された組織名
              organizationalUnitName    = BioKids Authors <-- CSRに記載された部局名
              commonName                = Dobuo           <-- CSRに記載されたCommon Name
          X509v3 extensions:
              X509v3 Basic Constraints:
                  CA:FALSE
              Netscape Comment:
                  OpenSSL Generated Certificate
  
  Certificate is to be certified until Nov 22 02:14:42 2012 GMT (365 days)
  Sign the certificate? [y/n]:y (署名の確認)
  1 out of 1 certificate requests certified, commit? [y/n]y (実行確認)
  Write out database with 1 new entries
  Data Base Updated
  Certificate:
      Data:
         ...(証明書の内容が表示される)...
  -----END CERTIFICATE-----
  Signed certificate is in newcert.pem
 ここで作成されたnewcert.pemが証明書です。CSR作成の際に生成されたnewkey.pemとペアになります。
 - newkey.pem -- 申請者Dobuoの秘密鍵
 - newcert.pem -- 申請者Dobuoの証明書
 
 これらを原本として、SSHの認証やその他のクライアント認証などに使用することができます。