Kozupon.com    
 
 StoneなSSL認証局を作る!


StoneStoneって言うが、Stoneの本来の機能が意外と知られていない。stone は、アプリケーションレベルの TCP & UDP リピーターである。ファイアウォールの内から外へ、あるいは外から内へ、TCP あるいは UDP を中継する。インストールの詳細は、 ここ を見ていただくと解る。しかし、簡単に外から内へ、内から外へと言うがセキュリティ的には何も施さないと危なっかしくてしょうがない。まあ、大抵、外から内への場合など認証を掛けたり、TCP&UDPパケットの内容に対して暗号化するなどして通信を行うだろう。そこで、ここではStoneなSSL認証局を作る方法を説明する。ここでは、個人の認証局を作り、秘密鍵、公開鍵、ブラウザーへインポートする証明書などそれぞれの作り方を説明する。

テスト環境 )
マシン : Celeron 600MHzベアボーン
OS : Nature's Linux 1.3 VFS領域
Stone & OpenSSLがインストールされている。


1.秘密鍵の作成及び登録申請書の作成
■ 認証局に公開鍵証明書を発行してもらうのに必要な登録申請書の作成。
■ 秘密鍵の作成。

1)opensslコマンドを使ってカレントディレクトリに鍵と申請書を生成
適当なワークディレクトリへ移動する。

[VFS-root@michi /]# cd /tmp
[VFS-root@michi tmp]# openssl req -nodes -newkey rsa:512 -keyout key.pem -out newreq.pem
Generating a 512 bit RSA private key
.....................++++++++++++
...++++++++++++
writing new private key to 'key.pem'
-----
You are about to be asked to enter information that will be incorporated into your certificate request.
What you are about to enter is what is called a Distinguished Name or a DN.
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) [AU]:JP
State or Province Name (full name) [Some-State]:Tokyo
Locality Name (eg, city) []:Akasaka
Organization Name (eg, company) [Internet Widgits Pty Ltd]:よい子の会社
Organizational Unit Name (eg, section) []:Enter
Common Name (eg, YOUR name) []:gw4.よい子の会社.co.jp
Email Address []:hoge@よい子の会社.co.jp

Please enter the following 'extra' attributes
to be sent with your certificate request
A challenge password []:Enter
An optional company name []:Enter

2)秘密鍵と申請書が出来てるかを確認

[VFS-root@michi tmp]# ls -al
total 16640
drwxrwxrwx 6 root root 4096 Jul 24 23:24 .
drwxr-xr-x 17 root root 4096 Jun 28 22:23 ..
-rw-r--r-- 1 root root 497 Jul 24 23:24 key.pem
-rw-r--r-- 1 root root 542 Jul 24 23:24 newreq.pem

[VFS-root@michi tmp]# more newreq.pem
-----BEGIN CERTIFICATE REQUEST-----
MIIBVzCCAQECAQAwgZsxCzAJBgNVBAYTAkpQMQ4wDAYDVQQIEwVUb2t5bzEQMA4G
A1UEBxMHQ2hpeW9kYTEYMBYGA1UEChMPTWljcm90ZWNobm9sb2d5MSIwIAYDVQQD
ExlndzQubWljcm90ZWNobm9sb2d5LmNvLmpwMSwwKgYJKoZIhvcNAQkBFh1taGly
b25vQG1pY3JvdGVjaG5vbG9neS5jby5qcDBcMA0GCSqGSIb3DQEBAQUAA0sAMEgC
QQC+lOcOBdNb09/NutPwlZGn8/n43Tt5PNQXw8JaDxSghrRoVZZjoS7QL3aR8oUq
wcQJdELfVknIflWmQQMUGOLBAgMBAAGgADANBgkqhkiG9w0BAQQFAANBALvYJ4Eu
eCIn89o8M5qUo+KLiKqxn0YRCnpHOO5c6tYWcTErofM1c1ZwT7kYvzLkncXjJqIt
ldD+mYb1S/YwzuI=
-----END CERTIFICATE REQUEST-----

3)秘密鍵の保管

[VFS-root@michi tmp]# mv key.pem /usr/share/ssl/private/www.pem


2.認証局の作成
■ 申請書内容の確認の為の申請者が内容中のドメイン名の正規の所有者であるかの判断を行う。
■ 公開鍵証明書の発行認証局の秘密鍵で電子署名を行う。

[VFS-root@michi tmp]# cd /usr/share/ssl

1)認証局用のディレクトリCAを作る

[VFS-root@michi ssl]# mkdir CA

2)認証局用ディレクトリパスの指定

[VFS-root@michi ssl]# vi openssl.cnf
省略
[CA_default]

dir = /usr/share/ssl/CA
省略

[VFS-root@michi ssl]# vi misc/CA.sh
省略
CATOP=/usr/share/ssl/CA
省略

3)認証局を作る

[VFS-root@michi ssl]# misc/CA.sh -newca
mkdir: cannot create directory `/usr/share/ssl/CA': File exists
CA certificate filename (or enter to create) Enter

Making CA certificate ...
Generating a 1024 bit RSA private key
..........................................................................................
.............................................................++++++
..............++++++
writing new private key to '/usr/share/ssl/CA/private/./cakey.pem'
Enter PEM pass phrase: ***********
Verifying - Enter PEM pass phrase:***********
-----
You are about to be asked to enter information that will be incorporated
into your certificate request.
What you are about to enter is what is called a Distinguished Name or a DN.
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) [AU]:JP
State or Province Name (full name) [Some-State]:Tokyo
Locality Name (eg, city) []:Akasaka
Organization Name (eg, company) [Internet Widgits Pty Ltd]:よい子の会社
Organizational Unit Name (eg, section) []:Enter
Common Name (eg, YOUR name) []:gw4.よい子の会社.co.jp
Email Address []:hoge@よい子の会社.co.jp


3. 公開鍵証明書発行

1)公開鍵証明書を得るために、登録証明書を認証局へ移動する

[VFS-root@michi ssl]# mv /tmp/newreq.pem .

2)公開鍵証明書を発行する

[VFS-root@michi ssl]# misc/CA.sh -sign
省略
Certificate Details:
Serial Number: 1 (0x1)
Validity
Not Before: Jul 24 15:05:57 2006 GMT
Not After : Jul 24 15:05:57 2007 GMT
Subject:
countryName = JP
stateOrProvinceName = Tokyo
localityName = Akasaka
organizationName = よい子の会社
commonName = gw4.よい子の会社.co.jp
emailAddress = hoge@よい子の会社.co.jp
X509v3 extensions:
X509v3 Basic Constraints:
CA:FALSE
Netscape Comment:
OpenSSL Generated Certificate
X509v3 Subject Key Identifier:
EA:95:AB:12:2A:0A:D3:C1:63:A7:03:9C:4A:CD:48:FF:E8:70:0A:07
X509v3 Authority Key Identifier:
keyid:86:94:23:07:26:A2:F5:B2:DA:C1:2F:6C:A9:FB:4A:D6:A4:EA:A9:20
DirName:/C=JP/ST=Tokyo/L=Akasaka/O=よい子の会社/CN=gw4.よい子の会社.
co.jp/emailAddress=hoge@よい子の会社.co.jp
serial:CC:29:83:82:44:2C:78:87

Certificate is to be certified until Jul 24 15:05:57 2007 GMT (365 days)
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
Certificate:
Data:
Version: 3 (0x2)
Serial Number: 1 (0x1)
Signature Algorithm: md5WithRSAEncryption
Issuer: C=JP, ST=Tokyo, L=Akasaka, O=よい子の会社,
CN=gw4.よい子の会社.co.jp/emailAddress=hoge@よい子の会社.co.jp
Validity
Not Before: Jul 24 15:05:57 2006 GMT
Not After : Jul 24 15:05:57 2007 GMT
Subject: C=JP, ST=Tokyo, L=Akasaka, O=よい子の会社,
CN=gw4.よい子の会社.co.jp/emailAddress=hoge@よい子の会社.co.jp
Subject Public Key Info:
Public Key Algorithm: rsaEncryption
RSA Public Key: (512 bit)
Modulus (512 bit):
00:be:94:e7:0e:05:d3:5b:d3:df:cd:ba:d3:f0:95:
91:a7:f3:f9:f8:dd:3b:79:3c:d4:17:c3:c2:5a:0f:
14:a0:86:b4:68:55:96:63:a1:2e:d0:2f:76:91:f2:
85:2a:c1:c4:09:74:42:df:56:49:c8:7e:55:a6:41:
03:14:18:e2:c1
Exponent: 65537 (0x10001)
X509v3 extensions:
X509v3 Basic Constraints:
CA:FALSE
Netscape Comment:
OpenSSL Generated Certificate
X509v3 Subject Key Identifier:
EA:95:AB:12:2A:0A:D3:C1:63:A7:03:9C:4A:CD:48:FF:E8:70:0A:07
X509v3 Authority Key Identifier:
keyid:86:94:23:07:26:A2:F5:B2:DA:C1:2F:6C:A9:FB:4A:D6:A4:EA:A9:20
DirName:/C=JP/ST=Tokyo/L=Akasaka/O=よい子の会社/CN=gw4.よい子の会社.co.jp
/emailAddress=hoge@よい子の会社.co.jp
serial:CC:29:83:82:44:2C:78:87

Signature Algorithm: md5WithRSAEncryption
56:51:f3:df:3c:52:1f:96:94:d5:c1:fb:a1:53:46:ad:f4:e7:
60:76:5b:76:38:4f:dd:c7:7a:e3:e3:f0:ac:56:a8:7b:8e:ad:
85:cd:99:7c:65:53:55:68:60:e8:c0:39:e7:bf:53:8a:b1:5d:
ff:0e:c8:fa:ce:50:ab:e9:ff:43:d6:e3:7c:a4:ca:ff:a1:a0:
c9:60:f8:f1:59:6e:51:b6:63:f5:65:74:f9:94:24:24:a6:55:
71:d5:05:92:4e:00:78:b7:9d:98:27:5e:38:56:31:ad:7a:11:
78:93:ea:af:9c:4c:7e:61:db:6c:b7:ef:98:79:03:07:b6:c4:
0f:4a
-----BEGIN CERTIFICATE-----
MIIDmzCCAwSgAwIBAgIBATANBgkqhkiG9w0BAQQFADCBmzELMAkGA1UEBhMCSlAx
DjAMBgNVBAgTBVRva3lvMRAwDgYDVQQHEwdDaGl5b2RhMRgwFgYDVQQKEw9NaWNy
b3RlY2hub2xvZ3kxIjAgBgNVBAMTGWd3NC5taWNyb3RlY2hub2xvZ3kuY28uanAx
LDAqBgkqhkiG9w0BCQEWHW1oaXJvbm9AbWljcm90ZWNobm9sb2d5LmNvLmpwMB4X
DTA2MDcyNDE1MDU1N1oXDTA3MDcyNDE1MDU1N1owgZsxCzAJBgNVBAYTAkpQMQ4w
DAYDVQQIEwVUb2t5bzEQMA4GA1UEBxMHQ2hpeW9kYTEYMBYGA1UEChMPTWljcm90
ZWNobm9sb2d5MSIwIAYDVQQDExlndzQubWljcm90ZWNobm9sb2d5LmNvLmpwMSww
KgYJKoZIhvcNAQkBFh1taGlyb25vQG1pY3JvdGVjaG5vbG9neS5jby5qcDBcMA0G
CSqGSIb3DQEBAQUAA0sAMEgCQQC+lOcOBdNb09/NutPwlZGn8/n43Tt5PNQXw8Ja
DxSghrRoVZZjoS7QL3aR8oUqwcQJdELfVknIflWmQQMUGOLBAgMBAAGjggEvMIIB
KzAJBgNVHRMEAjAAMCwGCWCGSAGG+EIBDQQfFh1PcGVuU1NMIEdlbmVyYXRlZCBD
ZXJ0aWZpY2F0ZTAdBgNVHQ4EFgQU6pWrEioK08FjpwOcSs1I/+hwCgcwgdAGA1Ud
IwSByDCBxYAUhpQjByai9bLawS9sqftK1qTqqSChgaGkgZ4wgZsxCzAJBgNVBAYT
AkpQMQ4wDAYDVQQIEwVUb2t5bzEQMA4GA1UEBxMHQ2hpeW9kYTEYMBYGA1UEChMP
TWljcm90ZWNobm9sb2d5MSIwIAYDVQQDExlndzQubWljcm90ZWNobm9sb2d5LmNv
LmpwMSwwKgYJKoZIhvcNAQkBFh1taGlyb25vQG1pY3JvdGVjaG5vbG9neS5jby5q
cIIJAMwpg4JELHiHMA0GCSqGSIb3DQEBBAUAA4GBAFZR8988Uh+WlNXB+6FTRq30
52B2W3Y4T93HeuPj8KxWqHuOrYXNmXxlU1VoYOjAOee/U4qxXf8OyPrOUKvp/0PW
43ykyv+hoMlg+PFZblG2Y/VldPmUJCSmVXHVBZJOAHi3nZgnXjhWMa16EXiT6q+c
TH5h22y375h5Awe2xA9K
-----END CERTIFICATE-----
Signed certificate is in newcert.pem

3)公開鍵証明書 newcert.pem を www.pem として移動する

[VFS-root@michi ssl]# ls -al
total 44
drwxr-xr-x 6 root root 4096 Jul 25 00:05 .
drwxr-xr-x 40 root root 4096 May 23 23:05 ..
drwxr-xr-x 6 root root 4096 Jul 25 00:06 CA
drwxr-xr-x 2 root root 4096 Jun 9 2005 certs
drwxr-xr-x 2 root root 4096 Jul 24 23:50 misc
-rw-r--r-- 1 root root 3422 Jul 25 00:06 newcert.pem
-rw-r--r-- 1 root root 542 Jul 25 00:05 newreq.pem
-rw-r--r-- 1 root root 9389 Jul 24 23:49 openssl.cnf
drwxr-xr-x 2 root root 4096 Feb 25 2005 private

[VFS-root@michi ssl]# mv newcert.pem certs/www.pem

[VFS-root@michi ssl]# cd /tmp
[VFS-root@michi tmp]#
openssl x509 -outform DER -out www.der < /usr/share/ssl/certs/www.pem
www.derファイルが作成できたら、www.derファイルをブラウザにインポートする証明書としてWebサイトへ保存する。


4.stoneの起動スクリプトを編集する
[VFS-root@michi tmp]#
cd /etc/init.d

以下のようにstoneのオプションスイッチを編集する。

[VFS-root@michi init.d]# vi myinit.stone-ssl
#!/bin/sh

test -f /usr/bin/stone || exit 0

TGT="192.168.0.22"

DES="xxx.xxx.xxx.xxx"

PS="/bin/ps"
GREP="/bin/grep"
CUT="/usr/bin/cut"
KILL="/usr/bin/killall"

STONE="/usr/bin/stone"
STONE_OPT="-X 10000 -l -f 2 -a /var/log/stone.log -z key=/usr/share/ssl/private/www.pem \
-z cert=/usr/share/ssl/certs/www.pem ${TGT}:http ${DES}:443/ssl
"

case "$1" in
start)
echo -n "Starting stone-ssl server: stone"
${STONE} ${STONE_OPT} 2> /dev/null &
echo "."
;;
stop)
echo -n "Stopping stone-ssl server: stone... "
${KILL} stone
;;
*)
echo "Usage: /etc/init.d/stone-ssl {start|stop}"
exit 1


-z key=/usr/lib/ssl/private/www.pem -z cert=/usr/lib/ssl/certs/www.pem ここの部分は秘密鍵と公開鍵。
これで、起動スクリプトをスタートさせればOK!

以上


 
 
 



Copyright 2005 Kozupon.com.