第1世代(〜2015年2月) | 第2世代 | |
---|---|---|
○ ROOT証明書の取得 |
EDBのルート証明書は下記のいずれかで取得できる. (内容は同一.PEM形式の証明書である.) |
EDBのルート証明書(第2世代)は下記のいずれかで取得できる. (内容は同一.PEM形式の証明書である.) |
○ ROOT証明書のFingerPrint(SHA1) | EF:EB:C9:C2:41:94:A9:0E:C4:24:D0:06:AC:CF:D4:A7:07:68:98:37 | C1:57:75:CD:CB:57:3A:13:50:34:48:86:B3:D4:07:92:B3:42:FB:6B |
○ ROOT証明書のFingerPrint(MD5) | 85:B7:C6:18:1D:70:45:F1:B1:CF:BA:8F:EE:A4:67:8C | 90:59:F5:F4:66:1C:13:EE:EC:FA:2E:B6:99:37:97:EA |
○ あるホスト(サーバ)証明書を取得 |
サーバの証明書は接続時にサーバから自動的に送信されるが,それとは別にサーバの証明書を取得する必要がある場合には,
|
|
○ ある個人(擬人)の証明書を取得 |
ある個人(擬人)の証明書を取得する場合には,
|
|
○ 証明書失効リスト(CRL)の場所 |
属性名 | 属性 |
---|---|
○ countryName (C): | JP |
○ stateOrProvinceName (ST): | Tokushima |
○ localityName (L): | Tokushima City |
○ organizationName (O): | The University of Tokushima |
○ organizationalUnitName (OU): | EDB |
○ commonName (CN): |
|
% openssl pkcs12 -in cert.p12 -clcerts -nodesを実行(秘密鍵を暗号化するには-nodesを省いてください.)して,出力された内容
Bag Attributes ... -----BEGIN CERTIFICATE----- MII... ... ... ... -----END CERTIFICATE----- Bag Attributes ... -----BEGIN RSA PRIVATE KEY----- MII... ... ... ... -----END RSA PRIVATE KEY----- |
用途 | ディレクトリ | ファイル | 内容 | 説明 |
---|---|---|---|---|
サーバ認証 | server/ | server/server.crt | サーバの証明書 | クライアント(ブラウザ)がサーバを検証するために,サーバがクライアントに提示する証明書です. |
server/server.key | サーバの秘密鍵 | クライアント(ブラウザ)がサーバを検証検証する際に,サーバ側で利用する秘密鍵です. サーバ証明書と対になっているものを配置します. (暗号化されていないファイルを利用する場合には,一般ユーザから読み出し禁止にしておくことを推奨します.) | ||
server/root.crt server/root2nd.crt |
ROOT証明書 | クライアント(ブラウザ)がサーバを検証検証する際に,サーバがクライアントに提示するROOT証明書です. このROOT証明書はサーバ証明書に対して署名を行なったものです. 第1世代ではroot.crt, 第2世代ではroot2nd.crtが署名を行なっていますので,どちらか一方を利用することとなります. (第1世代の寿命が尽きた場合には root.crt は配置する必要はありません.) | ||
クライアント認証 | ssl.crt/ | ssl.crt/root.crt ssl.crt/root2nd.crt |
ROOT証明書 | サーバがクライアント(ブラウザ)を検証する際に用いるROOT証明書です. 第1世代のクライアントには root.crt, 第2世代のクライアントには root2nd.crt が利用されます. (第1世代の寿命が尽きた場合には root.crt は配置する必要はありません.) |
このディレクトリに配置するROOT証明書は,そのハッシュ値でシンボリックリンクしておく必要があります. シンボリックリンクの作成方法は下記の通り.(最後の .0 を忘れないように) # ln -s root.crt `openssl x509 -in root.crt -noout -hash`.0 # ln -s root2nd.crt `openssl x509 -in root2nd.crt -noout -hash`.0 ハッシュ値を用いてシンボリックリンクを作成するため,運悪くハッシュ値が衝突してしまう可能性があります. その場合には .0 の部分を .1, .2 のように他の数字を用いてください. |
||||
ssl.crl/ | ssl.crl/cert.crl ssl.crl/cert2nd.crl |
証明書失効リスト(CRL) | サーバがクライアント(ブラウザ)を検証する際に参照する証明書失効リスト(CRL)です. 第1世代のクライアントには cert.crl, 第2世代のクライアントには cert2nd.crl が利用されます. (第1世代の寿命が尽きた場合には cert.crl は配置する必要はありません.) | |
このディレクトリに配置する証明書失効リストは,そのハッシュ値でシンボリックリンクしておく必要があります. シンボリックリンクの作成方法は下記の通り.(最後の .r0 を忘れないように) # ln -s cert.crl `openssl crl -in cert.crl -noout -hash`.r0 # ln -s cert2nd.crl `openssl crl -in cert2nd.crl -noout -hash`.r0 ハッシュ値を用いてシンボリックリンクを作成するため,運悪くハッシュ値が衝突してしまう可能性があります. その場合には .r0 の部分を .r1, .r2 のように他の数字を用いてください. |
||||
証明書失効リストは定期的に更新する必要があります.(毎日を推奨) ファイル取得コマンド(fetch, curlなど)を用いて下記のようなスクリプトを作成し,cron などで毎日実行してください. (ハッシュ値によるシンボリックリンクを作成しなおす必要はありません.)
#!/bin/sh
cd $APACHE_CONF_DIR
fetch -o cert.crl https://ca.db.tokushima-u.ac.jp/ca/cert.crl
fetch -o cert2nd.crl https://ca.db.tokushima-u.ac.jp/ca/cert2nd.crl
exit 0
|
タグ | 第1世代のサーバ証明書 | 第2世代のサーバ証明書 | 説明 |
---|---|---|---|
SSLCertificateFile | $APACHE_CONF_DIR/server/server.crt | (サーバの証明書ファイル) | |
SSLCertificateKeyFile | $APACHE_CONF_DIR/server/server.key | (サーバの秘密鍵ファイル) | |
SSLCertificateChainFile | $APACHE_CONF_DIR/server/root.crt | $APACHE_CONF_DIR/server/root2nd.crt | (ROOT証明書ファイル) |
SSLCACertificatePath | $APACHE_CONF_DIR/ssl.crt | (ROOT証明書を容れるディレクトリ) | |
SSLCARevocationPath | $APACHE_CONF_DIR/ssl.crl | (証明書失効リストを容れるディレクトリ) | |
SSLCARevocationCheck※ | chain | ※ … Apache 2.4.x で証明書失効の検査を実行するために必要.(デフォルトでは検査しない) |
タグ | 第1世代のサーバ証明書 | 第2世代のサーバ証明書 | 説明 |
---|---|---|---|
SSLVerifyClient | require または optional |
|
|
SSLOptions | +StdEnvVars | CGIやPHPで下記の環境変数を参照する場合の設定.SSLの接続可能性でアクセス権のみをチェックし,ユーザを特定した処理を行なわない場合には必要なし. |
変数名 | 値 | 説明 |
---|---|---|
SSL_CLIENT_M_VERSION | 3 | 証明書のバージョン |
SSL_CLIENT_M_SERIAL | 0E | 証明書のシリアル |
SSL_CLIENT_A_KEY | rsaEncryption | 証明書の暗号化方式 |
SSL_CLIENT_A_SIG | sha1WithRSAEncryption | 証明書の署名アルゴリズム |
SSL_CLIENT_V_START | Jan 10 09:30:31 2005 GMT | 証明書の有効期間(開始) |
SSL_CLIENT_V_END | Jan 8 09:30:31 2015 GMT | 証明書の有効期間(終了) |
SSL_CLIENT_I_DN | /C=JP/ST=Tokushima/L=Tokushima City/O=The University of Tokushima/OU=EDB/CN=root2nd-ca.db.tokushima-u.ac.jp/[email protected] | 証明書の発行者(Issuer)の情報 |
SSL_CLIENT_I_DN_C | JP | |
SSL_CLIENT_I_DN_ST | Tokushima | |
SSL_CLIENT_I_DN_L | Tokushima City | |
SSL_CLIENT_I_DN_O | The University of Tokushima | |
SSL_CLIENT_I_DN_OU | EDB | |
SSL_CLIENT_I_DN_CN | root2nd-ca.db.tokushima-u.ac.jp | |
SSL_CLIENT_I_DN_Email | [email protected] | |
SSL_CLIENT_S_DN | /C=JP/ST=Tokushima/L=Tokushima City/O=The University of Tokushima/OU=EDB/CN=ユーザのCN名/emailAddress=ユーザのメールアドレス | 証明書の主体(Subject)の情報 |
SSL_CLIENT_S_DN_C | JP | |
SSL_CLIENT_S_DN_ST | Tokushima | |
SSL_CLIENT_S_DN_L | Tokushima City | |
SSL_CLIENT_S_DN_O | The University of Tokushima | |
SSL_CLIENT_S_DN_OU | EDB | |
SSL_CLIENT_S_DN_CN | ユーザのCN名 | |
SSL_CLIENT_S_DN_Email | ユーザのメールアドレス | |
SSL_CLIENT_VERIFY | SUCCESS | 証明書の検証結果 |
X.509個人証明書を持っている人はSSL認証で,それ以外の人は通常のBasic認証をしたい場合で,ユーザを制限したい場合,すなわち,
AuthType Basic SSLOptions FakeBasicAuth AuthName "Secure-Directory" AuthUserFile "/usr/local/etc/apache2/password" require valid-userと設定する.(もちろん,サーバ全体の設定で".htaccess"が有効になっている必要がある.)
ユーザ名:パスワードがユーザ一人一人について書かれているのでそれをユーザ分だけ用意します. ただし,SSL認証(すなわちX.509個人証明書を提示し,検証)されたユーザに関しては,
/C=JP/ST=Tokushima/L=Tokushima City/O=The University of Tokushima/OU=EDB/CN=ユーザのCN名/emailAddress=ユーザのメールアドレス:パスワードを一人一人のDN名にあわせて作成します.ただし,パスワードのところは,
ユーザ名:パスワードをhtpasswdコマンドを利用して作成します.
EDBの【組織】情報に登録されている[構成員]の情報から,特定の組織に属している(かつ,指定された肩書を持っている)個人のリストを抽出し,Apacheサーバのパスワードファイル等に記載すべきリストを生成する方法を説明します.
http://web.db.tokushima-u.ac.jp/PKI/PERSON-LIST/により抽出されたリストの各行は,
EID | EDBにおける情報識別子.いくつかのシステムではアカウント名として用いられることがある. |
---|---|
LifeName | 英語(ローマ字)表記の氏名. |
CN | X.509属性におけるCommonName.多くのシステムでアカウント名として用いられる. |
DN | X.509属性における識別名.ApacheのSSLOptionss FakeBasicAuthでユーザの識別名として用いられる. |
state | X.509個人証明書の状態.
|
例えば,
#!/bin/sh tmpfile=/tmp/make-passwd.$$ bpass='$apr1$abcdefgh$**********************' …BasicAuth用の無効なパスワード cpass=`htpasswd -nbm 12345 password | awk -F: '{print $2}'` …FakeBasicAuthで用いるパスワード fetch -q -o $tmpfile http://web.db.tokushima-u.ac.jp/PKI/PERSON-LIST/$1 grep '^; END-OF-RESPONSE' $tmpfile > /dev/null if [ X"$?" = X"0" ]; then grep -v '^;' $tmpfile | awk -F'\t' '{ print $1 ":" "'$bpass'" ":" $2 ":"; …BasicAuth用のパスワード行 print $4 ":" "'$cpass'" ":" $2 ":"; …FakeBasicAuth用のパスワード行 }' else echo 'ERROR' fi rm -f $tmpfile exit 0のようなShellScript (./make-passwd.sh)を作成すれば,
% ./make-passwd.sh O=11019,11022で,Apache用のパスワードファイルを作成することができる.