ネットワーク

自己証明書の作成 SSL-VPN時での証明書によるクライアント認証用

プライベート認証局における自己証明書の作成についての覚え書き。
証明書の用途は、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)をインストールする。

yum -y install openssl

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 version -a
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

設定ファイルは、これ

/etc/pki/tls/openssl.cnf

この設定ファイルから証明書を作る。
設定ファイルをそれぞれ、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回で済むので便利。

-ネットワーク