coLinux日記

coLinuxはフリーソフトを種として、よろずのシステムとぞなれりける。

OpenSSL 1.0.1c の再インストール

2012-06-07 22:27:54 | OpenSSL
前回コンパイルした OpenSSL を使うと、後で御紹介する httpd のコンパイル時に、例えば、

/usr/local/ssl/lib/libcrypto.a(c_zlib.o): In function `bio_zlib_free':
c_zlib.c:(.text+0x6f): undefined reference to `inflateEnd'
c_zlib.c:(.text+0x8b): undefined reference to `deflateEnd'

のようにlibcrypto.a で名前の解決できないものがあることが分かりました。ここで利用している、coLinux の Fedora14では起こりますが、最近のバージョンでは解決しているかもしれません。

そこで、config のオプションを変えてみます。(以下では、shared が無くても結果は同じです。)

$ ./config -I/usr/local/include -L/usr/local/lib shared zlib-dynamic
..........
$ make
..........
$ make test
.............................
zlib
3075692168:error:25066067:DSO support routines:DLFCN_LOAD:could not load the shared library:dso_dlfcn.c:187:filename(libz.so): libz.so: cannot open shared object file: No such file or directory
3075692168:error:25070067:DSO support routines:DSO_load:could not load the shared library:dso_lib.c:244:
3075692168:error:29064065:lib(41):BIO_ZLIB_NEW:zlib not supported:c_zlib.c:478:
3074303624:error:25066067:DSO support routines:DLFCN_LOAD:could not load the shared library:dso_dlfcn.c:187:filename(libz.so): libz.so: cannot open shared object file: No such file or directory
3074303624:error:25070067:DSO support routines:DSO_load:could not load the shared library:dso_lib.c:244:
3074303624:error:29064065:lib(41):BIO_ZLIB_NEW:zlib not supported:c_zlib.c:478:
cmp: EOF on ./p.zlib.clear
make[1]: *** [test_enc] Error 1
make[1]: Leaving directory `/home/espiya/src/openssl-1.0.1c/test'
make: *** [tests] Error 2
$

このようにテストでエラーになります。zlib 周りで何かあるようですから、こちらの環境では、OpenSSL 1.0.1c コンパイル時に zlib を指定するのは止めて、以下のように修正します。

$ ./config shared
..........
$ make
..........
$ make test
..............................
Zlib not supported: compression tests skipped
ALL TESTS SUCCESSFUL.
make[1]: Leaving directory `/home/espiya/src/openssl-1.0.1c/test'
OPENSSL_CONF=apps/openssl.cnf util/opensslwrap.sh version -a
OpenSSL 1.0.1c 10 May 2012
built on: Tue Jun 5 10:21:24 EDT 2012
platform: linux-elf
options: bn(64,32) rc4(8x,mmx) des(ptr,risc1,16,long) idea(int) blowfish(idx)
compiler: gcc -fPIC -DOPENSSL_PIC -DOPENSSL_THREADS -D_REENTRANT -DDSO_DLFCN -DHAVE_DLFCN_H -Wa,--noexecstack -DL_ENDIAN -DTERMIO -O3 -fomit-frame-pointer -Wall -DOPENSSL_BN_ASM_PART_WORDS -DOPENSSL_IA32_SSE2 -DOPENSSL_BN_ASM_MONT -DOPENSSL_BN_ASM_GF2m -DSHA1_ASM -DSHA256_ASM -DSHA512_ASM -DMD5_ASM -DRMD160_ASM -DAES_ASM -DVPAES_ASM -DWHIRLPOOL_ASM -DGHASH_ASM
OPENSSLDIR: "/usr/local/ssl"
$

# make install 2>&1 |tee Install.log

Zlib はサポートされない OpenSSL ですが、今後はこれを使用することにします。
コメント
  • X
  • Facebookでシェアする
  • はてなブックマークに追加する
  • LINEでシェアする

OpenSSL 1.0.1c のインストール

2012-06-03 21:40:49 | OpenSSL

またまた一年以上お休みしてしまいました。

その間に今までご紹介したソフトウェアのバージョンがどんどん上がってしまいました。さすがに古すぎると思えてきましたので、ここらで最新のものに置き換えていきたいと思います。

現在 Fedora 14 を colinux 0.7.9 で使っていますが、各プログラムをソースからインストールするには、以前に説明したように開発環境をインストールする必要があります。

# yum install gcc gcc-c++ flex bison

Fedora 14 も古くなりましたので、ここで扱う各種ソフトウェアをインストールするには、ほとんどソースから行う必要があります。そういう経験をするには  coLinux は相変わらず役立ちます。

今回は、OpenSSL をインストールしてみましょう。最初に zlib をインストールする必要があります。最新版は、1.2.7 です。ソースの信頼性の確認は面倒でも必ず行いましょう。

$ md5sum zlib-1.2.7.tar.gz
60df6a37c56e7c1366cca812414f7b85  zlib-1.2.7.tar.gz

$ tar xzf zlib-1.2.7.tar.gz
$ cd zlib-1.2.7
$ ./configure

$ make

# make install 2>&1 |tee Install.log

これで準備ができました。早速 OpenSSL 1.0.1c をインストールします。注意することは、先ほど /usr/local/ にインストールした zlib を利用する点です。

$ md5sum openssl-1.0.1c.tar.gz
ae412727c8c15b67880aef7bd2999b2e  openssl-1.0.1c.tar.gz

$ tar xzf openssl-1.0.1c.tar.gz
$ cd openssl-1.0.1c.tar.gz
$ ./config -I/usr/local/include -L/usr/local/lib zlib

$ make
.....
$

ここで、OpenSSL の場合は、テストして確認しておきます。

$ make test
..............
ALL TESTS SUCCESSFUL.
make[1]: Leaving directory `/home/espiya/src/openssl-1.0.1c/test'
OPENSSL_CONF=apps/openssl.cnf util/opensslwrap.sh version -a
OpenSSL 1.0.1c 10 May 2012
built on: Thu Jun 03 11:59:43 EDT 2012
platform: linux-elf
options:  bn(64,32) rc4(8x,mmx) des(ptr,risc1,16,long) idea(int) blowfish(idx)
compiler: gcc -DZLIB -DOPENSSL_THREADS -D_REENTRANT -DDSO_DLFCN -DHAVE_DLFCN_H -I/usr/local/include -Wa,--noexecstack -DL_ENDIAN -DTERMIO -O3 -fomit-frame-pointer -Wall -DOPENSSL_BN_ASM_PART_WORDS -DOPENSSL_IA32_SSE2 -DOPENSSL_BN_ASM_MONT -DOPENSSL_BN_ASM_GF2m -DSHA1_ASM -DSHA256_ASM -DSHA512_ASM -DMD5_ASM -DRMD160_ASM -DAES_ASM -DVPAES_ASM -DWHIRLPOOL_ASM -DGHASH_ASM
OPENSSLDIR: "/usr/local/ssl"

#  make install 2>&1 |tee Install.log

これで OpenSSL が、/usr/local/ssl へインストールされました。

/usr/local/ssl/openssl.cnf をざっと見てみると、default_md = sha1 の指定が無くなったようです。

コメント
  • X
  • Facebookでシェアする
  • はてなブックマークに追加する
  • LINEでシェアする

OpenSSLについて その5

2007-02-12 08:52:45 | OpenSSL
長い間 coLinux で OpenSSL 0.9.8a をいろいろ試してきましたが、ついでにクライアント認証もしてみます。SSL:クライアント認証が参考になります。これも、openssl.cnf を修正する必要がありそうです。この場合は、
basicConstraints = CA:FALSE
nsCertType = client, email

らしいです。
この client は、クライアント認証のように自分(この証明書を持っていて相手に送りつける)はクライアントであるという意味みたいですね。それでサーバ用の証明書は自分はサーバであるから server で、自己認証型の証明書は自分は認証局なので sslCA ということみたいです。本当かどうかはともかく一応納得しました。
httpd のバージョンアップを考えて、ここではキーの置く場所は独立していたほうが良いので、
# mkdir /usr/local/keys
# mkdir /usr/local/keys/CA
# mkdir /usr/local/keys/server
# mkdir /usr/local/keys/key1

としてCA、サーバ関係、クライアント用は独立して入れるようにします。書いてありませんが、コピーが終わったらキー関係はすべて消しました。
# cd /usr/local/httpd224/conf
# mv server.crt /usr/local/keys/server/server.crt
# mv server.key /usr/local/keys/server/servernp.key
# cp /usr/local/CA/cacert.pem  /usr/local/keys/CA/cacert.crt
#

準備ができたので早速クライアント用の秘密鍵とCAで署名した証明書を作ります。
まず、openssl.cnf の[ usr_cert ] セクションを修正します。
basicConstraints=CA:FALSE
nsCertType = client, email
# keyUsage = nonRepudiation, digitalSignature, keyEncipherment

最後の keyUsage は、最初からこのようにコメントになっているものですが、問題になってからはずすことにします。ここでは参考までに書いてあるだけです。秘密鍵と証明書の作成する openssl req と openssl ca は、CA.sh -newreq と CA.sh -sign と同じものですからこれを利用します。
# cd /usr/local/keys/key1
# /etc/pki/tls/misc/CA.sh -newreq
...........  秘密鍵のパスフレーズを設定
# /etc/pki/tls/misc/CA.sh -sign
...........   CAのパスフレーズを入力

これで、秘密鍵 newkey.pem と 証明書 newcert.pem が作成されました。newreq.pem はCSRなので消しても良いです。

クライアント用証明書は、Windows では PKCS#12 形式にする必要があるそうなので変換します。
# openssl pkcs12 -export -clcerts -inkey newkey.pem -in newcert.pem -out newclient.p12
................  秘密鍵のパスフレーズを入力
................  クライアント用証明書のパスワードを設定
#

設定する人には、newclient.p12 を渡してクライアント用証明書のパスフレーズを教えます。

後は Windows 上でインポートすればここで生成した秘密鍵などはサーバ側では必要ないみたいなので、ほかに見えないように、ディレクトリ key1 を 0700 にしておきます。

Apache httpd 2.2.4 用の設定の修正は、/usr/local/httpd224/conf/extra/httpd-ssl.conf 内で、
SSLCertificateFile /usr/local/keys/server/server.crt
SSLCertificateKeyFile /usr/local/keys/server/servernp.key
SSLCACertificatePath /usr/local/keys/CA/
SSLCACertificateFile /usr/local/keys/CA/cacert.crt
SSLVerifyClient require
SSLVerifyDepth 10

のようにしました。最後の10は最初からコメントに書いてあったとおりです。

これで最初に証明書がない場合を試したところ、Internet Explorer では、「デジタル証明書の選択」ウィンドウが表示されてページが開けませんでした。

先ほどの newclient.p12 は、Windows では、Personal Information Exchange として表示されます。このファイルを右クリックすると「PFXのインストール」メニューがでますのでこれをクリックします。途中 newclient.p12 作成したパスワードを聞かれます。もう一度ブラウザで見ると、「デジタル証明書の選択」ウィンドウの名前と発行者に証明書が現れて「OK」をクリックするとページが参照できました。そのとき、鍵アイコンをクリックして表示される証明書は、SSLCertificateFile で指定した証明書でした。他の人がこのPC を使っても見えないようにする場合は、毎回パスフレーズを入力するようにもできます。

FireFox では newclient.p12 をインポートしていなければ、-12227 エラーになりました。そこで、newclient.p12 を「証明書マネージャ」→「あなたの証明書」でインポートしました。そのときパスワードを聞いてきます。2つ聞いてきますが適当に入力したので覚えていません。

ここでわざと登録してある「認証局証明書」を削除すると newclient.p12 の「用途」が不明になり、原因不明の問題により、.... のが表示されますが、「認証局証明書」がインポートしてあると「用途」がクライアントになり「SSLクライアント証明書」として認識されました。

また証明書の失効は、
証明書の失効とCRLの発行http://www.daily-labo.com/ygg16_4.htmlを参考にすればよさそうです。早速ためしてみます。
# echo '00' >/usr/local/CA/crlnumber ( crlnumber ファイルがないときだけ作成する。 )
# cd /usr/local/keys/key1
# openssl ca -gencrl -revoke newcert.pem
.............. CA のパスフレーズを入力
# cd /usr/local/CA
# openssl ca -gencrl -out key1-crl.pem
.............. CA のパスフレーズを入力
# mkdir /usr/local/keys/crl
# cp key1-crl.pem /usr/local/keys/crl/key1-crl.pem

Apache httpd に CRLを指定するため、/usr/local/httpd224/conf/extra/httpd-ssl.conf の修正をします。
SSLCARevocationFile /usr/local/keys/crl/key1-crl.pem

これで、newclient.p12 をインポートしたブラウザでもアクセスできなくなります。もちろん新しいクライアント証明書があれば再び見られるようなりました。

おまけで、SSLCARevocationPath を指定する場合は、ハッシュ値のファイル名が必要らしいです。その場合は以下のようにするそうです。
ln -s cacert.crt `openssl x509 -noout -hash < cacert.crt`.0

しかし、これを試してもうまくいかなかったので、ご利用の際は必ず確認してください。

今回で OpenSSL については一応完了です。
コメント
  • X
  • Facebookでシェアする
  • はてなブックマークに追加する
  • LINEでシェアする

OpenSSLについて その4

2007-02-10 23:05:19 | OpenSSL
前回わかったことから、openssl ca コマンド実行時に /etc/pki/tls/openssl.cnf をいちいち修正することにしました。

CA証明書を作るときは、[ usr_cert ] セクションに
basicConstraints = CA:true
nsCertType = sslCA, emailCA
keyUsage = cRLSign, keyCertSign

サーバ証明書を作るときは、[ usr_cert ] セクションに
basicConstraints = CA:FALSE
nsCertType = server,client,email

を指定してみました。keyUsage を指定したのは、公式な CA の証明書 RSA Security Inc - RSA Security 1024 v3 などからの類推です。作成したCA証明書 cacert.der を FireFox にインポートしてみると、インポート時の「証明書を表示」では、

「原因不明の問題により、この証明書の有効性を検証できませんでした。」

と表示されてしまいますが、無視して「OK」でインポートしてしまってから、「証明書マネージャ」ウィンドウの「認証局証明」で、fedora.example.co.jp を選択して、「表示」で「証明書ビューア」ウィンドウが開いたら、「一般」で、

この証明書は以下の用途に使用する証明書であると検証されました。
SSL認証局

のように表示されて、うまく?いきました。FireFox で該当ページを見て、サーバの証明書を「証明書ビューア」で確認すると、

この証明書は以下の用途に使用する証明書であると検証されました。
SSL クライアント証明書
SSL サーバ証明書

「詳細」で見ると、Certificate Basic Constraints は、

Not Critical
Is not a Certificate Authority

と表示されます。つまり、FireFox 2.0.0.1 においては、

CA証明書の場合は、basicConstraints = CA:true と指定すれば、
「この証明書は以下の用途に使用する証明書であると検証されました。」となり、
nsCertType = sslCA ?が、「SSL 認証局」と認識され、

サーバの証明書の場合は、basicConstraints = CA:FALSE でも同じく「検証され」、
nsCertType = client, server ?なら、「SSL クライアント証明書」「SSL サーバ証明書」と認識

されるようです。ちなみに、現時点の Yahoo のログイン画面のものを参考にすると、
Certificate Basic Constraints
     Not Critical
     Is not a Certificate Authority
Certificate Key Usage
     Not Critical
     Signing
     Key Encipheriment
SSL サーバ証明書

ですから、ちょっとあいまいですが、
basicConstraints = CA:FALSE
nsCertType : なし
keyUsage = codeSigning(?), KeyEncipherment

でしょうか。まねすると nsCertType = server でよさそうです。

以上まとめると、OpenSSL 0.9.8 以降の自己署名型のCAを使って Apache httpd 2.2.4 で ssl を利用するためには、
openssl.cnf を以下のように修正します。openssl用作業ディレクトリです。
  dir = /usr/local/CA 

・CA.sh を以下のように修正します。これで今いるディレクトリに証明書等が生成されます。
    CATOP=.

・自己署名型のCAの証明書を作ります。
  まず openssl.cnf の [ usr_cert ] セクションで、次の指定を有効にします。
      basicConstraints=CA:true
      nsCertType = sslCA, emailCA
      keyUsage = cRLSign, KeyCertSign

  cd /usr/local/CA 
    CA.sh -newca

・サーバ証明書のためのCSRを作ります。
  まず openssl.cnf の [ usr_cert ] セクションで、次の指定を有効にします。    
      basicConstraints = CA:FALSE
      nsCertType = server

  CA.sh -newreq

・サーバのCSRをCAで署名して証明書を作ります。
    CA.sh -sign

・サーバの秘密鍵のパスフレーズを解除します。
  openssl rsa -in newkey.pem -out nopass.key

・サーバの証明書とサーバの鍵を Apache httpd の指定する場所に置きます。
  サーバの証明書 newcert.pem , サーバの鍵 nopass.key です。
    cp  newcert.pem /usr/local/httpd/conf/server.crt
    cp  nopass.key /usr/local/httpd/conf/server.key

・すべての鍵は、chmod 0600 .. で、他人に見えないようにします。

・CA の証明書を der フォーマットに変換します。
    cd /usr/local/CA
    openssl x509 -in cacert.pem -outform DER -out cacert.der

・関係者に、cacert.der を配布して、各ブラウザにインポートします。

という感じでしょうか。CA.sh と openssl の対応付けは、以前にご紹介したとおりです。将来サーバ証明書でうまくいかなかったら、openssl.cnf で keyUsage を指定してみることにします。

keyUsage は、digitalSignature, nonRepudiation, keyEncipherment, dataEncipherment, keyAgreement,
keyCertSign, cRLSign, encipherOnly, decipherOnly, serverAuth, clientAuth,
codeSigning, emailProtection, timeStamping, msCodeInd, msCodeCom, msCTLSign,
msSGC, msEFS, nsSGC

が指定できるらしいですが、いま分かっている対応関係は以下のとおりです。

cRLSign == CRL Signer
KeyCertSign == Certificate Signer

別に今までの作業をすべて coLinux で行ったからではないのですが、とても疲れました。次回にクライアン認証を試して、とりあえず OpenSSL は終わりにしたいです。
コメント (1)
  • X
  • Facebookでシェアする
  • はてなブックマークに追加する
  • LINEでシェアする

OpenSSLについて その3

2007-02-09 22:31:27 | OpenSSL
引き続き OpenSSL 0.9.8a について見てみます。

公式の CA に署名を依頼する場合は、秘密鍵と CSR を作るわけですが、その CA の指示にしたがって作成するべきです。例えば、以下のような方法が一般的です。
openssl genrsa -des3 -out private.key 1024
openssl req -new -key private.key -out private.csr

つまり、openssl genrsa で秘密鍵を作り、それから openssl req で CSR を作ります。有効期限は、CA で署名する時に指定するはずです。これで認証会社から署名された証明書 *.crt が送られてきます。coLinux ではこれを利用する人はまずいないと思いますが。

さて、前回作成された証明書はこのままですとブラウザで表示するときに警告がでます。そこで、特定少数の人が ssl を利用してアクセスする場合を想定すると、あらかじめ上で作成した CA証明書 の cacert.pem を配布することになります。 Windows 上では、署名された証明書のファイル名 cacert.pem を cacert.crt とすれば、「セキュリティ証明書」として認識されますが、der 形式?に変換して配布するのが良いみたいです。der 形式に変換するには、
# cd /usr/local/CA
# openssl x509 -in cacert.pem -outform DER -out cacert.der

これを、Windows に持っていって開けば「証明書」ウィンドが表示されます。ここで、「証明書をインストール」をクリックすれば、Internet Explorer 用に証明書をインストールできます。

FireFox にインストールするには、「ツール」→「オプション」→「詳細」
→「証明書を表示」 → 「認証局証明書」 →「インポート」 → ファイル cacert.der を選択すると、「証明書のインポート」ウィンドが表示されます。

「この認証局によるWebサイトの識別を信頼する」をクリックしてから「OK」をクリックすると、「証明書マネージャ」ウィンドウで証明書名と発行者名に
Example Ltd
fedora.example.co.jp
のように表示されます。

ところが、一見うまくいったみたいですがこれがうまくいきません。

どうやら、正しい認証局証明書の認識ができないようです。そこで、FireFox の「証明書ビューア」を使って調べてみました。「証明書ビューア」の「詳細」に問題ない公式の CAの証明書の1つは、

Netscape Certificate Type が Not Critical SSL 認証局 Email Certificate Authority オブジェクトへの署名者

になっています。これが、(nsCertType : openssl.cnf 内の名前) に関連するもののようです。
また、Certificate Key Usage が (KeyUsage) に対応するようです。
証明書の中には、nsCertType または、KeyUsage のどちらかまたは両方が入っているようです。
また、Certificate Basic Constrains が (basicConstraints) に対応しており、
basicConstrains = critical,CA:true

と指定すると、Certificate Basic Constrains のフィールドの値が、
Critical
Is a Certificate Authority
Maximum number of intermediate CAs: unlimited

となるらようです。最後の行を変えるには、CA:TRUE, pathlen:0 のように pathlen を付ければいいみたいです。ここで、Is a Certificate Authority となっているのが重要らしいです。

Windows の「証明書」ウィンドウではどう表示されるかというと、「詳細」で「基本制限」フィールドの値が、
Subject Type=CA  Path Length Constraint=None 

と表示されるようです。CA:FALSE なら、
Subject Type=End Entity  Path Length Constraint=None 

みたいです。前回作った証明書では、CA:FALSE が指定されているのが今回の問題点の理由らしいことが分かりました。 そこで、公式な CA と同じ形式になるように、ためしに CA の証明書を作るときに、CA:ture となっている v3_ca セクションを使うように、-extensions v3_ca オプションを指定したら、ブラウザで参照時にエラーになってしまいました。

ということは、自己署名型の CA を作るときと、通常のサーバ用の証明書を作るときに openssl.cnf は直して使う必要があるようです。

続きは次回にしたいと思います。
コメント
  • X
  • Facebookでシェアする
  • はてなブックマークに追加する
  • LINEでシェアする

OpenSSLについて その2

2007-02-08 20:23:39 | OpenSSL
前回の続きで、OpenSSL 0.9.8a の設定をします。

結局、openssl.cnf は、以下の行を修正しました。*_default の変更はこれからのテストを簡単にするためです。
dir                             =  /usr/local/CA
countryName_default             = JP
stateOrProvinceName_default     = Tokyo
localityName_default            = 23-ku
0.organizationName_default      = Example Ltd
organizationalUnitName_default  = Espiya

openssl コマンドと CA.sh と混在して説明されている場合が多いですが、後でわけが分からなくなるので、CA.sh を使っているつもりで、直接 openssl コマンドを実行することにしました。以下のように CA.sh のコメントの順番で実行します。
   CA -newca ... will setup the right stuff
   CA -newreq ... will generate a certificate request
   CA -sign ... will sign the generated request and output

まず、CA.sh -newca に該当する部分を実行して、CAの秘密鍵と自己認証した証明書を作ります。
# mkdir /usr/local/CA
# chmod 0700 /usr/local/CA
# cd /usr/local/CA
# mkdir certs crl newcerts private
# chmod 0700 private
# echo "00" >serial
# touch index.txt

# openssl req -new -keyout ./private/cakey.pem -out ./careq.pem
..............  CA のパスフレーズを入れる。
# openssl ca -out ./cacert.pem -days 1095 -batch \ 
         -keyfile ./private/cakey.pem \
         -selfsign -infiles ./careq.pem
.............. 先ほどの CA のパスフレーズを入れる。
#

これで、CAの秘密鍵 private/cakey.pem と これによって署名されたCAの自己署名型の証明書 cacert.pem が作成されました。

次に、CA.sh -newreq 部分を実行して、httpd サーバ用の秘密鍵とCSRを作成します。
# openssl req -new -keyout newkey.pem -out newreq.pem -days 365
...........    httpd サーバ用キーのパスフレーズを作成します。
#

httpd サーバ用の秘密鍵 newkey.pem と CSR newreq.pem が作成されました。CA 作成時の openssl req コマンドと有効期限の設定以外まったく同じになっています。

最後に、CA.sh -sign 部分を実行して、CAで署名します。
# openssl ca -policy policy_anything -out newcert.pem -infiles newreq.pem
..........  CAのパスフレーズを指定します。
#

CSR newreq.pem を読み込んで、CAで署名した証明書 newcert.pem が作成できました。-policy オプションを指定することが特徴です。
httpd をパスフレーズなしで起動できるようにパスフレーズを解除します。
# openssl rsa -in newkey.pem -out nopass.key
.......... httpd サーバ用のパスフレーズを入力します。 
# chmod 0600 nopass.key newkey.pem

apache httpd の ssl の設定どおりの場所に証明書とキーをコピーします。
# cp -p newcert.pem /usr/local/httpd224/conf/server.crt
# cp -p nopass.key /usr/local/httpd224/conf/server.key

apache httpd の設定を変更します。/usr/local/httpd224/conf/extra/httpd-ssl.conf の次の行を修正します。
DocumentRoot "/home/data/www"
ServerName www.example.co.jp:443
ServerAdmin root@example.co.jp

/usr/local/httpd224/conf/httpd.conf の次の行のコメントをはずします。
Include conf/extra/httpd-ssl.conf

httpd を再起動します。 昔あった、startssl はもう使えませんので普通の start で良いです。
# /etc/init.d/httpd stop
# /etc/init.d/httpd start

(ですが、いままで述べた手順では重大な落とし穴がありました。それは後ほど。)

忘れたときのためにまとめると、

ssl は、秘密鍵を作ると同時に CSR を作成し、その CSR を使って CA で署名した証明書を作り、秘密鍵と署名した証明書をペアで使う。

と、覚えればいいみたいです。これで一応すっきりしました。
しかし、ブラウザが違うと、nsCertType が影響するかもしれない不安は残ります。将来バージョンが上がるとまたおかしくなる可能性もあり、その場合はもう一度 CA.sh を見ることにします。

重大な落とし穴については次回にします。
コメント
  • X
  • Facebookでシェアする
  • はてなブックマークに追加する
  • LINEでシェアする

OpenSSLについて その1

2007-02-07 21:52:06 | OpenSSL
久しぶりの投稿です。現在の coLinux の運用状況ですが、
# uptime
 21:21:40 up 20 days, 23:42,  2 users,  load average: 0.00, 0.00, 0.00

20日も動いています。
さて、OpenSSL を試して、apache httpd 2.2.4 の sslサポートを有効にしてみます。coLinux サイトにある Fedora Core 5 では、OpenSSL は最初から含まれています。しかし、CA 構築のシェルスクリプト CA.sh や、OpenSSL の設定ファイルはいったいどこにあるのでしょうか。rpm で探してみます。
# rpm -qa |grep openssl
openssl-0.9.8a-5.4
openssl-devel-0.9.8a-5.4
# rpm -ql openssl-0.9.8a-5.4
/etc/pki/CA
...................
# openssl version
OpenSSL 0.9.8a 11 Oct 2005
#

ということは、OpenSSL のバージョンは 0.9.8a で、CA を作るためのシェルスクリプトは、
/etc/pki/tls/misc/CA

で、openssl の設定ファイルは、
/etc/pki/tls/openssl.cnf

です。早速 mod_ssl 用のキーを作成するのですが、これまた忘れやすいのでまとめておきます。ここでは、自分でCAになることにします。参考にしたものは、
OpenSSLによるCAの運営方法
OpenSSLでの自己認証局(CA)と自己証明書の作成
CAのためのOpenSSLの設定
あたりです。そのほか書ききれないくらい多いですが、OpenSSL のバージョンが影響しますので、自分のバージョンと記述の作成年月日を確認した方が良いと思います。

ところで、自分でCAになる方法が微妙に異なっていることが分かりましたので CA.sh スクリプトを見てみます。まず古い OpenSSL のソースの apps/CA.sh を調べてみたところ、0.9.7 から 0.9.8 になったところで、apps/CA.sh の -newca が変更になっていることが分かりました。CA.sh の -newca) のところを見てみますと、0.9.7e では、
$REQ -new -x509 -keyout ${CATOP}/private/$CAKEY \
     -out ${CATOP}/$CACERT $DAYS

とプライベートキーと一緒に自己証明書も生成するとこになっているのが、0.9.8a では、
$REQ -new -keyout ${CATOP}/private/$CAKEY \
                -out ${CATOP}/$CAREQ
$CA -out ${CATOP}/$CACERT $CADAYS -batch \
                -keyfile ${CATOP}/private/$CAKEY -selfsign \
                -infiles ${CATOP}/$CAREQ

となって、一度プライベートキーと CSR($CAREQ) を生成してから、改めて 0.9.8 から追加された、-selfsign オプションを付けて、-keyfile で指定したキーで署名(つまり自己署名)しているようです。

次に、openssl.cnf の中身を見てみます。これは、

[ セクション名 ]

という行でセクション名を定義して、その下の次のセクション名の行までが有効になるような仕組みです。更にセクションの中で = によって、別のセクションを指定できるようになっているようです。なんとなく sendmail.cf に似ています。

openssl ca の -extensions section オプションを見ると、デフォルトは x509_extensions セクションになるようです。openssl.cnf を探すと、CA_default セクションのところで、
x509_extensions = usr_cert

となっていますから、usr_cert セクションの指定になるわけです。

そこで分からないのは、openssl.cnf の usr_cert セクションや、v3_ca セクション( openssl req の場合に指定される) の中でコメントになっている nsCertType です。どうもNetscape 用で8ビットのビットフラグになっているらしく、順番に、
client, server, email, objsign, reserved, sslCA, emailCA, objCA
を意味するようですが、定義がよく分からないです。server を指定するとか、sslCA,emailCA を指定するとか入り乱れていますが、とりあえずコメントのままにします。

続きは次回にしたいと思います。
コメント
  • X
  • Facebookでシェアする
  • はてなブックマークに追加する
  • LINEでシェアする