ページへ戻る
印刷
HTTPoverSSLでクライアント認証させてみる
をテンプレートにして作成 ::
Nest Of Hawk
xpwiki
:HTTPoverSSLでクライアント認証させてみる をテンプレートにして作成
開始行:
[[Gentoo Linuxな生活/サーバ設定関連]]
*HTTPでのクライアント認証
HTTPでのクライアント認証はいろいろとありますね。.htaccess...
*SSLでの認証の方式
#ref(SSL.JPG,right,around);
右の図を見てみてください。SSLのシーケンスがどのように開始...
で、公開鍵をなぜお互いに見せ合いしても問題ないかというと...
#img(,clear);
*証明書の発行
ここで問題なのが、自分自身を証明する証明書の発行ですが、...
**準備
***作業場所
$ mkdir -p ssl/CA ←認証局の場所
$ mkdir -p ssl/server ←サーバ証明書の場所
$ mkdir -p ssl/client ←クライアント証明書の場所
***/etc/ssl/openssl.cnfの設定
[ CA_default ]
default_days = 365 # デフォルトの証明期間(1年)
[ req ]
default_bits = 1024 # デフォルトKEY長(IE5以下のためにKEY...
[ req_distinguished_name ]
countryName_default = JP # デフォルト国名
stateOrProvinceName_default = Kanagawa # デフォルト州名
localityName_default = Yokohama # デフォルト地方名
0.organizationName_default = CA # デフォルト機構名
commonName_default = XXX.XXX.XX # デフォルトドメイン
emailAddress_default = foo@bar.com # デフォルトメールア...
**認証局を作る(認証局)
証明書を認証する認証局を作ります。つまりはベリサインの代...
$ cd ssl/CA
$ /etc/ssl/misc/CA.sh -newca
CA certificate filename (or enter to create)
Making CA certificate ...
Using configuration from /usr/lib/ssl/openssl.cnf
Generating a 1024 bit RSA private key
..++++++++++++
...++++++++++++
writing new private key to './demoCA/private/./cakey.pem'
Enter PEM pass phrase: CAのパスワード
Verifying password - Enter PEM pass phrase: 認証局のパス...
-----
You are about to be asked to enter information that will...
into your certificate request.
What you are about to enter is what is called a Distingu...
There are quite a few fields but you can leave some blank
For some fields there will be a default value,
If you enter '.', the field will be left blank.
-----
Country Name (2 letter code) [JP]:
State or Province Name (full name) [Kanagawa]:
Locality Name (eg, city) [Yokohama]:
Organization Name (eg, company) [CA]:
Organizational Unit Name (eg, section) [none]:
Common Name (eg, YOUR name) [XXX.XXX.XX]:
Email Address [foo@bar.com]:
これを実行すると以下ができます。
ssl/CA/ownCA/private/cakey.pem - 認証局の秘密鍵
ssl/CA/ownCA/cacert.pem - 自己署名型の認証局証明書
**サーバ証明書&鍵
***サーバ証明書発行願と鍵を作る(サーバ管理者)
まずは暗号鍵と、サーバ証明書を発行してもらうための発行願...
$ cd ssl/admin
$ openssl req -new -keyout securekey.pem -out csr.pem
Using configuration from /usr/lib/ssl/openssl.cnf
Generating a 1024 bit RSA private key
................++++++++++++
...........++++++++++++
writing new private key to 'securekey.pem'
Enter PEM pass phrase: サーバ管理者のパスワード
Verifying password - Enter PEM pass phrase: サーバ管理者...
-----
You are about to be asked to enter information that will...
into your certificate request.
What you are about to enter is what is called a Distingu...
There are quite a few fields but you can leave some blank
For some fields there will be a default value,
If you enter '.', the field will be left blank.
-----
Country Name (2 letter code) [JP]:
State or Province Name (full name) [Kanagawa]:
Locality Name (eg, city) [Yokohama]:
Organization Name (eg, company) [server]:
Organizational Unit Name (eg, section) [none]:
Common Name (eg, YOUR name) [XXX.XXX.XX]:
Email Address [foo@bar.com]:
Please enter the following 'extra' attributes
to be sent with your certificate request
A challenge password []:
An optional company name []:
この結果以下が出来ます。
ssl/admin/csr.pem #サーバ証明書発行願
ssl/admin/securekey.pem #サーバ秘密鍵
***認証局でサーバ証明書発行願を認証してもらう(認証局)
サーバ証明書発酵用に、/etc/ssl/ssl.confを変更いたします。
[ usr_cert ] nsCertType = server
$ cd ssl/CA
$ cp ../admin/csr.pem .
$ openssl ca -out server_cert.pem -infiles csr.pem
Using configuration from /usr/lib/ssl/openssl.cnf
Enter PEM pass phrase: 認証局のパスワード
Check that the request matches the signature
Signature ok
The Subjects Distinguished Name is as follows
countryName :PRINTABLE:'JP'
stateOrProvinceName :PRINTABLE:'Kanagawa'
localityName :PRINTABLE:'Yokohama'
organizationName :PRINTABLE:'server'
organizationalUnitName:PRINTABLE:'none'
commonName :PRINTABLE:'XXX.XXX.XX'
emailAddress :IA5STRING:'foo@bar.com'
Certificate is to be certified until Dec 16 01:56:12 200...
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
この結果、サーバ証明書が出来ます。
ssl/CA/server_cert.pem #認証局署名済サーバ証明
***作った証明書でサーバを運用するよう設定する(サーバ管理...
次に、サーバ側は、この証明書を使用するように設定しましょ...
# cd ssl/admin/
# openssl rsa -in securekey.pem -out securekey_unpass.pem
こうして出来たファイルを適当な場所にコピーします。例えば/...
# cp securekey_unpass.pem /etc/apache2/ssl/securekey.pem
# cp ../CA/server_cert.pem /etc/apache2/ssl/server_cert....
次に、/etc/apache2/modules.d/41_mod_ssl.default-vhost.con...
SSLCertificateFile /etc/apache/ssl/server/server_cert.pem
SSLCertificateKeyFile /etc/apache/ssl/server/securekey.pem
**クライアント証明書&鍵
次にクライアントの証明書と鍵を作ります。最終的に出来たも...
***クライアント証明書発行願&鍵を作る(ユーザ)
では、同じようにクライアント側の証明書発行願を作ります。...
$ cd ssl/client
$ openssl req -new -keyout privatekey.pem -out privatecs...
Using configuration from /usr/lib/ssl/openssl.cnf
Generating a 1024 bit RSA private key
..................++++++++++++
.............++++++++++++
writing new private key to 'privatekey.pem'
Enter PEM pass phrase: クライアントのパスワード
Verifying password - Enter PEM pass phrase: クライアント...
-----
You are about to be asked to enter information that will...
into your certificate request.
What you are about to enter is what is called a Distingu...
There are quite a few fields but you can leave some blank
For some fields there will be a default value,
If you enter '.', the field will be left blank.
-----
Country Name (2 letter code) [JP]:
State or Province Name (full name) [Kanagawa]:
Locality Name (eg, city) [Yokohama]:
Organization Name (eg, company) [server]:
Organizational Unit Name (eg, section) [none]:
Common Name (eg, YOUR name) [XXX.XXX.XX]:
Email Address [foo@bar.com]:
Please enter the following 'extra' attributes
to be sent with your certificate request
A challenge password []:
An optional company name []:
これで出来たものが
ssl/user/privatekey.pem - クライアントの秘密鍵
ssl/user/privatecsr.pem - クライアントの証明書発行願
***クライアント証明書を発行する(認証局)
次にユーザからクライアント証明書発行願を受け取って、認証...
先にクライアント証明書発酵用に/etc/ssl/ssl.confを変更しま...
[ usr_cert ] nsCertType = client
次に発行作業です
$ cd ssl/CA
$ cp ../user/privatecsr.pem .
$ openssl ca -out private_cert.pem -infiles privatecsr.p...
Using configuration from /usr/lib/ssl/openssl.cnf
Enter PEM pass phrase: CAのパスワード
Check that the request matches the signature
Signature ok
The Subjects Distinguished Name is as follows
countryName :PRINTABLE:'JP'
stateOrProvinceName :PRINTABLE:'Kanagawa'
localityName :PRINTABLE:'Yokohama'
organizationName :PRINTABLE:'user'
organizationalUnitName:PRINTABLE:'Users Name'
commonName :PRINTABLE:'foo@bar.com'
Certificate is to be certified until Dec 16 03:11:29 200...
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
これで、クライアント側証明書ができます。
ssl/CA/demoCA/private_cert.pem
出来た証明書と、秘密鍵の2つを受け取って、ブラウザにインス...
$ cd ssl/CA
このディレクトリに先ほど作ったprivate_cert.pemとprivate...
$ openssl pkcs12 -export -inkey privatekey.pem -in priva...
-certfile ownCA/cacert.pem -name uso...
Enter PEM pass phrase: クライアントのパスワード
Enter Export Password: ブラウザ取込用パスワード
Verifying password - Enter Export Password: ブラウザ取込...
クライアントパスワードが認証局管理者にばれてしまいますが...
これで出来たprivate_cert.p12をユーザさんに渡してあげて、...
*クライアント認証のためのapacheの設定
まず、クライアント認証をするために、提示されたクライアン...
# cp ssl/CA/demoCA/cacert.pem /etc/apache2/conf/trustCA
次にapacheの設定を変えます。/etc/apache2/conf/modules.d/4...
SSLCACertificatePath conf
SSLCACertificateFile conf/trustCA
次に、例えばWebサーバの特定の場所はかなりセキュリティ的に...
-URLはhttp://foo.bar.com/board
-SSLでの通信しか許さない
-クライアント認証を要求する。自分が信頼する認証局で署名し...
ためには、/etc/apache2/commonappache.confにこんな風に設定...
<Directory /home/var/www/localhost/htdocs/board>
Options -Indexes FollowSymLinks MultiViews
AllowOverride All
SSLRequireSSL ←SSLでの通信以外許さない
SSLVerifyClient require ←SSLクライアント認証を要求する
<IfModule mod_access.c>
Order deny,allow
Allow from all
</IfModule>
</Directory>
で、apacheを再起動します
# /etc/init.d/apache2 restart
これで、http://foo.bar.com/boardでアクセスすると''Forbidd...
*制限事項
SSLクライアント認証をOKにすると、アクセスするたびにパスワ...
終了行:
[[Gentoo Linuxな生活/サーバ設定関連]]
*HTTPでのクライアント認証
HTTPでのクライアント認証はいろいろとありますね。.htaccess...
*SSLでの認証の方式
#ref(SSL.JPG,right,around);
右の図を見てみてください。SSLのシーケンスがどのように開始...
で、公開鍵をなぜお互いに見せ合いしても問題ないかというと...
#img(,clear);
*証明書の発行
ここで問題なのが、自分自身を証明する証明書の発行ですが、...
**準備
***作業場所
$ mkdir -p ssl/CA ←認証局の場所
$ mkdir -p ssl/server ←サーバ証明書の場所
$ mkdir -p ssl/client ←クライアント証明書の場所
***/etc/ssl/openssl.cnfの設定
[ CA_default ]
default_days = 365 # デフォルトの証明期間(1年)
[ req ]
default_bits = 1024 # デフォルトKEY長(IE5以下のためにKEY...
[ req_distinguished_name ]
countryName_default = JP # デフォルト国名
stateOrProvinceName_default = Kanagawa # デフォルト州名
localityName_default = Yokohama # デフォルト地方名
0.organizationName_default = CA # デフォルト機構名
commonName_default = XXX.XXX.XX # デフォルトドメイン
emailAddress_default = foo@bar.com # デフォルトメールア...
**認証局を作る(認証局)
証明書を認証する認証局を作ります。つまりはベリサインの代...
$ cd ssl/CA
$ /etc/ssl/misc/CA.sh -newca
CA certificate filename (or enter to create)
Making CA certificate ...
Using configuration from /usr/lib/ssl/openssl.cnf
Generating a 1024 bit RSA private key
..++++++++++++
...++++++++++++
writing new private key to './demoCA/private/./cakey.pem'
Enter PEM pass phrase: CAのパスワード
Verifying password - Enter PEM pass phrase: 認証局のパス...
-----
You are about to be asked to enter information that will...
into your certificate request.
What you are about to enter is what is called a Distingu...
There are quite a few fields but you can leave some blank
For some fields there will be a default value,
If you enter '.', the field will be left blank.
-----
Country Name (2 letter code) [JP]:
State or Province Name (full name) [Kanagawa]:
Locality Name (eg, city) [Yokohama]:
Organization Name (eg, company) [CA]:
Organizational Unit Name (eg, section) [none]:
Common Name (eg, YOUR name) [XXX.XXX.XX]:
Email Address [foo@bar.com]:
これを実行すると以下ができます。
ssl/CA/ownCA/private/cakey.pem - 認証局の秘密鍵
ssl/CA/ownCA/cacert.pem - 自己署名型の認証局証明書
**サーバ証明書&鍵
***サーバ証明書発行願と鍵を作る(サーバ管理者)
まずは暗号鍵と、サーバ証明書を発行してもらうための発行願...
$ cd ssl/admin
$ openssl req -new -keyout securekey.pem -out csr.pem
Using configuration from /usr/lib/ssl/openssl.cnf
Generating a 1024 bit RSA private key
................++++++++++++
...........++++++++++++
writing new private key to 'securekey.pem'
Enter PEM pass phrase: サーバ管理者のパスワード
Verifying password - Enter PEM pass phrase: サーバ管理者...
-----
You are about to be asked to enter information that will...
into your certificate request.
What you are about to enter is what is called a Distingu...
There are quite a few fields but you can leave some blank
For some fields there will be a default value,
If you enter '.', the field will be left blank.
-----
Country Name (2 letter code) [JP]:
State or Province Name (full name) [Kanagawa]:
Locality Name (eg, city) [Yokohama]:
Organization Name (eg, company) [server]:
Organizational Unit Name (eg, section) [none]:
Common Name (eg, YOUR name) [XXX.XXX.XX]:
Email Address [foo@bar.com]:
Please enter the following 'extra' attributes
to be sent with your certificate request
A challenge password []:
An optional company name []:
この結果以下が出来ます。
ssl/admin/csr.pem #サーバ証明書発行願
ssl/admin/securekey.pem #サーバ秘密鍵
***認証局でサーバ証明書発行願を認証してもらう(認証局)
サーバ証明書発酵用に、/etc/ssl/ssl.confを変更いたします。
[ usr_cert ] nsCertType = server
$ cd ssl/CA
$ cp ../admin/csr.pem .
$ openssl ca -out server_cert.pem -infiles csr.pem
Using configuration from /usr/lib/ssl/openssl.cnf
Enter PEM pass phrase: 認証局のパスワード
Check that the request matches the signature
Signature ok
The Subjects Distinguished Name is as follows
countryName :PRINTABLE:'JP'
stateOrProvinceName :PRINTABLE:'Kanagawa'
localityName :PRINTABLE:'Yokohama'
organizationName :PRINTABLE:'server'
organizationalUnitName:PRINTABLE:'none'
commonName :PRINTABLE:'XXX.XXX.XX'
emailAddress :IA5STRING:'foo@bar.com'
Certificate is to be certified until Dec 16 01:56:12 200...
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
この結果、サーバ証明書が出来ます。
ssl/CA/server_cert.pem #認証局署名済サーバ証明
***作った証明書でサーバを運用するよう設定する(サーバ管理...
次に、サーバ側は、この証明書を使用するように設定しましょ...
# cd ssl/admin/
# openssl rsa -in securekey.pem -out securekey_unpass.pem
こうして出来たファイルを適当な場所にコピーします。例えば/...
# cp securekey_unpass.pem /etc/apache2/ssl/securekey.pem
# cp ../CA/server_cert.pem /etc/apache2/ssl/server_cert....
次に、/etc/apache2/modules.d/41_mod_ssl.default-vhost.con...
SSLCertificateFile /etc/apache/ssl/server/server_cert.pem
SSLCertificateKeyFile /etc/apache/ssl/server/securekey.pem
**クライアント証明書&鍵
次にクライアントの証明書と鍵を作ります。最終的に出来たも...
***クライアント証明書発行願&鍵を作る(ユーザ)
では、同じようにクライアント側の証明書発行願を作ります。...
$ cd ssl/client
$ openssl req -new -keyout privatekey.pem -out privatecs...
Using configuration from /usr/lib/ssl/openssl.cnf
Generating a 1024 bit RSA private key
..................++++++++++++
.............++++++++++++
writing new private key to 'privatekey.pem'
Enter PEM pass phrase: クライアントのパスワード
Verifying password - Enter PEM pass phrase: クライアント...
-----
You are about to be asked to enter information that will...
into your certificate request.
What you are about to enter is what is called a Distingu...
There are quite a few fields but you can leave some blank
For some fields there will be a default value,
If you enter '.', the field will be left blank.
-----
Country Name (2 letter code) [JP]:
State or Province Name (full name) [Kanagawa]:
Locality Name (eg, city) [Yokohama]:
Organization Name (eg, company) [server]:
Organizational Unit Name (eg, section) [none]:
Common Name (eg, YOUR name) [XXX.XXX.XX]:
Email Address [foo@bar.com]:
Please enter the following 'extra' attributes
to be sent with your certificate request
A challenge password []:
An optional company name []:
これで出来たものが
ssl/user/privatekey.pem - クライアントの秘密鍵
ssl/user/privatecsr.pem - クライアントの証明書発行願
***クライアント証明書を発行する(認証局)
次にユーザからクライアント証明書発行願を受け取って、認証...
先にクライアント証明書発酵用に/etc/ssl/ssl.confを変更しま...
[ usr_cert ] nsCertType = client
次に発行作業です
$ cd ssl/CA
$ cp ../user/privatecsr.pem .
$ openssl ca -out private_cert.pem -infiles privatecsr.p...
Using configuration from /usr/lib/ssl/openssl.cnf
Enter PEM pass phrase: CAのパスワード
Check that the request matches the signature
Signature ok
The Subjects Distinguished Name is as follows
countryName :PRINTABLE:'JP'
stateOrProvinceName :PRINTABLE:'Kanagawa'
localityName :PRINTABLE:'Yokohama'
organizationName :PRINTABLE:'user'
organizationalUnitName:PRINTABLE:'Users Name'
commonName :PRINTABLE:'foo@bar.com'
Certificate is to be certified until Dec 16 03:11:29 200...
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
これで、クライアント側証明書ができます。
ssl/CA/demoCA/private_cert.pem
出来た証明書と、秘密鍵の2つを受け取って、ブラウザにインス...
$ cd ssl/CA
このディレクトリに先ほど作ったprivate_cert.pemとprivate...
$ openssl pkcs12 -export -inkey privatekey.pem -in priva...
-certfile ownCA/cacert.pem -name uso...
Enter PEM pass phrase: クライアントのパスワード
Enter Export Password: ブラウザ取込用パスワード
Verifying password - Enter Export Password: ブラウザ取込...
クライアントパスワードが認証局管理者にばれてしまいますが...
これで出来たprivate_cert.p12をユーザさんに渡してあげて、...
*クライアント認証のためのapacheの設定
まず、クライアント認証をするために、提示されたクライアン...
# cp ssl/CA/demoCA/cacert.pem /etc/apache2/conf/trustCA
次にapacheの設定を変えます。/etc/apache2/conf/modules.d/4...
SSLCACertificatePath conf
SSLCACertificateFile conf/trustCA
次に、例えばWebサーバの特定の場所はかなりセキュリティ的に...
-URLはhttp://foo.bar.com/board
-SSLでの通信しか許さない
-クライアント認証を要求する。自分が信頼する認証局で署名し...
ためには、/etc/apache2/commonappache.confにこんな風に設定...
<Directory /home/var/www/localhost/htdocs/board>
Options -Indexes FollowSymLinks MultiViews
AllowOverride All
SSLRequireSSL ←SSLでの通信以外許さない
SSLVerifyClient require ←SSLクライアント認証を要求する
<IfModule mod_access.c>
Order deny,allow
Allow from all
</IfModule>
</Directory>
で、apacheを再起動します
# /etc/init.d/apache2 restart
これで、http://foo.bar.com/boardでアクセスすると''Forbidd...
*制限事項
SSLクライアント認証をOKにすると、アクセスするたびにパスワ...
ページ名: