#author("2019-09-16T17:03:03+09:00","","")
#contents()
** 考え方 [#icd86f00]
- クライアント証明には(自己認証局であっても)CA の裏付けが必要
- クライアント用の証明書の作成(発行)には認証局の証明書、鍵が必要
- クライアント証明書には &color(red){SSLCACertificateFile}; を追加で apache2 に指定する必要あり
- &color(red){SSLCACertificateFile = CA中間証明書 + root証明書};
- kgb.hmuna.com には第三者証明書が登録済み
-- サーバー証明書 [&color(blue){SSLCertificateFile};]
-- 秘密鍵 [&color(blue){SSLCertificateKeyFile};]
-- 中間証明書[&color(blue){SSLCertificateChainFile};]
# Server Certificate:
SSLCertificateFile /etc/ssl/official4/kgb_hmuna_com.crt
# Server Private Key:
SSLCertificateKeyFile /etc/ssl/official4/wiki.hmuna.com.privatekey
# Server Certificate Chain:
SSLCertificateChainFile /etc/ssl/official4/kgb_hmuna_com.ca-bundle
# Client Certificate: (official CA (COMODO) to generate client certificate)
SSLCACertificateFile /etc/ssl/official4A_for_client_certificate/COMODO_root.crt
SSLVerifyClient none
- だが CA局の証明書と鍵は無い
-- 認証局の証明書() =
-- 認証局の鍵 () =
- [[&color(red){登録済みの公式 &color(red){クライアント証明から}; 認証局の中間証明書、root証明書を取得する方法};:https://rms.ne.jp/howto/basis/apache_client_cert.html#get_pem]]
-- 使えない、まだクライアント証明が入っていないのだから
- SSLCertificateChainFile と SSLCACertificateFile の違い
-- SSLCertificateChainFile ディレクティブ:サーバー証明書における中間証明書のパスを設定
--- &color(red){Apache2.4.8以降はSSLCertificateChainFileディレクティブはない}; ----- のでコメントアウトしても OK だった
-- SSLCACertificateFile ディレクティブ:クライアント証明書における中間証明書のパスを指定
*** openssl バージョンの確認 [#b5a07749]
munakata@mvc:~$ openssl version -a
OpenSSL 1.1.1 11 Sep 2018
built on: Thu Jun 20 17:36:28 2019 UTC
platform: debian-amd64
options: bn(64,64) rc4(8x,int) des(int) blowfish(ptr)
compiler: gcc -fPIC -pthread -m64 -Wa,--noexecstack -Wall -Wa,--noexecstack -g -O2 -fdebug-prefix-map=/build/openssl-cn9tZy/openssl-1.1.1=.
-fstack-protector-strong -Wformat -Werror=format-security -DOPENSSL_USE_NODELETE -DL_ENDIAN -DOPENSSL_PIC -DOPENSSL_CPUID_OBJ -
DOPENSSL_IA32_SSE2 -DOPENSSL_BN_ASM_MONT -DOPENSSL_BN_ASM_MONT5 -DOPENSSL_BN_ASM_GF2m -DSHA1_ASM -DSHA256_ASM -DSHA512_ASM -DKECCAK1600_ASM
-DRC4_ASM -DMD5_ASM -DAES_ASM -DVPAES_ASM -DBSAES_ASM -DGHASH_ASM -DECP_NISTZ256_ASM -DX25519_ASM -DPADLOCK_ASM -DPOLY1305_ASM -DNDEBUG -
Wdate-time -D_FORTIFY_SOURCE=2
OPENSSLDIR: "/usr/lib/ssl"
ENGINESDIR: "/usr/lib/x86_64-linux-gnu/engines-1.1"
Seeding source: os-specific
*** Apache バージョン確認 [#l740b5ac]
munakata@mvc:~$ apache2 -v
Server version: Apache/2.4.29 (Ubuntu)
Server built: 2019-08-26T13:41:23
- [[Apache 2.4.8 から中間CA証明書を指定するSSLCertificateChainFile ディレクティブが廃止されました。中間CA証明書、およびクロスルート証明書(オプション)はサーバ証明書と一つの証明書ファイルとしてまとめて、SSLCertificateFileディレクティブに指定してください。(digicert の説明):https://knowledge.digicert.com/ja/jp/solution/SO23415.html]]
*** Apache mod-ssl の確認 [#t5a30443]
munakata@mvc:~$ sudo apache2ctl -M | grep ssl
ssl_module (shared)
munakata@mvc:~$ cat /etc/apache2/mods-available/ssl.load
# Depends: setenvif mime socache_shmcb
LoadModule ssl_module /usr/lib/apache2/modules/mod_ssl.so
munakata@mvc:~$ file /usr/lib/apache2/modules/mod_ssl.so
/usr/lib/apache2/modules/mod_ssl.so: ELF 64-bit LSB shared object, x86-64, version 1 (SYSV), dynamically linked, BuildID[sha1]=683bb4e55c962655e5267000caad85252a63bfa3, stripped
*** kgb.hmuna.com 証明書情報 [#g2979cc5]
- COMODO により発行されているもの
- &ref(kgb_cirt.jpg);
*** COMODO の SSLCACertificateFile 対応 [#d8921c69]
- [[SSLCACertificateFileディレクティブの代替ディレクティブはありますか?:https://jp.comodo.com/ssl-certificate-support/server_faq/ssl-server-certificate-apache.html]]
-- &color(red){SSLCACertificateFileの代わりにSSLCertificateChainFileを使用できます};が、Apple MACでは証明書の信頼性に関するエラーを表示することがあり、中間証明書をチェックしていない可能性があります。
** クライアント証明書の作成 [#o285d5a9]
*** クライアント証明書の作成に必要な情報、操作などから方針を決定 [#p0954d00]
- クライアント鍵(key)の作成(自己完結)
openssl genrsa -des3 -out example_com-client1.key 1024
- 証明書への署名要求(csr)の作成(自己完結)
openssl req -new -sha256 -key example_com-client1.key -out example_com-client1.csr
- openssl.cnf を一部変更した openssl-client.cnf を作成(自己完結)
[my_ca_default]
.
.
x509_extensions = usr_cert # 追加
.
.
[ usr_cert ] # 追加
basicConstraints=CA:FALSE # 追加
nsCertType = client, email # 追加
- 作成した openssl-client.cnf を使用して CAで署名(&color(red){CA局の情報が必要};)
sudo openssl ca -config ./openssl-client.cnf -md sha256 -cert myCA/myca.crt -keyfile myCA/private/myca.key -out example_com-client1.crt -in example_com-client1.csr
-- openssl-client.cnf(自己完結)
-- &color(red){myCA/myca.crt(CA局の情報が必要 crt ファイルは既にある?)};
--- &color(red){''違う! 既にあるのはサーバー証明書。 CA局の証明書は別に指定できる、つまり自己認証CA局を併存させる事ができるはず''};
-- myca.key(既に自分で作った秘密鍵がある ・・・ だから自己完結?)
-- example_com-client1.crt(生成するクライアント証明書)
-- example_com-client1.csr(自己完結)
*** オレオレ CA を使ったクライアント証明書の作成 [#x63d13fa]
- [[[Apache+openSSLでクライアント認証 - 闘うITエンジニアの覚え書き]:https://www.magata.net/memo/index.php?Apache%2BopenSSL%A4%C7%A5%AF%A5%E9%A5%A4%A5%A2%A5%F3%A5%C8%C7%A7%BE%DA]] をほぼそのままフォローする形
- /etc/ssl/private_CA にファイルを生成していく
munakata@mvc:/etc/ssl$ sudo mkdir private_CA
munakata@mvc:/etc/ssl$ cd private_CA
munakata@mvc:/etc/ssl/private_CA$ sudo mkdir private
munakata@mvc:/etc/ssl/private_CA$ sudo mkdir newcerts
munakata@mvc:/etc/ssl/private_CA$ sudo chmod 700 private/
munakata@mvc:/etc/ssl/private_CA$ sudo sh -c 'echo 01>serial'
munakata@mvc:/etc/ssl/private_CA$ cat serial
0
munakata@mvc:/etc/ssl/private_CA$ sudo touch index.txt
munakata@mvc:/etc/ssl/private_CA$ ls -l
合計 12
-rw-r--r-- 1 root root 0 9月 16 15:08 index.txt
drwxr-xr-x 2 root root 4096 9月 16 15:02 newcerts
drwx------ 2 root root 4096 9月 16 15:02 private
-rw-r--r-- 1 root root 3 9月 16 15:04 serial
- 自己認証 CA 局を作成
munakata@mvc:/etc/ssl/private_CA$ sudo openssl req -new -x509 -newkey rsa:2048 -out myca.crt -keyout private/myca.key -days 3650 -sha256
Generating a RSA private key
..........+++++
........................+++++
writing new private key to 'private/myca.key'
Enter PEM pass phrase: <----------------- bobbob274mocha
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) [JP]:JP
State or Province Name (full name) [Kanagawa]:Kanagawa
Locality Name (eg, city) []:Yokohama
Organization Name (eg, company) [Internet Widgits Pty Ltd]:hmuna
Organizational Unit Name (eg, section) []:IT
Common Name (e.g. server FQDN or YOUR name) []:kgb.hmuna.com
Email Address []:
-- 有効期間は 10年 とした
-- &color(red){パスフレーズは bobbob274mocha};
- openssl.cnf ファイルをクライアント証明書用に編集
-- &ref(client_openssl.cnf);
- クライアント証明書鍵の発行
munakata@mvc:/etc/ssl/private_CA$ sudo openssl genrsa -des3 -out kgb_hmuna-client1.key 1024
Generating RSA private key, 1024 bit long modulus (2 primes)
....................................................................+++++
......+++++
e is 65537 (0x010001)
Enter pass phrase for kgb_hmuna-client1.key:
Verifying - Enter pass phrase for kgb_hmuna-client1.key:
-- &color(red){パスフレーズは magumagu274};
- 証明書への署名要求の作成
munakata@mvc:/etc/ssl/private_CA$ sudo openssl req -new -sha256 -key kgb_hmuna-client1.key -out kgb_hmuna-client1.csr
Enter pass phrase for kgb_hmuna-client1.key: <---------- magumagu274
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) [Kanagawa]:
Locality Name (eg, city) []:Yokohama
Organization Name (eg, company) [Internet Widgits Pty Ltd]:hmuna
Organizational Unit Name (eg, section) []:IT
Common Name (e.g. server FQDN or YOUR name) []:kgb.hmuna.com
Email Address []:
Please enter the following 'extra' attributes
to be sent with your certificate request
A challenge password []: <------------------ そのままリターン
An optional company name []:
- クライアント証明書の発行
munakata@mvc:/etc/ssl/private_CA$ sudo sh -c 'openssl ca -config ./client_openssl.cnf -md sha256 -cert ./myca.crt -keyfile ./private/myca.key -out kgb_hmuna-client1.crt -in kgb_hmuna-client1.csr'
Using configuration from ./client_openssl.cnf
Enter pass phrase for ./private/myca.key:
Can't open ./index.txt.attr for reading, No such file or directory
139890709250496:error:02001002:system library:fopen:No such file or directory:../crypto/bio/bss_file.c:72:fopen('./index.txt.attr','r')
139890709250496:error:2006D080:BIO routines:BIO_new_file:no such file:../crypto/bio/bss_file.c:79:
Check that the request matches the signature
Signature ok
Certificate Details:
Serial Number: 1 (0x1)
Validity
Not Before: Sep 16 07:26:53 2019 GMT
Not After : Sep 13 07:26:53 2029 GMT
Subject:
countryName = JP
stateOrProvinceName = Kanagawa
organizationName = hmuna
organizationalUnitName = IT
commonName = kgb.hmuna.com
X509v3 extensions:
Netscape Cert Type:
SSL Client, S/MIME
X509v3 Basic Constraints:
CA:FALSE
Netscape Comment:
OpenSSL Generated Certificate
X509v3 Subject Key Identifier:
58:AB:C3:DC:9D:50:59:15:A6:42:2E:68:C7:8A:F5:23:F2:CD:7E:B5
X509v3 Authority Key Identifier:
keyid:D9:E6:21:6D:2C:03:EE:80:7E:44:85:10:2A:D1:DF:F9:7E:0F:BA:A8
Certificate is to be certified until Sep 13 07:26:53 2029 GMT (3650 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
- ファイルの状態
munakata@mvc:/etc/ssl/private_CA$ sudo tree
.
├── client_openssl.cnf
├── crl
├── index.txt
├── index.txt.attr
├── index.txt.old
├── kgb_hmuna-client1.crt <--- CA 局の証明書:これを Apache に登録する
├── kgb_hmuna-client1.csr
├── kgb_hmuna-client1.key
├── myca.crt
├── newcerts
│ └── 01.pem <-------------- 生成されたクライアント証明書
├── private
│ └── myca.key <----------- CA 局の鍵ファイル
├── serial
└── serial.old
-- CA 局の証明書 = &ref(kgb_hmuna-client1.crt);
- クライアント証明書を PKCS#12 形式に変換
munakata@mvc:/etc/ssl/private_CA$ sudo openssl pkcs12 -export -in kgb_hmuna-client1.crt -inkey kgb_hmuna-client1.key -out kgb_hmuna-client1.p12
Enter pass phrase for kgb_hmuna-client1.key:
Enter Export Password: <---------------- magumagu274
Verifying - Enter Export Password: <----- magumagunanamocha
-- &color(red){export password = magumagunanamocha};
-- &ref(kgb_hmuna-client1.p12);
** 補足情報 [#w8a6747e]
*** 参考 URL [#cdbc3578]
- CA 局作成関連
-- [[Ubuntu 18.04 LTS で OpenSSL を使ったプライベート認証局&証明書を作る:https://kgb.hmuna.com/index.php?cmd=edit&page=HomeServer17B]]
-- [[https://server-setting.info/centos/private-ca-cert.html:https://server-setting.info/centos/private-ca-cert.html]]
-- [[OpenSSLで自己認証局を作る:https://kgb.hmuna.com/index.php?cmd=edit&page=HomeServer17B]]
- クライアント証明書関連
-- [[☆ Apache+openSSLでクライアント認証:https://www.magata.net/memo/index.php?Apache%2BopenSSL%A4%C7%A5%AF%A5%E9%A5%A4%A5%A2%A5%F3%A5%C8%C7%A7%BE%DA]]
-- [[クライアント証明書を要求するサイトの構築(Apache+OpenSSL)その1:https://qiita.com/tukiyo3/items/b5e8b3efce800b0fd269]]
-- [[Apacheでのクライアント証明書利用設定入門:https://rms.ne.jp/howto/basis/apache_client_cert.html]]
-- [[Client Authentication and Access Control (mod_ssl マニュアル):http://www.modssl.org/docs/2.8/ssl_howto.html#ToC6]]
- 一般
-- [[RSA鍵、証明書のファイルフォーマットについて:https://qiita.com/kunichiko/items/12cbccaadcbf41c72735]]