opensslコマンド

[サーバの実験室 Slackware]

作成 : 2003/02/16
修正 : 2003/10/13
修正 : 2011/05/22

"サーバの実験室"の検索


デフォルトで使用されるランダム情報ファイルやポリシー、CA の秘密鍵ファイルや証明書ファイルは、openssl.cnf で定義される。 openssl.cnf は、/usr/local/ssl ディレクトリ(デフォルト)に置かれる。

CA の開設

CA を開設するには、/usr/local/ssl/misc/CA.sh を使用する。 ./demoCA ディレクトリに、cacert.pem(CA 証明書)や private/cakey.pem(CA 秘密鍵)が作成される。 CA.sh から /usr/local/ssl/bin/openssl を実行しているので、パスを通しておくこと。

# misc/CA.sh -newca

CA certificate filename (or enter to create)
(Enter)
Making CA certificate ...
Generating a 1024 bit RSA private key
................++++++
......................++++++
writing new private key to './demoCA/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) []: Chuo-ku
Organization Name (eg, company) [Internet Widgits Pty Ltd]: TEST
Organizational Unit Name (eg, section) []: Labo
Common Name (eg, YOUR name) []: Admin
Email Address []: root@localhost

RSA秘密鍵の作成

秘密鍵を作成するには、openssl genrsa を使用する。 例では、DES3 で暗号化された 1024 ビット(デフォルトは 512 ビット)の RSA 秘密鍵 server.key を作成している。 秘密鍵は、他の人がアクセスできない場所に保存しておくこと!

# openssl genrsa -des3 -out server.key 1024

Generating RSA private key, 1024 bit long modulus
.................++++++
...................................................++++++
e is 65537 (0x10001)
Enter pass phrase for server.key: パスフレーズ
Verifying - Enter pass phrase for server.key: パスフレーズ

server.key の中身を見てみる。

-----BEGIN RSA PRIVATE KEY-----
Proc-Type: 4,ENCRYPTED
DEK-Info: DES-EDE3-CBC,BB9E603E3C4A94FC

Dxg1wRjJHiUwZN5F1RCSbC/76g0LCWAZRJ7yjA2vsxSAaXQ8Frn2I8cAG4di5dvV
EMlAtH7f6OCa6NMNvaTtESIidahrK09RpP1qs/iSi3BkGNHtQ8ITMhg1YdRO+fUX
KmSS6Bz3hn9xqpM3N3L9ngGHs01LeXQSCeid2SidlqLBn88ytHs/jqc1rdKjblHq
KyCb5Jk6QfLDjeHYptZwwEI/JqNxu5uzyCLLlWvgSW33poQu3dspOmFa0KIQAhLf
L69nSP09z1fZLKNBvXw6En8cZzPYa4lJU6toseiUaCg1VZ9+GVpbsjww5In7s74e
LlmOF/DfXxXQlzI5FWCDwgqEf79uUKA4IlG/wOUH3jtsVb5WIGZaoA4R+srWtuDx
5yNzoUKrtb88oLRE/G5NJjvWvHZKJj+hZFKoeanhqrkl2UTys82a4w7TxbS9Izir
tnBubo9Cv1bUkq3BlN7EemAmBbXer1ZyDHcvKeMScl+/f+6ieeeSZe7UAuBINWIA
9q7ipwHmHDbYFgy/64Ka37JRjxkONJAS0K0/I93U/4fI0WwAP+750j8GWjuW+oFZ
skCu2jyuwHpEvSNT/FhCp0BZnBmi5dQ/+45ViBcA50E1eEPAM2LyZe5ad+gopE2S
F7EexE70zvUADAAzSCActPYo6kJiNrZ0bK7FwgZXa/pU3qCaqtSOWjeLqxkbcWC4
NF1NUz8uLUqPAv6DEyHBp4cMubdP15mizf8neCNwwKuJ9Nq25WJBkHZXpwK5fT67
CZTF3lkZqiHSYpgbu0yt0ZtkArwsjjLYPGpgO5fiQ6s=
-----END RSA PRIVATE KEY-----

RSA秘密鍵のテキスト表示

秘密鍵をテキスト形式で表示するには、openssl rsa -text を使用する。

# openssl rsa -in server.key -text

Enter pass phrase for server.key: パスフレーズ
Private-Key: (1024 bit)
modulus:
    00:bc:a2:fe:70:44:e1:50:71:9c:a1:c3:43:34:be:
    f5:32:82:ee:e8:35:6a:87:e0:b8:75:34:fc:24:15:
    9f:95:48:5c:d5:10:13:94:fc:7f:03:3b:43:e7:70:
    a2:93:d2:3f:5c:df:c9:27:4e:ef:13:73:7d:fa:d5:
    22:e5:d5:39:89:7d:cb:3d:8b:70:d2:ce:69:5e:57:
    af:14:05:3b:75:48:ea:f5:e2:1e:c1:ce:38:c7:70:
    b8:2b:cc:76:47:2d:42:b9:50:0c:e4:9d:15:17:e8:
    95:9a:2a:8d:d9:6a:e5:db:f7:98:6a:7e:22:f2:ff:
    d4:2d:f8:52:a4:ed:02:e9:a3
publicExponent: 65537 (0x10001)
privateExponent:
    4a:7d:b3:2c:72:86:e7:55:76:1d:0b:16:c7:05:81:
    9e:68:c6:1f:3c:b8:cc:df:98:f7:ef:ec:81:f3:68:
    09:73:81:f5:41:5b:fa:41:9b:86:93:28:c5:84:5d:
    2f:32:9f:82:f5:7c:61:e1:71:d7:a4:8b:e3:39:b7:
    86:3b:25:74:d0:41:69:73:7c:4e:e3:ac:65:cc:7c:
    00:99:08:92:32:a1:56:92:60:15:b6:2d:3c:d8:27:
    81:e9:52:24:57:69:60:8f:b2:17:b2:9c:10:55:03:
    dd:6a:bf:bf:c7:1c:84:a5:3e:76:82:5b:80:2a:6c:
    4e:b2:b8:8e:7e:81:41:c1
prime1:
    00:e7:d4:b6:21:9a:fe:9f:f6:f2:c5:e4:33:38:20:
    bc:4c:3e:a4:fe:c8:eb:8a:cc:d8:79:9e:f8:8a:fe:
    4c:cc:43:8d:07:75:fd:6a:c9:40:b9:62:34:ab:01:
    58:39:aa:86:a0:e1:5d:e6:04:d7:65:8e:30:35:78:
    e2:4f:5b:b1:0f
prime2:
    00:d0:4d:7b:19:60:af:b3:5c:3f:7b:9d:f5:67:cc:
    fb:08:59:9b:ca:a8:9c:5a:a8:71:02:4a:e0:50:8b:
    12:94:23:e4:42:b5:0f:31:26:b2:88:d1:8f:ed:92:
    e3:b9:da:c0:8c:6a:a5:b6:16:f5:f4:85:86:6f:9b:
    c9:31:7a:96:2d
exponent1:
    15:0f:cc:24:2d:72:a8:91:c4:e8:99:9c:d5:a2:93:
    b8:d1:90:27:dd:95:18:9d:17:a5:a4:fd:ab:93:02:
    e3:23:d7:f2:2f:94:00:59:9c:59:bb:44:51:ac:e3:
    99:09:97:05:92:b3:f7:2b:c5:6d:e2:87:1a:b4:8a:
    ca:ee:e7:9d
exponent2:
    01:aa:5c:ed:9b:04:4c:9e:d4:33:1c:d4:35:7c:42:
    15:93:01:d7:e0:f9:3f:10:51:b6:fe:fa:44:2a:98:
    7f:6e:ba:08:7e:82:1c:96:7e:9e:f1:6e:01:2c:47:
    7d:d8:ed:e9:31:81:19:af:9d:4f:d3:31:7b:fa:f6:
    e4:da:62:11
coefficient:
    0e:f0:4e:c6:36:0e:f8:ce:a3:12:1d:f3:43:77:f2:
    f1:42:04:bf:31:d0:5e:46:65:f8:bd:e9:b1:dd:dd:
    3f:ba:f6:05:ad:ea:40:be:da:e4:3f:56:38:86:fe:
    7a:41:fe:6b:10:77:c8:84:14:00:d8:77:42:60:24:
    48:34:c6:1f

RSA秘密鍵のパスフレーズ削除

Apache で ssl を使用する場合、起動時に秘密鍵のパスフレーズを聞いてくるので、途中で止まってしまう。 例では、秘密鍵 server.key を復号化して、パスフレーズを入力しなくても秘密鍵を使用できるようにしている。

# openssl rsa -in server.key -out server.key

Enter pass phrase for server.key: パスフレーズ
writing RSA key

パスフレーズを削除した後の server.key の中身を見てみる。

-----BEGIN RSA PRIVATE KEY-----
MIICWwIBAAKBgQC8ov5wROFQcZyhw0M0vvUygu7oNWqH4Lh1NPwkFZ+VSFzVEBOU
/H8DO0PncKKT0j9c38knTu8Tc3361SLl1TmJfcs9i3DSzmleV68UBTt1SOr14h7B
zjjHcLgrzHZHLUK5UAzknRUX6JWaKo3ZauXb95hqfiLy/9Qt+FKk7QLpowIDAQAB
AoGASn2zLHKG51V2HQsWxwWBnmjGHzy4zN+Y9+/sgfNoCXOB9UFb+kGbhpMoxYRd
LzKfgvV8YeFx16SL4zm3hjsldNBBaXN8TuOsZcx8AJkIkjKhVpJgFbYtPNgngelS
JFdpYI+yF7KcEFUD3Wq/v8cchKU+doJbgCpsTrK4jn6BQcECQQDn1LYhmv6f9vLF
5DM4ILxMPqT+yOuKzNh5nviK/kzMQ40Hdf1qyUC5YjSrAVg5qoag4V3mBNdljjA1
eOJPW7EPAkEA0E17GWCvs1w/e531Z8z7CFmbyqicWqhxAkrgUIsSlCPkQrUPMSay
iNGP7ZLjudrAjGqlthb19IWGb5vJMXqWLQJAFQ/MJC1yqJHE6Jmc1aKTuNGQJ92V
GJ0XpaT9q5MC4yPX8i+UAFmcWbtEUazjmQmXBZKz9yvFbeKHGrSKyu7nnQJAAapc
7ZsETJ7UMxzUNXxCFZMB1+D5PxBRtv76RCqYf266CH6CHJZ+nvFuASxHfdjt6TGB
Ga+dT9Mxe/r25NpiEQJADvBOxjYO+M6jEh3zQ3fy8UIEvzHQXkZl+L3psd3dP7r2
Ba3qQL7a5D9WOIb+ekH+axB3yIQUANh3QmAkSDTGHw==
-----END RSA PRIVATE KEY-----

X.509証明書要求(CSR:Certification Signing Request )の作成

証明書は、証明書要求を CA に送り、それに CA が署名をつけることで作成される。 証明書要求を作成するには、openssl req を使用する。 例では、秘密鍵 server.key を使用して、証明書要求 server.csr を作成している。 デフォルトでは、openssl.cnf でCA 秘密鍵ファイルやポリシーを定義する。

注意! デフォルトの openssl.cnf のポリシーでは、証明書要求と CA の Country Name、State or Province Name、Organization Name が同じでないとエラーになってしまう。

注意! Apache ssl のサーバ証明書要求を作成する場合は、Common Name を httpd.conf(または ssl.conf)の ServerName と同じにしておくこと。

# openssl req -new -key server.key -out server.csr

Enter pass phrase for server.key: パスフレーズ
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) []: Chuo-ku
Organization Name (eg, company) [Internet Widgits Pty Ltd]: TEST
Organizational Unit Name (eg, section) []: Server
Common Name (eg, YOUR name) []: Admin
Email Address []: admin@localhost

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

server.csr の中身を見てみる。

-----BEGIN CERTIFICATE REQUEST-----
MIIBvzCCASgCAQAwfzELMAkGA1UEBhMCSlAxDjAMBgNVBAgTBVRva3lvMRAwDgYD
VQQHEwdDaHVvLWt1MQ0wCwYDVQQKEwRURVNUMQ8wDQYDVQQLEwZTZXJ2ZXIxDjAM
BgNVBAMTBUFkbWluMR4wHAYJKoZIhvcNAQkBFg9hZG1pbkBsb2NhbGhvc3QwgZ8w
DQYJKoZIhvcNAQEBBQADgY0AMIGJAoGBALyi/nBE4VBxnKHDQzS+9TKC7ug1aofg
uHU0/CQVn5VIXNUQE5T8fwM7Q+dwopPSP1zfySdO7xNzffrVIuXVOYl9yz2LcNLO
aV5XrxQFO3VI6vXiHsHOOMdwuCvMdkctQrlQDOSdFRfolZoqjdlq5dv3mGp+IvL/
1C34UqTtAumjAgMBAAGgADANBgkqhkiG9w0BAQQFAAOBgQB+twvKkoxS4Ybw5gKd
kcwFjOsK0l6Ad/AE3DYeCzOXXBI1spnkrXFPsoY71eDEMA2xSY4A6vw4zuxWIjt+
L/CegCDohmre2oUqNpaq5ZKIAoyoD+WClBOIdmCWwwBURpxx6WHPGdqCI+fRfpjA
W7Xo9/HH6QYyywTuinOvL2BLPw==
-----END CERTIFICATE REQUEST-----

X.509証明書要求のテキスト表示

証明書要求をテキスト形式で表示するには、openssl req -text を使用する。 Signature は、データのハッシュ値をサーバの秘密鍵で暗号化している。 証明書要求を受け取った CA は、サーバの公開鍵(データの RSA Public Key)で復号化し、認証する。

# openssl req -in server.csr -text

Certificate Request:
    Data:
        Version: 0 (0x0)
        Subject: C=JP, ST=Tokyo, L=Chuo-ku, O=TEST, OU=Server, CN=Admin/emailAddress=admin@localhost
        Subject Public Key Info:
            Public Key Algorithm: rsaEncryption
            RSA Public Key: (1024 bit)
                Modulus (1024 bit):
                    00:bc:a2:fe:70:44:e1:50:71:9c:a1:c3:43:34:be:
                    f5:32:82:ee:e8:35:6a:87:e0:b8:75:34:fc:24:15:
                    9f:95:48:5c:d5:10:13:94:fc:7f:03:3b:43:e7:70:
                    a2:93:d2:3f:5c:df:c9:27:4e:ef:13:73:7d:fa:d5:
                    22:e5:d5:39:89:7d:cb:3d:8b:70:d2:ce:69:5e:57:
                    af:14:05:3b:75:48:ea:f5:e2:1e:c1:ce:38:c7:70:
                    b8:2b:cc:76:47:2d:42:b9:50:0c:e4:9d:15:17:e8:
                    95:9a:2a:8d:d9:6a:e5:db:f7:98:6a:7e:22:f2:ff:
                    d4:2d:f8:52:a4:ed:02:e9:a3
                Exponent: 65537 (0x10001)
        Attributes:
            a0:00
    Signature Algorithm: md5WithRSAEncryption
        7e:b7:0b:ca:92:8c:52:e1:86:f0:e6:02:9d:91:cc:05:8c:eb:
        0a:d2:5e:80:77:f0:04:dc:36:1e:0b:33:97:5c:12:35:b2:99:
        e4:ad:71:4f:b2:86:3b:d5:e0:c4:30:0d:b1:49:8e:00:ea:fc:
        38:ce:ec:56:22:3b:7e:2f:f0:9e:80:20:e8:86:6a:de:da:85:
        2a:36:96:aa:e5:92:88:02:8c:a8:0f:e5:82:94:13:88:76:60:
        96:c3:00:54:46:9c:71:e9:61:cf:19:da:82:23:e7:d1:7e:98:
        c0:5b:b5:e8:f7:f1:c7:e9:06:32:cb:04:ee:8a:73:af:2f:60:
        4b:3f

X.509証明書の作成

証明書は、証明書要求を CA に送り、それに CA が署名をつけることで作成される。 署名は、データのハッシュ値を CA の秘密鍵で暗号化したもの。 署名を CA の公開鍵(ディレクトリサービスなどで公開)で復号化できれば、身元を確認できたことになる。

証明書に署名するには、openssl ca を使用する。 例では、証明書要求 server.csr に署名して、証明書 server.crt を作成している。 デフォルトでは、openssl.cnf でCA 秘密鍵ファイルやポリシーを定義する。 -config で定義ファイルを指定できる。 証明書の有効期間は、openssl.cnfの"default_days"で指定した日数となる。

# openssl ca -in server.csr [-config configfile] -out server.crt

Using configuration from /usr/local/ssl/openssl.cnf
Enter pass phrase for ./demoCA/private/cakey.pem: CA パスフレーズ
Check that the request matches the signature
Signature ok
Certificate Details:
        Serial Number: 1 (0x1)
        Validity
            Not Before: Feb 13 07:04:36 2003 GMT
            Not After : Feb 13 07:04:36 2004 GMT
        Subject:
            countryName               = JP
            stateOrProvinceName       = Tokyo
            organizationName          = TEST
            organizationalUnitName    = Server
            commonName                = Admin
            emailAddress              = admin@localhost
        X509v3 extensions:
            X509v3 Basic Constraints:
            CA:FALSE
            Netscape Comment:
            OpenSSL Generated Certificate
            X509v3 Subject Key Identifier:
            3E:CF:D0:A3:AE:16:AE:E2:2E:67:3F:CF:40:24:F2:41:16:81:62:1C
            X509v3 Authority Key Identifier:
            keyid:85:13:CE:55:94:F3:D6:C9:0A:E1:1F:60:25:E8:6F:40:0E:64:BE:78
            DirName:/C=JP/ST=Tokyo/L=Chuo-ku/O=TEST/OU=Labo/CN=Admin/emailAddress=root@localhost
            serial:00

Certificate is to be certified until Feb 13 07:04:36 2004 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

server.crt の中身を見てみる。

Certificate:
    Data:
        Version: 3 (0x2)
        Serial Number: 1 (0x1)
        Signature Algorithm: md5WithRSAEncryption
        Issuer: C=JP, ST=Tokyo, L=Chuo-ku, O=TEST, OU=Labo, CN=Admin/emailAddress=root@localhost
        Validity
            Not Before: Feb 13 07:04:36 2003 GMT
            Not After : Feb 13 07:04:36 2004 GMT
        Subject: C=JP, ST=Tokyo, O=TEST, OU=Server, CN=Admin/emailAddress=admin@localhost
        Subject Public Key Info:
            Public Key Algorithm: rsaEncryption
            RSA Public Key: (1024 bit)
                Modulus (1024 bit):
                    00:bc:a2:fe:70:44:e1:50:71:9c:a1:c3:43:34:be:
                    f5:32:82:ee:e8:35:6a:87:e0:b8:75:34:fc:24:15:
                    9f:95:48:5c:d5:10:13:94:fc:7f:03:3b:43:e7:70:
                    a2:93:d2:3f:5c:df:c9:27:4e:ef:13:73:7d:fa:d5:
                    22:e5:d5:39:89:7d:cb:3d:8b:70:d2:ce:69:5e:57:
                    af:14:05:3b:75:48:ea:f5:e2:1e:c1:ce:38:c7:70:
                    b8:2b:cc:76:47:2d:42:b9:50:0c:e4:9d:15:17:e8:
                    95:9a:2a:8d:d9:6a:e5:db:f7:98:6a:7e:22:f2:ff:
                    d4:2d:f8:52:a4:ed:02:e9:a3
                Exponent: 65537 (0x10001)
        X509v3 extensions:
            X509v3 Basic Constraints:
            CA:FALSE
            Netscape Comment:
            OpenSSL Generated Certificate
            X509v3 Subject Key Identifier:
            3E:CF:D0:A3:AE:16:AE:E2:2E:67:3F:CF:40:24:F2:41:16:81:62:1C
            X509v3 Authority Key Identifier:
            keyid:85:13:CE:55:94:F3:D6:C9:0A:E1:1F:60:25:E8:6F:40:0E:64:BE:78
            DirName:/C=JP/ST=Tokyo/L=Chuo-ku/O=TEST/OU=Labo/CN=Admin/emailAddress=root@localhost
            serial:00

    Signature Algorithm: md5WithRSAEncryption
        bf:4b:b4:a3:a6:cf:c9:2d:19:d7:93:a1:73:31:3d:e8:ac:89:
        fb:16:01:1e:42:e6:0c:dc:d7:85:79:5d:ea:64:6f:77:28:8d:
        68:f7:e0:33:82:bc:51:57:a9:f2:d0:91:57:8b:97:30:d8:6f:
        22:3d:55:58:88:46:34:5e:fc:29:bb:20:84:44:ce:f8:84:fd:
        0f:d1:fe:14:e3:e0:97:60:00:cd:d3:69:6c:ce:79:2a:e0:ec:
        e0:a8:dc:00:72:3e:7a:7e:d5:c7:64:9c:24:2c:1b:d4:ea:1b:
        5d:ba:52:ac:fc:53:d0:e4:22:aa:33:57:43:96:fd:b8:4a:32:
        8e:77
-----BEGIN CERTIFICATE-----
MIIDZzCCAtCgAwIBAgIBATANBgkqhkiG9w0BAQQFADB8MQswCQYDVQQGEwJKUDEO
MAwGA1UECBMFVG9reW8xEDAOBgNVBAcTB0NodW8ta3UxDTALBgNVBAoTBFRFU1Qx
DTALBgNVBAsTBExhYm8xDjAMBgNVBAMTBUFkbWluMR0wGwYJKoZIhvcNAQkBFg5y
b290QGxvY2FsaG9zdDAeFw0wMzAyMTMwNzA0MzZaFw0wNDAyMTMwNzA0MzZaMG0x
CzAJBgNVBAYTAkpQMQ4wDAYDVQQIEwVUb2t5bzENMAsGA1UEChMEVEVTVDEPMA0G
A1UECxMGU2VydmVyMQ4wDAYDVQQDEwVBZG1pbjEeMBwGCSqGSIb3DQEJARYPYWRt
aW5AbG9jYWxob3N0MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQC8ov5wROFQ
cZyhw0M0vvUygu7oNWqH4Lh1NPwkFZ+VSFzVEBOU/H8DO0PncKKT0j9c38knTu8T
c3361SLl1TmJfcs9i3DSzmleV68UBTt1SOr14h7BzjjHcLgrzHZHLUK5UAzknRUX
6JWaKo3ZauXb95hqfiLy/9Qt+FKk7QLpowIDAQABo4IBBjCCAQIwCQYDVR0TBAIw
ADAsBglghkgBhvhCAQ0EHxYdT3BlblNTTCBHZW5lcmF0ZWQgQ2VydGlmaWNhdGUw
HQYDVR0OBBYEFD7P0KOuFq7iLmc/z0Ak8kEWgWIcMIGnBgNVHSMEgZ8wgZyAFIUT
zlWU89bJCuEfYCXob0AOZL54oYGApH4wfDELMAkGA1UEBhMCSlAxDjAMBgNVBAgT
BVRva3lvMRAwDgYDVQQHEwdDaHVvLWt1MQ0wCwYDVQQKEwRURVNUMQ0wCwYDVQQL
EwRMYWJvMQ4wDAYDVQQDEwVBZG1pbjEdMBsGCSqGSIb3DQEJARYOcm9vdEBsb2Nh
bGhvc3SCAQAwDQYJKoZIhvcNAQEEBQADgYEAv0u0o6bPyS0Z15OhczE96KyJ+xYB
HkLmDNzXhXld6mRvdyiNaPfgM4K8UVep8tCRV4uXMNhvIj1VWIhGNF78KbsghETO
+IT9D9H+FOPgl2AAzdNpbM55KuDs4KjcAHI+en7Vx2ScJCwb1OobXbpSrPxT0OQi
qjNXQ5b9uEoyjnc=
-----END CERTIFICATE-----

-out で指定したファイルのほかに、demoCA/newcerts/XX.pem が作成される。 また、demoCA/index.txt ファイルに発行した証明書の情報が書き込まれる。 demoCA/index.txt を見てみる。 最初の "V" は Valid (有効)であることを示し、次の "041011105657Z" は証明書の有効期限を示す。

V       041011105657Z           01      unknown /C=JP/ST=Tokyo/O=nina/OU=web/CN=www.nina.jp/emailAddress=webmaster@nina.jp

自己署名X.509証明書の作成

CA で署名してもらうのでなく、自分で署名をつけることもできる。 証明書に署名するには、openssl req を使用する。 例では、秘密鍵 server.key を元に 自己署名証明書 server.crt を作成している。

"-config"で定義ファイルを指定することができる。 "-days n"で、証明書の有効期間を指定する。

# openssl req -new -x509 -key server.key -out server.crt [-config configfile] [-days n]

Enter pass phrase for server.key: パスフレーズ
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) []: Chuo-ku
Organization Name (eg, company) [Internet Widgits Pty Ltd]: TEST
Organizational Unit Name (eg, section) []: Server
Common Name (eg, YOUR name) []: Admin
Email Address []: admin@localhost

定義ファイルの例。

[ req ]
default_bits            = 2048
default_md              = sha1
distinguished_name      = req_distinguished_name
x509_extensions = v3_ca # The extentions to add to the self signed cert
# 対話形式にしない。
prompt = no

# Passwords for private keys if not present they will be prompted for
# 対話形式にしない場合、秘密鍵のパスフレーズをここで指定。
# すでに秘密鍵がある場合は、input_passwordでパスフレーズを指定
input_password = secret
# 自己署名証明書と一緒に秘密鍵を作成する場合は、output_passwordでパスフレーズを指定。
output_password = secret

[ req_distinguished_name ]

# Country Name (2 letter code)
#C =
# State or Province Name (full name)
#ST =
# Locality Name (eg, city)
#L =
# Organization Name (eg, company)
#O =
# Organizational Unit Name (eg, section)
OU = host
# Common Name (eg, your name or your server\'s hostname)
# サーバ証明書やクライアント証明書ではホストのFQDNを指定。
CN = host.example.com
# Email Address
emailAddress = mail@example.com

[ v3_ca ]

# Extensions for a typical CA

# PKIX recommendation.
subjectKeyIdentifier=hash
authorityKeyIdentifier=keyid:always,issuer

# This is what PKIX recommends but some broken software chokes on critical
# extensions.
#basicConstraints = critical,CA:true
# So we do this instead.
basicConstraints = CA:true

# Key usage: this is typical for a CA certificate. However since it will
# prevent it being used as an test self-signed certificate it is best
# left out by default.
# keyUsage = cRLSign, keyCertSign

# Some might want this also
# nsCertType = sslCA, emailCA

# Include email address in subject alt name: another PKIX recommendation
# subjectAltName=email:copy
# Copy issuer details
# issuerAltName=issuer:copy

server.crt の中身を見てみる。

-----BEGIN CERTIFICATE-----
MIIDUzCCArygAwIBAgIBADANBgkqhkiG9w0BAQQFADB/MQswCQYDVQQGEwJKUDEO
MAwGA1UECBMFVG9reW8xEDAOBgNVBAcTB0NodW8ta3UxDTALBgNVBAoTBFRFU1Qx
DzANBgNVBAsTBlNlcnZlcjEOMAwGA1UEAxMFQWRtaW4xHjAcBgkqhkiG9w0BCQEW
D2FkbWluQGxvY2FsaG9zdDAeFw0wMzAyMTMwNzQyNTdaFw0wMzAzMTUwNzQyNTda
MH8xCzAJBgNVBAYTAkpQMQ4wDAYDVQQIEwVUb2t5bzEQMA4GA1UEBxMHQ2h1by1r
dTENMAsGA1UEChMEVEVTVDEPMA0GA1UECxMGU2VydmVyMQ4wDAYDVQQDEwVBZG1p
bjEeMBwGCSqGSIb3DQEJARYPYWRtaW5AbG9jYWxob3N0MIGfMA0GCSqGSIb3DQEB
AQUAA4GNADCBiQKBgQDaArtyUslDG3uKNCObcOKiRioNuxibmp47A9LsRRSQuclS
uR6SmJMPXoGqUqorXPL/vPuVbVz1H63Z3T9w548prdARwFjOI6vRwx75vxyHoNRz
3osHouR+fsx+3gnWjCXY+EnzXMFOUlmJYZcGcEmjGtgcdwzAHlDfn7tFnWer4wID
AQABo4HeMIHbMB0GA1UdDgQWBBSnx6rM3mqdwB1aPafVNcrNHOI7ADCBqwYDVR0j
BIGjMIGggBSnx6rM3mqdwB1aPafVNcrNHOI7AKGBhKSBgTB/MQswCQYDVQQGEwJK
UDEOMAwGA1UECBMFVG9reW8xEDAOBgNVBAcTB0NodW8ta3UxDTALBgNVBAoTBFRF
U1QxDzANBgNVBAsTBlNlcnZlcjEOMAwGA1UEAxMFQWRtaW4xHjAcBgkqhkiG9w0B
CQEWD2FkbWluQGxvY2FsaG9zdIIBADAMBgNVHRMEBTADAQH/MA0GCSqGSIb3DQEB
BAUAA4GBACXjxcA8hOR5O3+uijac+P+65UqvT6SVFa8+FEQ5DlU9GwJRKk8jbCuu
pmTkJLxD9aq7KdlnC3c+D+Gq6y0EJMQ+BiRkIDCwsEWIOM4MhWe0FTu9iANFU7gT
L/h6k2ZtayjxGvyE1HCKadtPG8P68BWkY5P4g/yU5QgkoaPn2INv
-----END CERTIFICATE-----

RSA秘密鍵と自己署名X.509証明書の作成

秘密鍵と自己署名証明書をまとめて作成することができる。 例では、秘密鍵 server.key と自己署名証明書 server.crt を作成している。

"-config"で定義ファイルを指定することができる。 定義ファイルの例は、X.509自己署名証明書の作成を参照。 "-days n"で、証明書の有効期間を指定する。

# openssl req -newkey rsa -x509 -out server.crt -keyout server.key [-config configfile] [-days n]

Generating a 1024 bit RSA private key
.........++++++
..++++++
writing new private key to 'server.key'
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) []: Chuo-ku
Organization Name (eg, company) [Internet Widgits Pty Ltd]: TEST
Organizational Unit Name (eg, section) []: Server
Common Name (eg, YOUR name) []: Admin
Email Address []: admin@localhost

暗号化しない(使用時にパスフレーズの入力を必要としない)秘密鍵を作成することもできる。

# openssl req -new -x509 -nodes -out server.crt -keyout server.key

X.509証明書のテキスト表示

証明書をテキスト形式で表示するには、openssl x509 -text を使用する。

# openssl x509 -in server.crt -text

Certificate:
    Data:
        Version: 3 (0x2)
        Serial Number: 0 (0x0)
        Signature Algorithm: md5WithRSAEncryption
        Issuer: C=JP, ST=Tokyo, L=Chuo-ku, O=TEST, OU=Server, CN=Admin/emailAddress=admin@localhost
        Validity
            Not Before: Feb 13 07:42:57 2003 GMT
            Not After : Mar 15 07:42:57 2003 GMT
        Subject: C=JP, ST=Tokyo, L=Chuo-ku, O=TEST, OU=Server, CN=Admin/emailAddress=admin@localhost
        Subject Public Key Info:
            Public Key Algorithm: rsaEncryption
            RSA Public Key: (1024 bit)
                Modulus (1024 bit):
                    00:da:02:bb:72:52:c9:43:1b:7b:8a:34:23:9b:70:
                    e2:a2:46:2a:0d:bb:18:9b:9a:9e:3b:03:d2:ec:45:
                    14:90:b9:c9:52:b9:1e:92:98:93:0f:5e:81:aa:52:
                    aa:2b:5c:f2:ff:bc:fb:95:6d:5c:f5:1f:ad:d9:dd:
                    3f:70:e7:8f:29:ad:d0:11:c0:58:ce:23:ab:d1:c3:
                    1e:f9:bf:1c:87:a0:d4:73:de:8b:07:a2:e4:7e:7e:
                    cc:7e:de:09:d6:8c:25:d8:f8:49:f3:5c:c1:4e:52:
                    59:89:61:97:06:70:49:a3:1a:d8:1c:77:0c:c0:1e:
                    50:df:9f:bb:45:9d:67:ab:e3
                Exponent: 65537 (0x10001)
        X509v3 extensions:
            X509v3 Subject Key Identifier: 
            A7:C7:AA:CC:DE:6A:9D:C0:1D:5A:3D:A7:D5:35:CA:CD:1C:E2:3B:00
            X509v3 Authority Key Identifier: 
            keyid:A7:C7:AA:CC:DE:6A:9D:C0:1D:5A:3D:A7:D5:35:CA:CD:1C:E2:3B:00
            DirName:/C=JP/ST=Tokyo/L=Chuo-ku/O=TEST/OU=Server/CN=Admin/emailAddress=admin@localhost
            serial:00

            X509v3 Basic Constraints: 
            CA:TRUE
    Signature Algorithm: md5WithRSAEncryption
        25:e3:c5:c0:3c:84:e4:79:3b:7f:ae:8a:36:9c:f8:ff:ba:e5:
        4a:af:4f:a4:95:15:af:3e:14:44:39:0e:55:3d:1b:02:51:2a:
        4f:23:6c:2b:ae:a6:64:e4:24:bc:43:f5:aa:bb:29:d9:67:0b:
        77:3e:0f:e1:aa:eb:2d:04:24:c4:3e:06:24:64:20:30:b0:b0:
        45:88:38:ce:0c:85:67:b4:15:3b:bd:88:03:45:53:b8:13:2f:
        f8:7a:93:66:6d:6b:28:f1:1a:fc:84:d4:70:8a:69:db:4f:1b:
        c3:fa:f0:15:a4:63:93:f8:83:fc:94:e5:08:24:a1:a3:e7:d8:
        83:6f

証明書の検証

証明書を検証には、openssl verify を使用する。 例では、CA 証明書 demoCA/cacert.pem で 証明書 server.crt を検証している。

# openssl verify -CAfile demoCA/cacert.pem server.crt

server.crt: OK

証明書を PEM 形式から DER 形式へ変換

証明書の形式を PEM(テキスト)からDER(バイナリ)に変換するには、次のようにする。

# openssl x509 -inform PEM -outform DER -in server.crt -out server.der

秘密鍵と証明書を PKCS#12 形式へ変換

秘密鍵と証明書をまとめて PKCS#12 形式への変換には、openssl pkcs12 を使用する。 ブラウザにクライアント証明書(と秘密鍵)をインストールするときに使用。 例では、秘密鍵 client.key と 証明書 client.crt をまとめて、PKCS#12 形式ファイル client.p12 を作成している。

# openssl pkcs12 -export -inkey private/client.key -in client.crt -out client.p12

Enter pass phrase for private/client.key: ユーザ秘密鍵パスフレーズ
Enter Export Password: PKCS12形式ファイルのパスワード
Verifying - Enter Export Password: PKCS12形式ファイルのパスワード(再入力)

秘密鍵と証明書のほかに、CA証明書等を一緒にまとめることも可能。

# openssl pkcs12 -export -inkey private/client.key -in client.crt -certfile cacert.crt -out client.p12

Enter pass phrase for private/client.key: ユーザ秘密鍵パスフレーズ
Enter Export Password: PKCS12形式ファイルのパスワード
Verifying - Enter Export Password: PKCS12形式ファイルのパスワード(再入力)

PKCS#12 形式をPEM形式へ変換

PKCS#12 形式からPEM形式への変換には、openssl pkcs12 を使用する。 例では、PKCS#12 形式ファイル client.p12 を変換してPEM形式ファイル client.pem を作成している。 client.pemには秘密鍵、証明書すべてが出力される。

# openssl pkcs12 -in client.p12 -out client.pem

Enter Import Password: PKCS12形式ファイルのパスワード
MAC verified OK
Enter PEM pass phrase: ユーザ秘密鍵パスフレーズ
Verifying - Enter PEM pass phrase: ユーザ秘密鍵パスフレーズ(再入力)

秘密鍵だけ取り出す。

# openssl pkcs12 -nocerts -in client.p12 -out client.key

証明書だけ取り出す。

# openssl pkcs12 -nokeys -in client.p12 -out client.pem

CA証明書を除いたユーザ証明書と秘密鍵だけ取り出す。

# openssl pkcs12 -clcerts -in client.p12 -out client.pem

証明書の失効

証明書を紛失したり、不正に使用された可能性がある場合には、その証明を破棄(失効)させて使用できないようにする。 -revoke で失効させる証明書ファイルを指定する。 例では、demoCA/newcerts/01.pem を失効している。

# openssl ca [-config configfile] -gencrl -revoke demoCA/newcerts/01.pem

Using configuration from /usr/share/ssl/openssl.cnf
Enter pass phrase for ./demoCA/private/cakey.pem: CA パスフレーズ
-----BEGIN X509 CRL-----
MIIBRzCBsTANBgkqhkiG9w0BAQQFADCBgTELMAkGA1UEBhMCSlAxETAPBgNVBAgT
CFlva29oYW1hMRQwEgYDVQQHEwtLYW5hZ2F3YS1rdTENMAsGA1UEChMEbmluYTEL
MAkGA1UECxMCQ0ExEDAOBgNVBAMTB25pbmEgQ0ExGzAZBgkqhkiG9w0BCQEWDHJv
b3RAbmluYS5qcBcNMDMxMDEyMTEyMjIyWhcNMDMxMTExMTEyMjIyWjANBgkqhkiG
9w0BAQQFAAOBgQA3HmHCIdha344oOhU+GclQ1TUkl/OpbPWLVRh9lg4Cxi+jOGZD
rAo1r54MHCyihK+OSmGBZWZBChJCOOoErNsci5oTw1QtyAm+23qEXwMPNsf+Oeab
6vC6Hun04gSatwHDgmzyrxdVIhLskpsq9zJnyyZ2uRp3pp76u9e2ItVwvg==
-----END X509 CRL-----
Revoking Certificate 01.
Data Base Updated

demoCA/index.txt ファイルに失効した証明書の情報が書き込まれる。 demoCA/index.txt を見てみる。 最初の "R" は Revoke (失効)であることを示す。 次の "041011105657Z" は証明書の有効期限を示し、3 つめの "031012112222Z" は失効した時間を示す。

R       041011105657Z   031012112222Z   01      unknown /C=JP/ST=Tokyo/O=nina/OU=web/CN=www.nina.jp/emailAddress=webmaster@nina.jp

証明書失効リスト(CSR:Certificate Revocation List)の作成

証明書を失効しただけでは、証明書を使用するアプリケーションは失効した証明書を知ることができない。 アプリケーションに失効した証明書の情報を教えるために、証明書失効リストを作成しなければならない。 例では、nina.crl という証明書失効リストファイルを作成している。

# openssl ca [-config configfile] -gencrl -out nina.crl

Using configuration from /usr/share/ssl/openssl.cnf
Enter pass phrase for ./demoCA/private/cakey.pem: CA パスフレーズ

nina.crl の中身を見てみる。

-----BEGIN X509 CRL-----
MIIBXTCBxzANBgkqhkiG9w0BAQQFADCBgTELMAkGA1UEBhMCSlAxETAPBgNVBAgT
CFlva29oYW1hMRQwEgYDVQQHEwtLYW5hZ2F3YS1rdTENMAsGA1UEChMEbmluYTEL
MAkGA1UECxMCQ0ExEDAOBgNVBAMTB25pbmEgQ0ExGzAZBgkqhkiG9w0BCQEWDHJv
b3RAbmluYS5qcBcNMDMxMDEyMTEyMzU0WhcNMDMxMTExMTEyMzU0WjAUMBICAQEX
DTAzMTAxMjExMjIyMlowDQYJKoZIhvcNAQEEBQADgYEADmMS8rksjL3Em/hgZBs6
xKMB4Yv8TioTKOlBtaDLp+hFaEzvzGenMNeKFwjkBN5nXyJDMu3thvuBtoWiB9Tr
3mVRXl/JSpRf9uwyO1vsp7UyVZCwf4er6tzEi26dSPA1TIDaRq32I65YrfLFcUus
7ZOFKBrKBEMPQwYFqVeEz50=
-----END X509 CRL-----

証明書失効リストのテキスト表示

証明書失効リストをテキスト形式で表示する。 次の例では、証明書失効リストファイル nina.crl をテキスト形式で表示している。

# openssl crl -in nina.crl -text

Certificate Revocation List (CRL):
        Version 1 (0x0)
        Signature Algorithm: md5WithRSAEncryption
        Issuer: /C=JP/ST=Yokohama/L=Kanagawa-ku/O=nina/OU=CA/CN=nina CA/emailAdd
ress=root@nina.jp
        Last Update: Oct 12 11:41:00 2003 GMT
        Next Update: Nov 11 11:41:00 2003 GMT
Revoked Certificates:
    Serial Number: 01
        Revocation Date: Oct 12 11:22:22 2003 GMT
    Serial Number: 02
        Revocation Date: Oct 12 11:38:51 2003 GMT
    Signature Algorithm: md5WithRSAEncryption
        13:7e:45:f0:18:78:34:fb:4c:f8:c4:d0:8c:83:a1:7e:bb:d4:
        7c:29:70:e6:b3:41:d6:35:34:a0:6d:17:8b:b6:c1:f2:ac:cc:
        c9:04:06:b4:5d:07:00:6f:e8:cd:94:32:06:41:05:5d:b9:90:
        28:19:1b:89:3f:7b:a8:92:13:90:83:e0:7e:92:54:47:7e:c3:
        ef:08:f8:eb:b4:6d:08:62:23:fe:f0:14:03:92:42:75:35:5c:
        49:14:74:7e:87:28:54:c5:f0:5b:cc:39:a8:b4:e5:8b:df:b4:
        b2:a5:9b:4f:12:85:78:96:22:63:51:61:83:7d:f4:42:33:cc:
        12:7e
-----BEGIN X509 CRL-----
MIIBcTCB2zANBgkqhkiG9w0BAQQFADCBgTELMAkGA1UEBhMCSlAxETAPBgNVBAgT
CFlva29oYW1hMRQwEgYDVQQHEwtLYW5hZ2F3YS1rdTENMAsGA1UEChMEbmluYTEL
MAkGA1UECxMCQ0ExEDAOBgNVBAMTB25pbmEgQ0ExGzAZBgkqhkiG9w0BCQEWDHJv
b3RAbmluYS5qcBcNMDMxMDEyMTE0MTAwWhcNMDMxMTExMTE0MTAwWjAoMBICAQEX
DTAzMTAxMjExMjIyMlowEgIBAhcNMDMxMDEyMTEzODUxWjANBgkqhkiG9w0BAQQF
AAOBgQATfkXwGHg0+0z4xNCMg6F+u9R8KXDms0HWNTSgbReLtsHyrMzJBAa0XQcA
b+jNlDIGQQVduZAoGRuJP3uokhOQg+B+klRHfsPvCPjrtG0IYiP+8BQDkkJ1NVxJ
FHR+hyhUxfBbzDmotOWL37SypZtPEoV4liJjUWGDffRCM8wSfg==
-----END X509 CRL-----

[サーバの実験室 Slackware]