【SSL】【Java】keytool を使って「自己証明書(オレオレ証明書)」 を作成する手順

Javaで「SSL」を利用する場合、「keytool」を利用して「JKS(Java KeyStore、Java キーストア)」を作成して利用することができます。

今回は「keytool」を利用して「Java キーストア(keystore)」を作成して利用する手順について解説します。

ちなみに CA(認証局、Certification Authority) は自分で用意して署名するので「自己証明書(オレオレ証明書)」になります。

JKSキーストアとは?

JKSとはキーストア(鍵ストア、keystore)のファイル形式です。

他には「JCEKS」「PKCS#12」があります。

制約としては「JKS」は「共通鍵暗号方式」をサポートしていません。

公開鍵暗号方式をサポートしています。

 

キーストア(鍵ストア、keystore)とは、読んだそのままですが、鍵の保管庫です。

たくさんの鍵を保管しているリポジトリというイメージです。

具体的に言うと「公開鍵」「秘密鍵」「サーバー証明書」を保管しています。

 

keytool を使って「自己証明書(オレオレ証明書)」 を作成する手順

Java の keytool を利用して keystore(キーストア)を作り、オレオレ証明書を作成する手順です。

手順の流れ

初めに全体の手順の流れです。

  1. keystoreを作成する
  2. CAを作成する
  3. 証明書要求(CSR)を作成する
  4. 証明書を発行する
  5. 証明書を登録する

 

Java と OpenSSL と mod_ssl のバージョンチェック

Java のバージョン   :1.8.0

OpenSSL のバージョン:1.0.1e-fips

mod_ssl のバージョン :2.4.6-45

[test@cnt07 ~]$ java -version
openjdk version "1.8.0_131"
OpenJDK Runtime Environment (build 1.8.0_131-b12)
OpenJDK 64-Bit Server VM (build 25.131-b12, mixed mode)

 

[test@cnt07 ~]$ rpm -qa | grep java
java-1.7.0-openjdk-headless-1.7.0.141-2.6.10.1.el7_3.x86_64
python-javapackages-3.4.1-11.el7.noarch
java-1.7.0-openjdk-1.7.0.141-2.6.10.1.el7_3.x86_64
java-1.8.0-openjdk-1.8.0.131-3.b12.el7_3.x86_64
tzdata-java-2017b-1.el7.noarch
java-1.8.0-openjdk-headless-1.8.0.131-3.b12.el7_3.x86_64
libobasis5.3-extension-javascript-script-provider-5.3.4.2-2.x86_64
javapackages-tools-3.4.1-11.el7.noarch

 

[test@cnt07 ~]$ openssl version
OpenSSL 1.0.1e-fips 11 Feb 2013
[test@cnt07 ~]$

 

[test@cnt07 ~]$ rpm -qa | grep mod_ssl

mod_ssl-2.4.6-45.el7.centos.4.x86_64

[test@cnt07 ~]$

 

 

keystoreを作成する

keytool -genkeypair コマンドのオプションを確認します。

[test@cnt07 ~]$ keytool -genkeypair -help
keytool -genkeypair [OPTION]...

 

鍵ペアを生成します

 

オプション:

-alias <alias>     処理するエントリの別名  ← keystore_alias にします。
-keyalg <keyalg>    鍵アルゴリズム名    ← RSA にします。
-keysize <keysize>   鍵のビット・サイズ
-sigalg <sigalg>    署名アルゴリズム名
-destalias <destalias> 出力先の別名
-dname <dname>      識別名
-startdate <startdate>  証明書の有効開始日時
-ext <value>       X.509拡張
-validity <valDays>   妥当性日数
-keypass <arg>     鍵のパスワード      ← test123 にします。
-keystore <keystore>  キーストア名    ← keystore.jks にします。
-storepass <arg>    キーストアのパスワード ← test123 にします。
-storetype <storetype> キーストアのタイプ
-providername <providername> プロバイダ名
-providerclass <providerclass> プロバイダ・クラス名
-providerarg <arg>    プロバイダ引数
-providerpath <pathlist> プロバイダ・クラスパス
-v           詳細出力
-protected       保護メカニズムによるパスワード

 

使用可能なすべてのコマンドについては"keytool -help"を使用してください

 

 

root になります。

[test@cnt07 ~]$ sudo su -
最終ログイン: 2017/07/06 (木) 21:47:39 JST日時 pts/0
[root@cnt07 ~]#

 

以下のコマンドでキーストアを作成します。

[root@cnt07 cert]# keytool -genkeypair -alias keystore_alias -keyalg RSA -keypass test123 -keystore keystore.jks -storepass test123

姓名は何ですか。
[Unknown]: test
組織単位名は何ですか。
[Unknown]: test
組織名は何ですか。
[Unknown]: test
都市名または地域名は何ですか。
[Unknown]: tokyo
都道府県名または州名は何ですか。
[Unknown]: tokyo
この単位に該当する2文字の国コードは何ですか。
[Unknown]: 81

 

CN=test, OU=test, O=test, L=tokyo, ST=tokyo, C=81でよろしいですか。

[いいえ]: はい

 

[root@cnt07 cert]# ls -l
合計 4
-rw-r--r--. 1 root root 2215 7月 20 23:16 keystore.jks
[root@cnt07 cert]#

 

自前の CA(プライベート CA)を作成する

次に自前の CA(認証局)を作成します。

CA は OpenSSL に付属のスクリプトです。

/etc/pki/tls/misc/CA スクリプトファイルの中身を見ていただくと分かると思いますが、スクリプトで何をしているのかというと、openssl コマンドを実行しているだけです。

「-newca」や「-newreq」などの引数に応じて各 openssl コマンドをデフォルトのオプションをつけて実行しているのでカスタマイズ可能です。

[root@cnt07 cert]# cd /etc/pki/tls/misc/ ← CAスクリプトが保存されているディレクトリに移動します。
[root@cnt07 misc]# ls
CA c_hash c_info c_issuer c_name ← CAスクリプトがあります。
[root@cnt07 misc]# ./CA -newca ← 新規でCA(認証局)を作成する場合は「-newca」の引数をつけます。
CA certificate filename (or enter to create)

Making CA certificate ...
Generating a 2048 bit RSA private key
.......+++
...............................................................................................................................+++
writing new private key to '/etc/pki/CA/private/./cakey.pem'
Enter PEM pass phrase: ← CA(認証局)の秘密鍵のパスフレーズを入力します。
Verifying - Enter PEM pass phrase: ← CA(認証局)の秘密鍵のパスフレーズを入力します。
-----
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) [XX]:81 ← 任意の値を入力します。(キーストア作成時の値に合わせていますが、キーストアとCAの値を合わせなければならないことはありません)
State or Province Name (full name) []:tokyo
Locality Name (eg, city) [Default City]:tokyo
Organization Name (eg, company) [Default Company Ltd]:test
Organizational Unit Name (eg, section) []:test
Common Name (eg, your name or your server's hostname) []:cnt07
Email Address []:test@test.com

 

Please enter the following 'extra' attributes
to be sent with your certificate request
A challenge password []: ← 何も入力しません。
An optional company name []: ← 何も入力しません。
Using configuration from /etc/pki/tls/openssl.cnf
Enter pass phrase for /etc/pki/CA/private/./cakey.pem: ← CA(認証局)の秘密鍵のパスフレーズを入力します。
Check that the request matches the signature
Signature ok
Certificate Details:
   Serial Number: 10227231195666226869 (0x8dee6c96157a9eb5)
   Validity
     Not Before: Jul 20 14:59:50 2017 GMT
     Not After : Jul 19 14:59:50 2020 GMT
   Subject:
     countryName = 81
     stateOrProvinceName = tokyo
     organizationName = test
     organizationalUnitName = test
     commonName = cnt07
     emailAddress = test@test.com
   X509v3 extensions:
     X509v3 Subject Key Identifier:
      B4:81:0D:49:02:8D:AC:64:04:B2:1A:8A:5B:1C:1C:68:12:CF:C0:80
     X509v3 Authority Key Identifier:
      keyid:B4:81:0D:49:02:8D:AC:64:04:B2:1A:8A:5B:1C:1C:68:12:CF:C0:80

 

     X509v3 Basic Constraints:
      CA:TRUE
Certificate is to be certified until Jul 19 14:59:50 2020 GMT (1095 days)

 

Write out database with 1 new entries
Data Base Updated
[root@cnt07 misc]#

 

証明書要求(CSR)を作成する

次にCSRを作成します。

[root@cnt07 misc]# cd ~/cert/
[root@cnt07 cert]# keytool -certreq -alias keystore_alias -file server.csr -keypass test123 -keystore keystore.jks -storepass test123
[root@cnt07 cert]# ll
合計 8
-rw-r--r--. 1 root root 2215 7月 20 23:16 keystore.jks
-rw-r--r--. 1 root root 1073 7月 21 00:08 server.csr ← CSRファイルができました。
[root@cnt07 cert]#

 

証明書を発行する

CSRを元に証明書を発行します。

[root@cnt07 cert]# openssl ca -keyfile /etc/pki/CA/private/./cakey.pem -cert /etc/pki/CA/cacert.pem -in server.csr -out servercert.crt
Using configuration from /etc/pki/tls/openssl.cnf
Enter pass phrase for /etc/pki/CA/private/./cakey.pem:
Check that the request matches the signature
Signature ok
The stateOrProvinceName field needed to be the same in the
CA certificate (tokyo) and the request (tokyo)  ← 「tokyo」と「tokyo」で合っているのにエラーになります。
[root@cnt07 cert]# ls ← ファイルが作成されているか確認します。
keystore.jks server.csr servercert.crt ← 一応ファイルは作成されています。
[root@cnt07 cert]# ll ← ファイルのバイト数を確認します。
合計 8
-rw-r--r--. 1 root root 2215 7月 20 23:16 keystore.jks
-rw-r--r--. 1 root root 1073 7月 21 00:08 server.csr
-rw-r--r--. 1 root root 0 7月 21 00:15 servercert.crt ← ゼロバイト(中身が空っぽ)です。
[root@cnt07 cert]#

 

設定は問題がないにもかかわらずエラーになることがあります。

その場合は「-policy policy_anything」をつけるとコマンドが通ります。

[root@cnt07 cert]# openssl ca -keyfile /etc/pki/CA/private/./cakey.pem -cert /etc/pki/CA/cacert.pem -in server.csr -out servercert.crt -policy policy_anything
Using configuration from /etc/pki/tls/openssl.cnf
Enter pass phrase for /etc/pki/CA/private/./cakey.pem:
Check that the request matches the signature
Signature ok
Certificate Details:
Serial Number: 10227231195666226870 (0x8dee6c96157a9eb6)
Validity
Not Before: Jul 20 15:17:30 2017 GMT
Not After : Jul 20 15:17:30 2018 GMT
Subject:
countryName = 81
stateOrProvinceName = tokyo
localityName = tokyo
organizationName = test
organizationalUnitName = test
commonName = test
X509v3 extensions:
X509v3 Basic Constraints:
CA:FALSE
Netscape Comment:
OpenSSL Generated Certificate
X509v3 Subject Key Identifier:
D2:A1:8E:39:57:B4:9C:B8:33:7A:C0:3F:AE:BE:DD:41:55:90:CC:34
X509v3 Authority Key Identifier:
keyid:B4:81:0D:49:02:8D:AC:64:04:B2:1A:8A:5B:1C:1C:68:12:CF:C0:80

Certificate is to be certified until Jul 20 15:17:30 2018 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
[root@cnt07 cert]#

 

結果を確認します。

[root@cnt07 cert]# ll
合計 16
-rw-r--r--. 1 root root 2215 7月 20 23:16 keystore.jks
-rw-r--r--. 1 root root 1073 7月 21 00:08 server.csr
-rw-r--r--. 1 root root 4510 7月 21 00:17 servercert.crt ← ファイルに書き込まれています。
[root@cnt07 cert]# cat servercert.crt
Certificate:
Data:
Version: 3 (0x2)
Serial Number: 10227231195666226870 (0x8dee6c96157a9eb6)
Signature Algorithm: sha256WithRSAEncryption
Issuer: C=81, ST=tokyo, O=test, OU=test, CN=cnt07/emailAddress=test@test.com
Validity
Not Before: Jul 20 15:17:30 2017 GMT
Not After : Jul 20 15:17:30 2018 GMT
Subject: C=81, ST=tokyo, L=tokyo, O=test, OU=test, CN=test
Subject Public Key Info:
Public Key Algorithm: rsaEncryption
Public-Key: (2048 bit)
Modulus:
00:96:af:35:c0:11:db:d5:42:df:3b:d0:3a:d7:34:
01:c6:75:e9:52:a3:cb:d4:bb:ee:e7:ee:ad:55:45:
a2:ad:fe:de:9d:29:65:dc:88:d2:ca:89:96:14:2d:
11:33:f4:66:8e:5a:8d:79:4f:d6:be:cf:d7:16:53:
67:9f:14:e6:f9:c5:06:7e:96:0e:a8:20:1b:c7:6e:
c6:4a:59:11:4d:d4:70:b3:32:f2:f7:e7:59:60:d5:
c9:58:a5:be:74:4c:3b:80:18:64:7b:2f:3e:ea:8d:
f4:57:8c:9a:f8:4b:f5:e8:dd:a6:50:4c:a6:8c:26:
0c:f8:d3:20:56:11:2b:df:46:ba:b4:c6:f6:5e:cb:
ec:66:ae:b7:65:58:73:01:bd:4a:b5:a6:f3:f5:eb:
0d:da:49:c9:93:04:15:9c:da:09:63:cf:93:1c:68:
f1:93:df:53:ba:60:14:b6:85:f0:b3:3c:cc:ee:53:
30:66:d7:d6:df:fe:06:1a:09:93:b6:59:f9:5e:15:
9f:61:fb:28:c2:92:78:af:0e:45:e6:e8:1f:51:bc:
62:0d:e0:1b:3b:71:4f:68:4d:e0:56:83:c4:f2:32:
d3:72:0a:6a:b3:79:7e:2b:b6:64:62:66:1a:34:ca:
bf:d6:5a:05:44:0c:bf:72:9d:e6:f9:64:3d:e3:38:
a1:ad
Exponent: 65537 (0x10001)
X509v3 extensions:
X509v3 Basic Constraints:
CA:FALSE
Netscape Comment:
OpenSSL Generated Certificate
X509v3 Subject Key Identifier:
D2:A1:8E:39:57:B4:9C:B8:33:7A:C0:3F:AE:BE:DD:41:55:90:CC:34
X509v3 Authority Key Identifier:
keyid:B4:81:0D:49:02:8D:AC:64:04:B2:1A:8A:5B:1C:1C:68:12:CF:C0:80

Signature Algorithm: sha256WithRSAEncryption
71:b9:47:4d:b1:61:56:f1:6a:6d:88:2c:d6:ba:a1:f6:e4:43:
d9:93:e6:36:88:8c:6c:a4:d1:06:2d:b1:71:51:78:2a:73:ca:
62:77:00:30:0f:fd:06:94:d5:5c:f3:12:33:da:e5:c4:2b:2b:
f0:85:2f:d5:2e:38:95:d8:93:5a:44:bd:c9:32:b3:fd:a9:1a:
30:df:2d:5b:6a:aa:80:cb:8d:7b:52:fb:2b:f6:5b:9d:5a:7a:
c3:6a:2a:71:1e:2d:64:41:f0:13:2c:2a:76:d0:be:a4:b7:33:
4d:a5:68:c6:9c:7c:b1:18:41:ea:8d:e8:de:8c:af:98:4c:03:
af:7f:c7:78:35:56:e3:f9:86:b3:c5:32:c9:0c:80:d4:6c:83:
1a:7e:3a:8b:b1:10:aa:eb:4c:f7:8a:11:c0:6d:3b:60:dc:02:
79:4e:e5:8e:fd:c6:b0:5b:9a:93:9c:1b:d1:c4:f5:77:d3:d6:
3e:7c:ab:02:32:18:b9:61:8d:a9:e0:9c:b7:45:e6:8b:01:f8:
6a:e0:3b:b3:9c:98:cb:bc:07:ba:56:9b:33:49:88:d1:d1:e7:
b7:66:c9:66:86:29:89:f1:08:ad:1d:3d:84:dd:18:34:4a:dd:
6e:3b:b9:4b:10:85:ea:a3:b5:33:89:78:97:e7:3a:9f:47:d4:
6a:8c:64:67
-----BEGIN CERTIFICATE-----
MIIDwTCCAqmgAwIBAgIJAI3ubJYVep62MA0GCSqGSIb3DQEBCwUAMGkxCzAJBgNV
BAYTAjgxMQ4wDAYDVQQIDAV0b2t5bzENMAsGA1UECgwEdGVzdDENMAsGA1UECwwE
dGVzdDEOMAwGA1UEAwwFY250MDcxHDAaBgkqhkiG9w0BCQEWDXRlc3RAdGVzdC5j
b20wHhcNMTcwNzIwMTUxNzMwWhcNMTgwNzIwMTUxNzMwWjBaMQswCQYDVQQGEwI4
MTEOMAwGA1UECBMFdG9reW8xDjAMBgNVBAcTBXRva3lvMQ0wCwYDVQQKEwR0ZXN0
MQ0wCwYDVQQLEwR0ZXN0MQ0wCwYDVQQDEwR0ZXN0MIIBIjANBgkqhkiG9w0BAQEF
AAOCAQ8AMIIBCgKCAQEAlq81wBHb1ULfO9A61zQBxnXpUqPL1Lvu5+6tVUWirf7e
nSll3IjSyomWFC0RM/RmjlqNeU/Wvs/XFlNnnxTm+cUGfpYOqCAbx27GSlkRTdRw
szLy9+dZYNXJWKW+dEw7gBhkey8+6o30V4ya+Ev16N2mUEymjCYM+NMgVhEr30a6
tMb2XsvsZq63ZVhzAb1Ktabz9esN2knJkwQVnNoJY8+THGjxk99TumAUtoXwszzM
7lMwZtfW3/4GGgmTtln5XhWfYfsowpJ4rw5F5ugfUbxiDeAbO3FPaE3gVoPE8jLT
cgpqs3l+K7ZkYmYaNMq/1loFRAy/cp3m+WQ94zihrQIDAQABo3sweTAJBgNVHRME
AjAAMCwGCWCGSAGG+EIBDQQfFh1PcGVuU1NMIEdlbmVyYXRlZCBDZXJ0aWZpY2F0
ZTAdBgNVHQ4EFgQU0qGOOVe0nLgzesA/rr7dQVWQzDQwHwYDVR0jBBgwFoAUtIEN
SQKNrGQEshqKWxwcaBLPwIAwDQYJKoZIhvcNAQELBQADggEBAHG5R02xYVbxam2I
LNa6ofbkQ9mT5jaIjGyk0QYtsXFReCpzymJ3ADAP/QaU1VzzEjPa5cQrK/CFL9Uu
OJXYk1pEvckys/2pGjDfLVtqqoDLjXtS+yv2W51aesNqKnEeLWRB8BMsKnbQvqS3
M02laMacfLEYQeqN6N6Mr5hMA69/x3g1VuP5hrPFMskMgNRsgxp+OouxEKrrTPeK
EcBtO2DcAnlO5Y79xrBbmpOcG9HE9XfT1j58qwIyGLlhjangnLdF5osB+GrgO7Oc
mMu8B7pWmzNJiNHR57dmyWaGKYnxCK0dPYTdGDRK3W47uUsQheqjtTOJeJfnOp9H
1GqMZGc=
-----END CERTIFICATE-----
[root@cnt07 cert]#

 

証明書を登録する

keystoreに登録をします。

[root@cnt07 cert]# keytool -import -alias keystore_alias -file servercert.crt -keypass test123 -keystore keystore.jks -storepass test123
keytoolエラー: java.lang.Exception: 応答から連鎖を確立できませんでした
[root@cnt07 cert]#

 

ここで「keytoolエラー: java.lang.Exception: 応答から連鎖を確立できませんでした」が出力されました。

 

ファイルを確認してみます。

[root@cnt07 cert]# keytool -printcert -file servercert.crt
所有者: CN=test, OU=test, O=test, L=tokyo, ST=tokyo, C=81
発行者: EMAILADDRESS=test@test.com, CN=cnt07, OU=test, O=test, ST=tokyo, C=81
シリアル番号: 8dee6c96157a9eb6
有効期間の開始日: Fri Jul 21 00:17:30 JST 2017終了日: Sat Jul 21 00:17:30 JST 2018
証明書のフィンガプリント:
MD5: 1D:7A:23:9E:E3:E7:F1:81:1A:46:0B:4F:A8:02:38:50
SHA1: 56:A5:FC:9B:36:4D:7D:E1:D1:32:3C:FF:F9:19:2C:E3:D0:C6:13:E2
SHA256: 60:84:53:1F:9F:2C:AA:37:90:62:D9:FA:E1:AB:5E:D1:9B:F7:A8:7F:49:61:B7:FB:5E:8B:A0:5D:43:24:5A:41
署名アルゴリズム名: SHA256withRSA
バージョン: 3

拡張:

#1: ObjectId: 2.16.840.1.113730.1.13 Criticality=false
0000: 16 1D 4F 70 65 6E 53 53 4C 20 47 65 6E 65 72 61 ..OpenSSL Genera
0010: 74 65 64 20 43 65 72 74 69 66 69 63 61 74 65 ted Certificate

#2: ObjectId: 2.5.29.35 Criticality=false
AuthorityKeyIdentifier [
KeyIdentifier [
0000: B4 81 0D 49 02 8D AC 64 04 B2 1A 8A 5B 1C 1C 68 ...I...d....[..h
0010: 12 CF C0 80 ....
]
]

#3: ObjectId: 2.5.29.19 Criticality=false
BasicConstraints:[
CA:false
PathLen: undefined
]

#4: ObjectId: 2.5.29.14 Criticality=false
SubjectKeyIdentifier [
KeyIdentifier [
0000: D2 A1 8E 39 57 B4 9C B8 33 7A C0 3F AE BE DD 41 ...9W...3z.?...A
0010: 55 90 CC 34 U..4
]
]

 

  • 「所有者」と「発行者」がずれている?
  • 証明書チェーンが正しくない?
  • CAの openssl.cnfに問題がある?
  • 中間証明書のインポートをやっていないことが原因か?

まだまだ調査は続きます。

 

エラーの原因は CA(認証局)の証明書のインポートをしていなかったから

 公開鍵暗号化方式の基本をもう一度整理すると、下図のようにサーバー側で「秘密鍵」「公開鍵」を作成後、「CSR(証明書署名要求)ファイル」を作成します。

作成した CSR ファイルを CA(認証局)に送付すると「サーバー証明書」が返ってきます。

この時、「サーバー証明書」には何が入っているでしょうか?

このサーバー証明書には「CA(認証局)の秘密鍵を使った署名」が入っています。

 

公開鍵暗号化方式の基本

 

しかし今までの作業の流れでキーストアに「CA」の存在がありません。

そのため、正しい CA(信頼できる CA)から発行されたサーバー証明書なのか不明になってしまうため 「keytoolエラー: java.lang.Exception: 応答から連鎖を確立できませんでした」のメッセージが出力されていました。

言い方を変えると、先にCAの証明書がキーストアにないとサーバー証明書がキーストアに登録できないということです。

 

ちなみにサーバー証明書を発行した際のコマンドは以下のコマンドでした。

[root@cnt07 cert]# openssl ca -keyfile /etc/pki/CA/private/./cakey.pem -cert /etc/pki/CA/cacert.pem -in server.csr -out servercert.crt -policy policy_anything

引数で

  • CAの秘密鍵(-keyfile /etc/pki/CA/private/./cakey.pem)
  • CAの証明書(-cert /etc/pki/CA/cacert.pem)

を指定しています。

そもそもキーストアにCAの証明書がなければ、サーバー証明書をインポートしようとしても正当性が確認できずにエラーになるというわけです。

再び手順の流れの復習

再度、全体の作業の流れを復習します。

  1. キーストア(keystore)を作成する
  2. 独自CA(オレオレCA)を作成する(この時にCAの秘密鍵、証明書が発行される)
  3. 証明書要求(CSR)を作成する
  4. CAがサーバー証明書を発行する
  5. キーストア(keystore)に CA の証明書をインポートする
  6. サーバー証明書をキーストア(keystore)にインポートする

 

そこで、「5.キーストア(keystore)に CA の証明書をインポートする」から手順を進めます。

 

キーストア(keystore)に CA の証明書をインポートする

CA(認証局)の証明書はどこにあるのでしょうか?

CA(認証局)のディレクトリは「/etc/pki/CA/」です。

[root@cnt07 CA]# ls -l /etc/pki/CA
合計 36
-rw-r--r--. 1 root root 4414 7月 20 23:59 cacert.pem ← CAの証明書
-rw-r--r--. 1 root root 1029 7月 20 23:59 careq.pem
drwxr-xr-x. 2 root root 6 2月 20 23:41 certs
drwxr-xr-x. 2 root root 6 2月 20 23:41 crl
-rw-r--r--. 1 root root 196 7月 21 00:17 index.txt
-rw-r--r--. 1 root root 21 7月 21 00:17 index.txt.attr
drwxr-xr-x. 2 root root 62 7月 21 00:17 newcerts
drwx------. 2 root root 23 7月 20 23:59 private
-rw-r--r--. 1 root root 17 7月 21 00:17 serial

[root@cnt07 CA]# ls -l /etc/pki/CA/private/
合計 4
-rw-r--r--. 1 root root 1834 7月 20 23:59 cakey.pem ← CAの秘密鍵
[root@cnt07 CA]#

 

 

[root@cnt07 CA]# keytool -import -alias keystore_alias -trustcacerts -file /etc/pki/CA/cacert.pem
キーストアのパスワードを入力してください: ← キーストアのパスワードを入力します。
新規パスワードを再入力してください:
所有者: EMAILADDRESS=test@test.com, CN=cnt07, OU=test, O=test, ST=tokyo, C=81
発行者: EMAILADDRESS=test@test.com, CN=cnt07, OU=test, O=test, ST=tokyo, C=81
シリアル番号: 8dee6c96157a9eb5
有効期間の開始日: Thu Jul 20 23:59:50 JST 2017終了日: Sun Jul 19 23:59:50 JST 2020
証明書のフィンガプリント:
    MD5: A2:A4:22:9B:1B:E2:97:38:65:9F:B2:C9:73:4C:55:84
    SHA1: B3:CD:D7:7B:F0:9E:30:F2:7C:7C:FC:27:E1:59:DB:34:9E:A5:E3:4F
    SHA256: 88:0F:ED:39:6F:E7:42:2C:8D:5F:12:BE:8E:0F:12:DD:26:43:77:F0:11:57:E5:21:91:97:AA:B5:45:8F:5C:B8
署名アルゴリズム名: SHA256withRSA
バージョン: 3

拡張:

#1: ObjectId: 2.5.29.35 Criticality=false
AuthorityKeyIdentifier [
KeyIdentifier [
0000: B4 81 0D 49 02 8D AC 64 04 B2 1A 8A 5B 1C 1C 68 ...I...d....[..h
0010: 12 CF C0 80 ....
]
]

 

#2: ObjectId: 2.5.29.19 Criticality=false
BasicConstraints:[
CA:true
PathLen:2147483647
]

 

#3: ObjectId: 2.5.29.14 Criticality=false
SubjectKeyIdentifier [
KeyIdentifier [
0000: B4 81 0D 49 02 8D AC 64 04 B2 1A 8A 5B 1C 1C 68 ...I...d....[..h
0010: 12 CF C0 80 ....
]
]

この証明書を信頼しますか。 [いいえ]: はい
証明書がキーストアに追加されました
[root@cnt07 CA]# 

 

 

サーバー証明書をキーストア(keystore)にインポートする

最後にサーバー証明書をキーストアにインポートします。

[root@cnt07 cert]# keytool -import -alias keystore -file servercert.crt -keypass "test123" -keystore keystore.jks -storepass "test123"
所有者: CN=test, OU=test, O=test, L=tokyo, ST=tokyo, C=81
発行者: EMAILADDRESS=test@test.com, CN=cnt07, OU=test, O=test, ST=tokyo, C=81
シリアル番号: 8dee6c96157a9eb6
有効期間の開始日: Fri Jul 21 00:17:30 JST 2017終了日: Sat Jul 21 00:17:30 JST 2018
証明書のフィンガプリント:
    MD5: 1D:7A:23:9E:E3:E7:F1:81:1A:46:0B:4F:A8:02:38:50
    SHA1: 56:A5:FC:9B:36:4D:7D:E1:D1:32:3C:FF:F9:19:2C:E3:D0:C6:13:E2
    SHA256: 60:84:53:1F:9F:2C:AA:37:90:62:D9:FA:E1:AB:5E:D1:9B:F7:A8:7F:49:61:B7:FB:5E:8B:A0:5D:43:24:5A:41
    署名アルゴリズム名: SHA256withRSA
    バージョン: 3

拡張:

#1: ObjectId: 2.16.840.1.113730.1.13 Criticality=false
0000: 16 1D 4F 70 65 6E 53 53 4C 20 47 65 6E 65 72 61 ..OpenSSL Genera
0010: 74 65 64 20 43 65 72 74 69 66 69 63 61 74 65 ted Certificate

#2: ObjectId: 2.5.29.35 Criticality=false
AuthorityKeyIdentifier [
KeyIdentifier [
0000: B4 81 0D 49 02 8D AC 64 04 B2 1A 8A 5B 1C 1C 68 ...I...d....[..h
0010: 12 CF C0 80 ....
]
]

 

#3: ObjectId: 2.5.29.19 Criticality=false
BasicConstraints:[
CA:false
PathLen: undefined
]

 

#4: ObjectId: 2.5.29.14 Criticality=false
SubjectKeyIdentifier [
KeyIdentifier [
0000: D2 A1 8E 39 57 B4 9C B8 33 7A C0 3F AE BE DD 41 ...9W...3z.?...A
0010: 55 90 CC 34 U..4
]
]

 

この証明書を信頼しますか。 [いいえ]: はい
証明書がキーストアに追加されました
[root@cnt07 cert]#

 

これでサーバー証明書がキーストアに登録されました。

参考サイト

■オレオレ証明書の作成方法

Keytoolを使用したSHA2 SSL証明書作成メモ

■OpenSSLのコマンド

OpenSSLでSSL自己証明書作成

■Tomcatでの設定

Tomcatサーバー証明書のインポート

 

 

Posted by 100%レンタルサーバーを使いこなすサイト管理人

コメントを残す

メールアドレスが公開されることはありません。