opensslでコードサイニング用証明書(自己署名)を作成する

お客様よりちょっと古いAccess(今回の場合2007)のアプリケーションを起動するたびにセキュリティ警告が出てしまうのを抑制したいという要望があったため、方法を探った結果をメモ。 クライアントPCへ自己署名のルート証明書をインストールしても良い場合に適用可。それ以外の場合は素直にコードサイニング証明書を購入のこと。 また、mdb形式/mde形式は署名可能だったが、私が知らないだけかもしれないが、accdbにはできなかった。 accdb形式に署名しようとするとパッケージにしろとの指示が出るが、それに従うと展開までは署名されるが、展開した後のaccdbには書名が無いので結局警告が出てしまう。安全な場所へ設置以外の方法でaccdbでの回避策は無いのだろうか。。。

# rootユーザでの作業
su -

# CA作成用スクリプトをコードサイニング用に調整
cd /etc/pki/tls/misc/
cp -pi CA CA_codesign

vi CA_codesign
# [変更点] -----------------------------------------
# if [ -z "$OPENSSL" ]; then OPENSSL=openssl; fi の次の行に以下を追加
if [ -z "$SSLEAY_CONFIG" ]; then SSLEAY_CONFIG="-config ../openssl_codesign.cnf"; fi
# 期間は適宜変更
DAYS="-days 365"       # 1 year
CADAYS="-days 1095"    # 3 years
# 既存の環境へ影響をさせないため、CA出力用ディレクトリ変更
CATOP=../../CA_codesign
# usageのメッセージ中のCAを変更    echo "usage: CA -newcert|-newreq|-newca|-sign|-verify" <&2
    echo "usage: CA_codesign -newcert|-newreq|-newca|-sign|-verify" <&2
# /[変更点] ----------------------------------------


# opensslの設定をコードサイニング用に調整
cd /etc/pki/tls/
cp -pi openssl.cnf openssl_codesign.cnf

vi openssl_codesign.cnf
# [変更点] -----------------------------------------

# [ CA_default ] セクション
# dir を ../../CA_codesign へ
dir            = ../../CA_codesign             # Where everything is kept

# [ usr_cert ] セクション(CA用途)
# basicConstraints は TRUE
basicConstraints=CA:TRUE
# nsCertType を server から sslCA, emailCA へ
nsCertType                     = sslCA, emailCA
# keyUsage を鍵署名用と証明書失効リスト(CRL)の検証用に
keyUsage = cRLSign, keyCertSign

# [ v3_req ] セクション
# keyUsageへコードサイニングを追記
keyUsage = nonRepudiation, digitalSignature, keyEncipherment, codeSigning
# /[変更点] ----------------------------------------


# コードサイニング用CA作成
# ここからの作業で、秘密鍵を利用する工程でパスワードの入力を求められます。別途パスワードを決めて適宜入力。
# また、証明書署名要求の内容はSSL発行とほぼ同等なので割愛。
cd /etc/pki/tls/misc/
./CA_codesign -newca

# コードサイニング用CAへ移動
cd ../../CA_codesign/
# CA秘密鍵のパーミッション変更
chmod 600 private/cakey.pem

# コードサイニング証明書用秘密鍵を作成
openssl genrsa -des3 -out private/codesign.key 2048
# 秘密鍵パーミッション変更
chmod 600 private/codesign.key

# コードサイニング証明書署名要求(csr)を作成
openssl req -new -key private/codesign.key -out certs/codesign.csr -config ../tls/openssl_codesign.cnf

# コードサイニング証明書を発行
openssl x509 -CA cacert.pem -CAkey private/cakey.pem -req -in certs/codesign.csr -out certs/codesign.crt -days 365 -CAcreateserial
# 証明書、秘密鍵、CA証明書からwindows上インストール用のPKCS12形式のファイルを作成
openssl pkcs12 -export -in certs/codesign.crt -inkey private/codesign.key -certfile cacert.pem -out certs/codesign.p12

# certs/codesign.p12 を ftpなり画面から直接コピーするなりしてPCへ
# PCでcodesign.p12を右クリックで「PFXのインストール」項目が出るので、インストール
# これでAccessのデータベースツール-VisualBasic-ツール-デジタル署名-選択に出てくるので書名ができるようになる。