CentOS5.5へのNSS及びmod_nss導入(途上)

#前提条件
某クレジット与信サービスのSSL仕様変更に伴い、
CentOS5.5のApache2.2にNSSを導入する羽目になった…という話。
素直にCentOS6系でサーバリプレースシロ!という正論には耳を貸したいが貸せないのが辛い…。

さらに本サーバ、ApacheやPHPなども全てソースからインストールされているため
yumでも色々と問題が起き、全部ソースから入れることになっているんだってば。

情報漁っても碌なものが無かったので、どこかのだれかのために記す。

#NSSインストール
ちなみにここを参考にしています。
http://lfsbookja.osdn.jp/BLFS/svn.ja/postlfs/nss.html

まず、ソースコード拾ってくる。nsprも一緒に入ってるのを選択。

```
$wget http://ftp.mozilla.org/pub/security/nss/releases/NSS_3_19_4_RTM/src/nss-3.19.4-with-nspr-4.10.10.tar.gz`

$tar xvzf nss-3.19.4-with-nspr-4.10.10.tar.gz
$cd nss-3.19.4
```

まず同梱のnsprのインストール実施

```
$cd nss-3.19.4/nspr
$./configure;make;make install
```

続いてNSS。

```
$cd nss-3.19.4/nss

$make BUILD_OPT=1                      \
  NSPR_INCLUDE_DIR=/usr/include/nspr4  \
  USE_SYSTEM_ZLIB=1                   \
  ZLIB_LIBS=-lz                       \
  $([ $(uname -m) = x86_64 ] && echo USE_64=1) \
  $([ -f /usr/include/sqlite3.h ] && echo NSS_USE_SYSTEM_SQLITE=1)
```

以下のエラーがでて、make失敗。

```
Error: no such instruction: `xgetbv`
```

どうもgccが古すぎるようなのでgcc44をyumでインストール

```
$yum remove gcc*
$yum install gcc44
$cd /usr/bin
$ln -s gcc44 gcc
```
nssの再make…失敗

```
sdb.c:271: error: implicit declaration of function 'sqlite3_file_control'
sdb.c: In function 'sdb_FindObjectsInit':
sdb.c:725: error: implicit declaration of function 'sqlite3_prepare_v2'
make[2]: *** [Linux2.6_x86_64_glibc_PTH_64_OPT.OBJ/sdb.o] エラー 1
make[2]: ディレクトリ `/home/src/nss-3.19.4/nss/lib/softoken' から出ます
make[1]: *** [libs] エラー 2
make[1]: ディレクトリ `/home/src/nss-3.19.4/nss/lib' から出ます
make: *** [libs] エラー 2
```
sqlite3.3は導入されていたが、どうもバージョンが3.8である必要があるようなので
思い切ってmakeオプションから除外。

```
$make BUILD_OPT=1                      \
  NSPR_INCLUDE_DIR=/usr/include/nspr4  \
  USE_SYSTEM_ZLIB=1                   \
  ZLIB_LIBS=-lz                       \
  $([ $(uname -m) = x86_64 ] && echo USE_64=1)
```

無事にmakeが通ったんで、インストール

```
$cd nss-3.19.4/dist                                                       &&
install -v -m755 Linux*/lib/*.so              /usr/lib           &&
install -v -m644 Linux*/lib/{*.chk,libcrmf.a} /usr/lib           &&
install -v -m755 -d                           /usr/include/nss   &&
cp -v -RL {public,private}/nss/*              /usr/include/nss   &&
chmod -v 644                                  /usr/include/nss/* &&
install -v -m755 Linux*/bin/{certutil,nss-config,pk12util} /usr/bin &&
install -v -m644 Linux*/lib/pkgconfig/nss.pc  /usr/lib/pkgconfig
```

#mod_nssのbuild
以下を参考にしつつ
http://iws.cs.uni-magdeburg.de/~elkner/tmp/mod_nss.html

ファイル取得
`$wget https://fedorahosted.org/released/mod_nss/mod_nss-1.0.12.tar.gz --no-check-certificate`

```
$tar xvzf mod_nss-1.0.12.tar.gz
$cd mod_nss-1.0.12

$autoreconf -ivf
$./configure --with-apxs=/usr/local/apache2/bin/apxs --with-nspr-inc=/usr/include/nspr4 --with-nss-inc=/usr/include/nss3
$gmake all instal
```
./configureのオプション部分でずいぶん悩んだが結果としては上記で通った。
それぞれの場所はちゃんと環境に合わせて変更するように。

#mod_nss設定
管理用のDBファイルの設定が必要となるんでその生成(本当はこのへんでsqlite3が使われてる様子)

apache2が/usr/local/apache2にあるという前提で、DBファイルは
/usr/local/apache2/nssに設置するとする。


```/usr/local/apache2/conf/nss.conf
NSSCertificateDatabase /usr/local/apache2/nss
```

nss.confの上記に指定する。


```
$mkdir /usr/local/apache2/nss
$./mod_nss-1.0.12/gencert /usr/local/apache2/nss

$cd /usr/local/apache2/nss
$ls -1
cert8.db
key3.db
secmod.db
```

このDBファイルにapacheがアクセス出来る必要があるので
権限変更してやる。

apacheがnobodyユーザーとnobodyグループで起動しているとして(httpd.conf確認ね)

```
$cd /usr/local/apache2/nss
$chmod 640 *.db
$chown nobody:nobody *.db
$chown nobody:nobody .
```

んで、apache起動
```
$/usr/local/apache2/bin/apachectl start
```
パスワード聞かれるが初期パスワードは
gencert実施した際に表示されているものとなる。

これで一応apacheは起動した。

あとは、nss.conf自体の設定だが、
こっちはまだ終わってないので本記事はここまでです(ぉぃ

nss.confの設定方法情報がホシィ