プライベート認証局における自己証明書の作成についての覚え書き。
証明書の用途は、Fortigateでクライアント証明書を使用したSSL-VPN接続(Forticlient使用)を行うため。
SSL-VPNで証明書認証をする場合、以下の証明書が必要となる。
・CA証明書(ルート証明書)
・サーバ証明書
・クライアント証明書
この3つの証明書をCentOSで作ってみる。
一般的には、シマンテック等の公的な認証局にお金を払って証明書を作ってもらうけど、
自分でも作れる。
ちなみに
Fortigateへは、CA証明書とサーバ証明書をインポートする。
クライアントには、CA証明書とクライアント証明書をインポートする。
■環境
cat /etc/redhat-release
CentOS Linux release 7.4.1708 (Core)
証明書作成用のアプリケーション(Open-SSL)をインストールする。
sudo yum -y install openssl
インストールされたか確認
[localhost ~]$ rpm -qa|grep openssl
xmlsec1-openssl-1.2.20-7.el7_4.x86_64
openssl-1.0.2k-19.el7.x86_64
openssl-libs-1.0.2k-19.el7.x86_64
[localhost ~]$
OpenSSL 1.0.2k-fips 26 Jan 2017
built on: reproducible build, date unspecified
platform: linux-x86_64
options: bn(64,64) md2(int) rc4(16x,int) des(idx,cisc,16,int) idea(int) blowfish(idx)
compiler: gcc -I. -I.. -I../include -fPIC -DOPENSSL_PIC -DZLIB -DOPENSSL_THREADS -D_REENTRANT -DDSO_DLFCN -DHAVE_DLFCN_H -DKRB5_MIT -m64 -DL_ENDIAN -Wall -O2 -g -pipe -Wall -Wp,-D_FORTIFY_SOURCE=2 -fexceptions -fstack-protector-strong --param=ssp-buffer-size=4 -grecord-gcc-switches -m64 -mtune=generic -Wa,--noexecstack -DPURIFY -DOPENSSL_IA32_SSE2 -DOPENSSL_BN_ASM_MONT -DOPENSSL_BN_ASM_MONT5 -DOPENSSL_BN_ASM_GF2m -DRC4_ASM -DSHA1_ASM -DSHA256_ASM -DSHA512_ASM -DMD5_ASM -DAES_ASM -DVPAES_ASM -DBSAES_ASM -DWHIRLPOOL_ASM -DGHASH_ASM -DECP_NISTZ256_ASM
OPENSSLDIR: "/etc/pki/tls" ⇒これがOpenSSL用の規定のフォルダ
engines: rdrand dynamic
設定ファイルは、これ
この設定ファイルから証明書を作る。
設定ファイルをそれぞれ、CA証明書用、サーバ証明書用、クライアント証明書用でコピーする。
各証明書で同じ情報を使う部分があるので、その共通部分について、設定ファイルに記載しておく
設定ファイルのイメージ
まずは、共通設定を行う。
※赤字部分を編集する
sudo vi /etc/pki/tls/openssl.cnf
[ req_distinguished_name ] この部分以下を更新
countryName = Country Name (2 letter code)
#countryName_default = XX
countryName_default = JP
countryName_min = 2
countryName_max = 2
stateOrProvinceName = State or Province Name (full name)
#stateOrProvinceName_default = Default Province
stateOrProvinceName_default = Osaka
localityName = Locality Name (eg, city)
#localityName_default = Default City
localityName_default = Osaka
0.organizationName = Organization Name (eg, company)
#0.organizationName_default = Default Company Ltd
0.organizationName_default = Koooza Company
# we can do this but it is not needed normally 🙂
#1.organizationName = Second Organization Name (eg, company)
#1.organizationName_default = World Wide Web Pty Ltd
organizationalUnitName = Organizational Unit Name (eg, section)
#organizationalUnitName_default =
commonName = Common Name (eg, your name or your server\'s hostname)
commonName_max = 64
emailAddress = Email Address
emailAddress_max = 64
emailAddress = Email Address
emailAddress_max = 64
# SET-ex3 = SET extension number 3
OpenSSLの設定ファイル(/etc/pki/tls/openssl.cnf)をCA証明書用、サーバー証明書用、クライアント証明書用でコピーする。
cd /etc/pki/tls sudo cp openssl.cnf openssl-ca.cnf sudo cp openssl.cnf openssl-server.cnf sudo cp openssl.cnf openssl-client.cnf
CA証明書を作成する。
openssl-ca.cnfの編集
[ usr_cert ] # These extensions are added when 'ca' signs a request. # This goes against PKIX guidelines but some CAs do it and some software # requires this to avoid interpreting an end user certificate as a CA. basicConstraints=CA:FALSE ⇒ basicConstraints=CA:True ・ ・ ・ [ 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 頭の#を消す ⇒ nsCertType = sslCA, emailCA
suでルートに移行
CA証明書作成コマンド
CADAYS="-days 1825" SSLEAY_CONFIG="-config /etc/pki/tls/openssl-ca.cnf" /etc/pki/tls/misc/CA -newca CADAYS="-days 1825" で証明書の有効期限の日数を決めれる。左記は5年
実行例
[root@localhost tls]# CADAYS="-days 1825" SSLEAY_CONFIG="-config /etc/pki/tls/openssl-ca.cnf" /etc/pki/tls/misc/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用のパスワードを入力、今回は「testtest」 Verifying - Enter PEM pass phrase: 再度「testtest」を入力 ----- 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) [JP]: そのままエンター State or Province Name (full name) [Osaka]: そのままエンター Locality Name (eg, city) [Osaka]: そのままエンター Organization Name (eg, company) [Koooza Company]: そのままエンター Organizational Unit Name (eg, section) []: そのままエンター Common Name (eg, your name or your server's hostname) []:Koooza CA 任意の証明機関の名前を入力 Email Address []: 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-ca.cnf Enter pass phrase for /etc/pki/CA/private/./cakey.pem: はじめに入力したパスワードを入力 「testtest」 Check that the request matches the signature Signature ok Certificate Details: Serial Number: 8a:86:58:83:d3:bf:da:67 Validity Not Before: Dec 21 02:44:52 2019 GMT Not After : Dec 19 02:44:52 2024 GMT Subject: countryName = JP stateOrProvinceName = Osaka organizationName = Koooza Company commonName = Koooza CA X509v3 extensions: X509v3 Subject Key Identifier: 0A:DD:87:4D:95:B0:4E:8C:E8:9F:F7:D0:5F:C9:26:7D:BD:E3:3F:E4 X509v3 Authority Key Identifier: keyid:0A:DD:87:4D:95:B0:4E:8C:E8:9F:F7:D0:5F:C9:26:7D:BD:E3:3F:E4 X509v3 Basic Constraints: CA:TRUE Netscape Cert Type: SSL CA, S/MIME CA Certificate is to be certified until Dec 19 02:44:52 2024 GMT (1825 days) Write out database with 1 new entries Data Base Updated
これでCA証明書のできあがり
できた証明書を確認する
$ ls -1 /etc/pki/CA/*return /etc/pki/CA/cacert.pem # CA証明書(CAのcakey.pem で署名した公開鍵) これがCA証明書 /etc/pki/CA/careq.pem # CAのCSR (CAの自己署名する前の公開鍵) /etc/pki/CA/index.txt # CA管理ファイル(証明書管理情報) /etc/pki/CA/index.txt.attr # CA管理ファイル(属性) /etc/pki/CA/index.txt.old # CA管理ファイル(一つ前) /etc/pki/CA/serial /etc/pki/CA/certs: # 証明書ディレクトリ
/etc/pki/CA/newcerts: # 新しい証明書ディレクトリ
8A865883D3BFDA67.pem # 新規に作成した証明書が、随時、作成されていきます。(ファイル名は、作成した時、環境によって異なる)
# このファイルは、./CA/cacert.pem と同じです。管理用なので特に意識する必要はありません、
/etc/pki/CA/private: # 秘密鍵ディレクトリ
cakey.pem # CA秘密鍵 これが秘密鍵
サーバ証明書の作成
/etc/pki/tls/openssl-server.cnf を修正
[ CA_default ]配下 default_days = 1825 # how long to certify for ここでサーバ証明書の有効期限を決める [ usr_cert ]配下 basicConstraints=CA:FALSE これがFALSEであること(CA証明書として使用しません) # nsCertType = server ⇒この部分の頭の#を消す nsCertType = server 証明書のタイプをサーバ証明書にする
CSRの作成
[root@localhost tls]# SSLEAY_CONFIG="-config /etc/pki/tls/openssl-server.cnf" /etc/pki/tls/misc/CA -newreq Generating a 2048 bit RSA private key ................................................................................................................................................+++ ..................................................+++ writing new private key to 'newkey.pem' Enter PEM pass phrase: testserver Verifying - Enter PEM pass phrase: testserver ----- 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) [JP]: そのままエンター State or Province Name (full name) [Osaka]: そのままエンター Locality Name (eg, city) [Osaka]: そのままエンター Organization Name (eg, company) [Koooza Company]: そのままエンター Organizational Unit Name (eg, section) []: そのままエンター Common Name (eg, your name or your server's hostname) []:koooza.net サイトのURL(サイト名)に合わす。これを間違うと機能しない Email Address []: そのままエンター Please enter the following 'extra' attributes to be sent with your certificate request そのままエンター A challenge password []: そのままエンター An optional company name []: そのままエンター Request is in newreq.pem, private key is in newkey.pem [root@localhost tls]# 作成されたものを確認 [root@localhost tls]# ls -l newkey.pem サイト用の秘密鍵 newreq.pem サイト用の証明書要求(CSR)
CSRよりサーバ証明書を作成する
[root@localhost tls]# SSLEAY_CONFIG="-config /etc/pki/tls/openssl-server.cnf" /etc/pki/tls/misc/CA -sign Using configuration from /etc/pki/tls/openssl-server.cnf Enter pass phrase for /etc/pki/CA/private/cakey.pem: CA証明書作成時のパスワードを入力する Check that the request matches the signature CA証明書作成時のパスワードを再度入力する Signature ok Certificate Details: Serial Number: 8a:86:58:83:d3:bf:da:68 Validity Not Before: Dec 21 03:08:42 2019 GMT Not After : Dec 19 03:08:42 2024 GMT Subject: countryName = JP stateOrProvinceName = Osaka localityName = Osaka organizationName = Koooza Company commonName = koooza.net/ X509v3 extensions: X509v3 Basic Constraints: CA:FALSE Netscape Cert Type: SSL Server Netscape Comment: OpenSSL Generated Certificate X509v3 Subject Key Identifier: 83:E2:DC:94:94:08:D9:EB:B4:CB:07:EC:2D:58:AC:41:83:C7:44:27 X509v3 Authority Key Identifier: keyid:0A:DD:87:4D:95:B0:4E:8C:E8:9F:F7:D0:5F:C9:26:7D:BD:E3:3F:E4 Certificate is to be certified until Dec 19 03:08:42 2024 GMT (1825 days) ちゃんと1825日になってる Sign the certificate? [y/n]:y yでエンター 1 out of 1 certificate requests certified, commit? [y/n]y yでエンター Write out database with 1 new entries Data Base Updated Certificate: Data: Version: 3 (0x2) Serial Number: 8a:86:58:83:d3:bf:da:68 Signature Algorithm: sha256WithRSAEncryption Issuer: C=JP, ST=Osaka, O=Koooza Company, CN=Koooza CA Validity Not Before: Dec 21 03:08:42 2019 GMT Not After : Dec 19 03:08:42 2024 GMT Subject: C=JP, ST=Osaka, L=Osaka, O=Koooza Company, CN=koooza.net/ Subject Public Key Info: Public Key Algorithm: rsaEncryption Public-Key: (2048 bit) Modulus: 00:b4:93:7c:54:9b:aa:ac:95:2d:31:38:99:58:8f: 09:79:7b:52:4c:4b:9e:44:da:b0:ed:b3:63:24:8a: 53:a5:5c:d0:e4:c9:48:a9:37:63:b1:72:ee:ec:1c: 6a:b6:b5:13:8f:15:23:4c:b8:35:cf:96:49:08:91: 3e:a1:1b:04:42:35:11:dc:a7:f3:20:c6:69:2f:1a: d0:7a:30:fb:8c:9b:3d:9c:d2:53:80:af:3e:5b:f0: e2:6f:e4:51:c8:68:24:f4:26:0b:c4:5a:7d:96:da: 70:42:b0:75:3f:14:45:db:29:ae:93:1d:20:f5:f2: 46:dc:7c:fb:1e:f8:37:67:e7:cd:f7:20:08:b1:e2: f0:fa:fb:ad:aa:d7:46:9c:5e:b7:11:4d:43:43:5c: 02:a1:d4:4e:a7:ca:dc:17:9b:04:51:6d:c3:a8:b0: 59:e3:6c:f8:d5:a1:5e:5c:e4:18:f0:1b:f0:a0:f8: 68:b9:9e:d2:d9:49:a2:de:db:ca:9f:4e:70:91:27: 10:66:9c:0e:8d:87:3c:8b:76:8f:ed:0a:c4:84:78: 5a:b5:2e:97:d4:a4:a7:87:b4:b2:03:c1:3a:e4:57: 27:95:e9:40:ef:aa:ef:ac:71:e4:b6:b2:1e:a3:c1: d3:26:c6:10:5f:dd:7a:6a:2a:c6:37:2b:4f:14:df: c6:e1 Exponent: 65537 (0x10001) X509v3 extensions: X509v3 Basic Constraints: CA:FALSE Netscape Cert Type: SSL Server Netscape Comment: OpenSSL Generated Certificate X509v3 Subject Key Identifier: 83:E2:DC:94:94:08:D9:EB:B4:CB:07:EC:2D:68:AC:41:83:C7:44:27 X509v3 Authority Key Identifier: keyid:0A:DD:87:4D:95:B0:4E:8C:E8:9F:F7:D0:5F:C9:26:7D:BD:E3:3F:E4 Signature Algorithm: sha256WithRSAEncryption 9e:00:37:53:60:ee:fe:ec:c3:74:47:33:0e:c4:34:63:8b:28: 6c:69:3a:4b:b9:ce:b9:7b:08:6e:a2:22:6a:17:0f:d2:2d:2d: 47:95:23:73:96:e2:ab:2d:c6:b9:87:65:c9:d1:e4:20:b3:93: b4:3a:1c:3f:28:05:ee:06:aa:df:88:7d:21:a8:a1:f7:2d:0e: 9c:a1:47:4b:14:35:61:1d:cb:95:ef:bf:3c:e0:4b:e7:d6:12: 6d:4e:cb:f5:d2:bf:e1:7f:77:e1:c2:dd:7a:bA:04:85:14:9a: e7:39:b6:1d:6a:05:71:17:e9:b7:8a:4c:4a:91:b0:ef:44:3d: 5b:0a:d9:77:9c:60:a6:60:2a:cf:09:d3:c4:f7:92:fe:7e:02: c2:8c:79:08:1d:ee:39:60:af:1f:fd:16:3e:11:13:a5:55:ea: 15:38:0a:43:58:03:85:e5:99:09:ba:c4:d6:d9:f9:e5:05:66: 7a:bc:0e:68:25:62:f6:db:00:42:45:b0:c9:78:ad:b3:0d:a5: ea:12:03:b0:00:00:fa:75:8e:ca:35:1e:88:9a:c0:70:98:bd: 5c:a3:3f:2a:c6:5d:25:aa:02:9e:f3:01:cf:10:7d:b8:02:ad: 25:d8:ba:87:a6:ca:de:8f:d9:9c:c5:c9:5a:fd:f2:25:ed:f1: fa:87:91:5b -----BEGIN CERTIFICATE----- MIIDuTCCAqGgAwIBAgIJAIqGWIPTv9poMA0GCSqGSIb3DQEBCwUAMEoxCzAJBgNV BAYTAkpQMQ4wDAYDVQQIDAVPc2FrYTEXMBUGA1UECgwOS29vb3phIENvbXBhbnkx EjAQBgNVBAMMCUtvb296YSBDQTAeFw0xOTEyMjEwMzA4NDJaFw0yNDEyMTkwMzA4 NDJaMFwxCzAJBgNVBAYTAkpQMQ4wDAYDVQQIDAVPc2FrYTEOMAwGA1UEBwwFT3Nh a2ExFzAVBgNVBAoMDktvb296YSBDb21wYW55MRQwEgYDVQQDDAtrb29vemEubmV0 LzCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBALSTfFSbqqyVLTE4mViP CXl7UkxLnkTasO2zYySKU6Vc0OTJSKk3Y7Fy7uwcara1E48VI0y4Nc+WSQiRPqEb BEI1Edyn8yDGaS8a0How+4ybPZzSU4CvPlvw4m/kUchoJPQmC8RafZbacEKwdT8U RdsprpMdIPXyRtx8+x74N2fnzfcgCLHi8Pr7rarXRpxetxFNQ0NcBqHUTqfK3Beb BFFtw6iwWeNs+NWhXlzkGPAb8KD4aLme0tlJot7byp9OcJEnEGacDo2HPIt2j+0K xIR4WrUul9Skp4e0sgPBOuRXJ5XpQO+q76xx5LayHqPB0ybGEF/demoqxjcrTxTf xuECAwEAAaOBjzCBjDAJBgNVHRMEAjAAMBEGCWCGSAGG+EIBAQQEAwIGQDAsBglg hkgBhvhCAQ0EHxYdT3BlblNTTCBHZW5lcmF0ZWQgQ2VydGlmaWNhdGUwHQYDVR0O BBYEFIPi3JSUCNnrtMsH7C1YrEGDx0QnMB8GA1UdIwQYMBaAFArdh02VsE6M6J/3 0F/JJn294z/kMA0GCSqGSIb3DQEBCwUAA4IBAQCeADdTYO7+7MN0RzMOxDRjiyhs aTpLuc65ewhuoiJqFw/SLS1HlSNzluKrLca5h2XJ0eQgs5O0Ohw/KAXuBqrfiH0h qKH3LQ6coUdLFDVhHcuV77884Evn1hJtTsv10r/hf3fhwt16tASFFJrnObYdagVx F+m3ikxKkbDvRD1bCtl3nGCmYCrPCdPE95L+fgLCjHkIHe45YK8f/RY+EROlVeoV OApDWAOF5ZkJusTW2fnlBWZ6vA5oJWL22wBCRbDJeK2zDaXqEgOwAAD6dY7KNR6I msBwmL1coz8qxl0lqgKe8wHPEH24Aq0l2LqHpsrej9mcxcla/fIl7fH6h5Fb -----END CERTIFICATE----- Signed certificate is in newcert.pem [root@localhost tls]#
作成されたファイルを確認
[root@localhost tls]# ls -1 newcert.pem CA証明書の署名の入った証明書(CSRより作成したサーバ証明書)
分かりやすい名前に変えて、certsフォルダに入れておく
$ mv /etc/pki/tls/newcert.pem /etc/pki/CA/certs/koooza.net.crt
サーバ証明書の秘密鍵にCA証明書の秘密鍵のパスワードを埋め込む
[root@localhost tls]# openssl rsa -in /etc/pki/tls/newkey.pem -out /etc/pki/CA/private/koooza.com.key Enter pass phrase for /etc/pki/tls/newkey.pem: サーバ証明書を作成したときのパスワードを入力する writing RSA key [root@localhost tls]#
クライアント用の証明書を作成する。
/etc/pki/tls/openssl-client.cnf を編集する [ usr_cert ] ... basicConstraints=CA:FALSE # デフォルトでCA証明書として使用しません Falseであること # nsCertType = client, email # デフォルトでクライアント用証明書を作成します この頭の#消す
default_days = 3650 # how long to certify for ここで有効期限を設定する(ここでは3650日(10年))
クライアント用の証明書のCSRを作成
[root@localhost tls]# sudo SSLEAY_CONFIG="-config /etc/pki/tls/openssl-client.cnf" /etc/pki/tls/misc/CA -newreq Generating a 2048 bit RSA private key ....+++ ...................................................+++ writing new private key to 'newkey.pem' Enter PEM pass phrase: testclient Verifying - Enter PEM pass phrase: testclient ----- 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) [JP]: そのままエンター State or Province Name (full name) [Osaka]: そのままエンター Locality Name (eg, city) [Osaka]: そのままエンター Organization Name (eg, company) [Koooza Company]: そのままエンター Organizational Unit Name (eg, section) []: そのままエンター Common Name (eg, your name or your server's hostname) []:test user ユーザ名を入力 Email Address []: Please enter the following 'extra' attributes to be sent with your certificate request そのままエンター A challenge password []: そのままエンター An optional company name []: そのままエンター Request is in newreq.pem, private key is in newkey.pem [root@localhost tls]#
できあがったファイルを確認する
ls -1 エンター ... newkey.pem # クライアント用秘密鍵 newreq.pem # クライアント用公開鍵-署名なし(CSR)
CSRよりクライアント証明書を作成
[root@localhost tls]# SSLEAY_CONFIG="-config /etc/pki/tls/openssl-client.cnf" /etc/pki/tls/misc/CA -sign Using configuration from /etc/pki/tls/openssl-client.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: 8a:86:58:83:d3:bf:da:69 Validity Not Before: Dec 21 03:29:17 2019 GMT Not After : Dec 20 03:29:17 2020 GMT Subject: countryName = JP stateOrProvinceName = Osaka localityName = Osaka organizationName = Koooza Company commonName = test user X509v3 extensions: X509v3 Basic Constraints: CA:FALSE Netscape Cert Type: SSL Client, S/MIME Netscape Comment: OpenSSL Generated Certificate X509v3 Subject Key Identifier: 93:68:43:79:5D:EA:03:AF:4B:1B:FE:F2:80:14:69:E7:EF:95:82:50 X509v3 Authority Key Identifier: keyid:0A:DD:87:4D:95:B0:4E:8C:E8:9F:F7:D0:5F:C9:26:7D:BD:E3:3F:E4 Certificate is to be certified until Dec 20 03:29:17 2020 GMT (365 days) Sign the certificate? [y/n]:y yでエンター 1 out of 1 certificate requests certified, commit? [y/n]y yでエンター Write out database with 1 new entries Data Base Updated Certificate: Data: Version: 3 (0x2) Serial Number: 8a:86:58:83:d3:bf:da:69 Signature Algorithm: sha256WithRSAEncryption Issuer: C=JP, ST=Osaka, O=Koooza Company, CN=Koooza CA Validity Not Before: Dec 21 03:29:17 2019 GMT Not After : Dec 20 03:29:17 2020 GMT Subject: C=JP, ST=Osaka, L=Osaka, O=Koooza Company, CN=test user Subject Public Key Info: Public Key Algorithm: rsaEncryption Public-Key: (2048 bit) Modulus: 00:be:52:a8:54:6f:49:fb:54:f4:33:50:fd:f7:3a: de:f3:d7:1b:ee:91:61:d9:b9:c7:6f:c3:aa:cb:84: 3c:79:58:99:4a:d1:98:f8:f6:56:01:ce:36:bb:5e: b2:a9:a8:35:d6:b3:cd:37:2a:16:89:6b:26:48:a7: d3:3b:a0:64:df:b5:d7:e7:30:37:b4:50:79:1c:d7: f7:c1:04:d9:a9:a1:1f:38:0d:5d:ac:58:a8:23:76: 43:61:bc:21:fd:f8:4f:d0:4b:a6:97:1b:28:9b:7c: 57:f8:4a:88:5e:ab:9a:3d:ad:80:4a:03:bd:21:44: ba:52:b5:e6:a2:6f:cb:8a:0e:ee:c6:56:43:5f:a1: bf:1f:de:2a:6a:fc:d4:e1:44:f6:64:53:bd:52:c6: cd:5f:e2:af:a8:ec:ee:1a:0f:eb:23:79:80:f2:43: ca:8f:93:3b:78:6f:85:5d:52:93:a6:3e:24:32:70: b0:9d:af:d3:42:c1:78:48:cb:68:8f:de:38:52:75: f5:93:9d:ba:5e:b0:0d:fc:e0:96:9b:82:94:d8:88: 25:c9:9e:53:46:89:68:78:77:e4:f1:01:3f:d0:51: c6:03:c8:f7:3c:1f:10:17:f0:5f:33:93:7e:aa:07: f6:ee:7b:49:66:10:3e:be:2a:e9:2a:44:c5:a0:4e: 76:49 Exponent: 65537 (0x10001) X509v3 extensions: X509v3 Basic Constraints: CA:FALSE Netscape Cert Type: SSL Client, S/MIME Netscape Comment: OpenSSL Generated Certificate X509v3 Subject Key Identifier: 93:68:43:79:5D:EA:03:AF:4B:1B:FE:F2:80:14:69:E7:EF:95:82:50 X509v3 Authority Key Identifier: keyid:0A:DD:87:4D:95:B0:4E:8C:E8:9F:F7:D0:5F:C9:26:7D:BD:E3:3F:E4 Signature Algorithm: sha256WithRSAEncryption 64:48:ac:df:57:80:d1:db:aa:13:b4:75:d1:73:b4:83:63:9b: 25:e9:c8:ee:04:45:3b:44:ad:3b:01:53:ae:93:b9:b6:6f:f2: 4d:1e:24:bc:90:76:b3:f6:ba:64:70:00:4a:58:21:18:89:ba: 00:06:87:17:0e:29:a4:8a:ed:0e:db:76:c0:aa:ca:6b:97:88: 02:aa:af:57:30:d0:85:3e:2d:2c:ba:3d:08:0f:4e:5f:82:84: 0e:71:bb:f8:c3:c2:26:f1:42:c6:53:53:6a:79:df:00:17:cc: 0c:04:81:1d:1c:92:0d:da:c9:83:98:10:9b:a2:e5:a0:75:22: 75:3f:db:06:ab:9c:37:06:42:15:b4:68:41:ea:4c:9b:18:66: 38:53:64:0d:97:84:70:71:69:52:d4:35:8c:68:1e:fd:16:e5: 97:5f:47:92:7f:9a:4c:0f:d6:68:27:c5:4c:8c:08:c6:5c:9f: f0:e6:75:d3:20:70:1f:ba:2d:d0:48:26:44:00:f0:01:74:a4: 16:9c:f1:75:5d:87:1f:38:9b:bf:56:5d:df:c8:e4:08:71:29: 95:e3:53:50:9f:43:5b:d1:5d:e9:a9:2d:da:ca:b4:83:80:3c: 3c:81:91:67:69:4f:d4:69:90:7a:fd:32:a8:4b:58:f9:e0:45: 07:f9:6d:d1 -----BEGIN CERTIFICATE----- MIIDtzCCAp+gAwIBAgIJAIqGWIPTv9ppMA0GCSqGSIb3DQEBCwUAMEoxCzAJBgNV BAYTAkpQMQ4wDAYDVQQIDAVPc2FrYTEXMBUGA1UECgwOS29vb3phIENvbXBhbnkx EjAQBgNVBAMMCUtvb296YSBDQTAeFw0xOTEyMjEwMzI5MTdaFw0yMDEyMjAwMzI5 MTdaMFoxCzAJBgNVBAYTAkpQMQ4wDAYDVQQIDAVPc2FrYTEOMAwGA1UEBwwFT3Nh a2ExFzAVBgNVBAoMDktvb296YSBDb21wYW55MRIwEAYDVQQDDAl0ZXN0IHVzZXIw ggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQC+UqhUb0n7VPQzUP33Ot7z 1xvukWHZucdvw6rLhDx5WJlK0Zj49lYBzja7XrKpqDXWs803KhaJayZIp9M7oGTf tdfnMDe0UHkc1/fBBNmpoR84DV2sWKgjdkNhvCH9+E/QS6aXGyibfFf4Soheq5o9 rYBKA70hRLpSteaib8uKDu7GVkNfob8f3ipq/NThRPZkU71Sxs1f4q+o7O4aD+sj eYDyQ8qPkzt4b4VdUpOmPiQycLCdr9NCwXhIy2iP3jhSdfWTnbpesA384JabgpTY iCXJnlNGiWh4d+TxAT/QUcYDyPc8HxAX8F8zk36qB/bue0lmED6+KukqRMWgTnZJ AgMBAAGjgY8wgYwwCQYDVR0TBAIwADARBglghkgBhvhCAQEEBAMCBaAwLAYJYIZI AYb4QgENBB8WHU9wZW5TU0wgR2VuZXJhdGVkIENlcnRpZmljYXRlMB0GA1UdDgQW BBSTaEN5XeoDr0sb/vKAFGnn75WCUDAfBgNVHSMEGDAWgBQK3YdNlbBOjOif99Bf ySZ9veM/5DANBgkqhkiG9w0BAQsFAAOCAQEAZEis31eA0duqE7R10XO0g2ObJenI 7gRFO0StOwFTrpO5tm/yTR4kvJB2s/a6ZHAASlghGIm6AAaHFw4ppIrtDtt2wKrK a5eIAqqvVzDQhT4tLLo9CA9OX4KEDnG7+MPCJvFCxlNTannfABfMDASBHRySDdrJ g5gQm6LloHUidT/bBqucNwZCFbRoQepMmxhmOFNkDZeEcHFpUtQ1jGge/Rbll19H kn+aTA/WaCfFTIwIxlyf8OZ10yBwH7ot0EgmRADwAXSkFpzxdV2HHzibv1Zd38jk CHEpleNTUJ9DW9Fd6akt2sq0g4A8PIGRZ2lP1GmQev0yqEtY+eBFB/lt0Q== -----END CERTIFICATE----- Signed certificate is in newcert.pem [root@localhost tls]#
作成したクライアント用証明書、秘密鍵をPKCS#12フォーマットにする
これでダブルクリックでWindowsに証明書をインストールできる
この際にルート証明書をクライアント証明書に含ませることもできる。
[root@localhost tls]# openssl pkcs12 -export -in newcert.pem -inkey newkey.pem -out test-user.pfx Enter pass phrase for newkey.pem: クライアント証明書を作成したときのパスワード Enter Export Password: Windowsとかにインストールする際のパスワード Verifying - Enter Export Password: Windowsとかにインストールする際のパスワードを再度入力 [root@localhost tls]#
ルート証明書つきでクライアント証明書を作成する場合は、
openssl pkcs12 -export -in newcert.pem -inkey newkey.pem -out test002.pfx -certfile /etc/pki/CA/cacert.pem
を実行する。
これで
CA証明書 /etc/pki/CA/cacert.pem
サーバ証明書 /etc/pki/CA/certs/www.example.com.crt
サーバ証明書秘密鍵 /etc/pki/CA/private/koooza.com.key
クライアント証明書 /etc/pki/tls/test-user.pfx
ができた。
FortigateでSSL-VPN接続する場合は、
CA証明書とサーバ証明書、サーバ証明書秘密鍵 をFortigateへインストールし、
接続するパソコンには、CA証明書とクライアント証明書をインストールしてあげる
※Fortigateへサーバ証明書、サーバ証明書秘密鍵 をインストールしなくてもSSL-VPNとしては接続可能。
※ルートを証明書を含ませたクライアント証明書の場合は、インストールするとルート証明書も併せてインストールされる。
インストールが1回で済むので便利。