トップ 差分 一覧 ソース 検索 ヘルプ PDF RSS ログイン

プライベート認証局(CA)の構築とサーバー証明書の発行方法

プライベート認証局の構築

ここをhttps://blog.apar.jp/linux/8587/ 参照しました。

プライベート認証局の構築

[pki]# pwd
/etc/pki
[pki]# mkdir CA
[pki]# ls
CA  ca-trust  fwupd  fwupd-metadata  java  nss-legacy  nssdb  rpm-gpg  rsyslog  tls
[pki]#

1.OpenSSL の設定をプライベート認証局構築用に変更します。

[pki]# vim /etc/pki/tls/openssl.cnf
[pki]# diff tls/openssl.cnf.org tls/openssl.cnf
172c172
< basicConstraints=CA:FALSE
---
> basicConstraints=CA:TRUE
204c204
< # subjectAltName=email:move
---
> subjectAltName=@alt_names
224a225,229
> subjectAltName=@alt_names
>
> [ alt_names ]
>
> IP.1=192.168.220.99
250c255
< # nsCertType = sslCA, emailCA
---
> nsCertType = sslCA, emailCA
[pki]#

2.プライベート認証局構築スクリプトを編集し、有効期限を30年に変更します。(長期間運用しなければ3年のままでもかまいません)

[pki]#vim /etc/pki/tls/misc/CA
[pki]# diff tls/misc/CA.org tls/misc/CA
64c64
< CADAYS="-days 1095"   # 3 years
---
> CADAYS="-days 10950"  # 30 years
[pki]#

3.「/etc/pki/CA/」ディレクトリ下に(もしこのディレクトリが無かったら作成してください)証明書のラベル付けに使用するシリアルファイルを作成します。

[pki]# echo '00' > /etc/pki/CA/serial

4.プライベート認証局を作成します。太字の箇所以外は<空エンター>でOKです。

[pki]# /etc/pki/tls/misc/CA -newca                                                                                                                                              
CA certificate filename (or enter to create) 空ENTER
(略)
Enter PEM pass phrase: 1234 表示されません
Verifying - Enter PEM pass phrase: 1234 表示されません
(略)
For some fields there will be a default value,
If you enter '.', the field will be left blank.
-----
Country Name (2 letter code) [XX]:JP
State or Province Name (full name) []:Niigata
Locality Name (eg, city) [Default City]:
Organization Name (eg, company) [Default Company Ltd]:
Organizational Unit Name (eg, section) []:
Common Name (eg, your name or your server's hostname) []:private-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.cnf
Enter pass phrase for /etc/pki/CA/private/./cakey.pem: 1234 表示されません
Check that the request matches the signature
Signature ok
Certificate Details:
        Serial Number: 0 (0x0)
        Validity
            Not Before: Jan 19 06:40:35 2021 GMT
            Not After : Jan 12 06:40:35 2051 GMT
        Subject:
            countryName               = JP
            stateOrProvinceName       = Niigata
            organizationName          = Default Company Ltd
            commonName                = private-ca
        X509v3 extensions:
            X509v3 Subject Key Identifier:
                2D:54:21:62:1D:B1:D2:5A:57:66:0C:18:00:2A:DB:37:8A:1E:A3:FD
            X509v3 Authority Key Identifier:
               
keyid:2D:54:21:62:1D:B1:D2:5A:57:66:0C:18:00:2A:DB:37:8A:1E:A3:FD

            X509v3 Basic Constraints:
               CA:TRUE                                                                                                                                                               
            Netscape Cert Type:
                SSL CA, S/MIME CA
Certificate is to be certified until Jan 12 06:40:35 2051 GMT (10950 days)

Write out database with 1 new entries
Data Base Updated
[pki]#

5.プライベート認証局の秘密鍵のパスフレーズを削除します。

[pki]# cd /etc/pki/CA/private/
[private]# openssl rsa -in cakey.pem -out cakey.pem
Enter pass phrase for cakey.pem: 1234 ←表示されません
writing RSA key
[private]#

6.プライベート認証局の秘密鍵のパーミションを変更

[private]# chmod 400 /etc/pki/CA/private/cakey.pem

以上で、プライベート認証局の構築完了です。「/etc/pki/CA/cacert.pem」が「プライベート認証局のルート証明書」になりますので、これをWEBブラウザにインストールします。

続いて、プライベート認証局でサーバー証明書を発行してみましょう。

サーバー証明書の発行

1.まずはじめにサーバー証明書用の秘密鍵を作成します。

[private]# pwd
/etc/pki/CA/private
[private]# openssl ecparam -name prime256v1 -genkey -out server.key
[private]# ls
cakey.pem  server.key
[private]#

2.証明書発行要求(CSR)を作成します。プライベート認証局構築の時と同じく、太字の箇所以外は<空エンター>でOKです。

[private]# openssl req -new -key server.key > server.csr
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]:JP
State or Province Name (full name) []:Niigata
Locality Name (eg, city) [Default City]:
Organization Name (eg, company) [Default Company Ltd]:
Organizational Unit Name (eg, section) []:
Common Name (eg, your name or your server's hostname) []:192.168.1.1
Email Address []:

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

3.プライベート認証局構築用になっている OpenSSL の設定をサーバー証明書発行用に変更します。

vim /etc/pki/tls/openssl.cnf
[private]# diff /etc/pki/tls/openssl.cnf.org2 /etc/pki/tls/openssl.cnf
172c172
< basicConstraints=CA:TRUE
---
> basicConstraints=CA:FALSE
178c178
< # nsCertType                  = server
---
> nsCertType                    = server
[private]#                               

4.証明書発行要求(CSR)を元に、プライベート認証局を使ってサーバー証明書を発行します。

[private]# ls
cakey.pem  server.csr  server.key
[private]# openssl ca -in server.csr -out server.crt
Using configuration from /etc/pki/tls/openssl.cnf
Check that the request matches the signature
Signature ok
Certificate Details:
        Serial Number: 1 (0x1)
        Validity
            Not Before: Jan 19 07:15:21 2021 GMT
            Not After : Jan 19 07:15:21 2022 GMT
        Subject:
            countryName               = JP
            stateOrProvinceName       = Niigata
            organizationName          = Default Company Ltd
            commonName                = 192.168.1.1
        X509v3 extensions:
            X509v3 Basic Constraints:
                CA:FALSE
            Netscape Cert Type:
                SSL Server
            Netscape Comment:
                OpenSSL Generated Certificate
            X509v3 Subject Key Identifier:
                62:31:CE:F9:EC:DE:82:96:C7:7D:69:61:1F:EB:52:79:D6:17:47:15
            X509v3 Authority Key Identifier:
                keyid:2D:54:21:62:1D:B1:D2:5A:57:66:0C:18:00:2A:DB:37:8A:1E:A3:FD

Certificate is to be certified until Jan 19 07:15:21 2022 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
[private]#                       

5.秘密鍵と発行したサーバー証明書を適切な場所に移動

[private]# ls
cakey.pem  server.crt  server.csr  server.key
[private]# ls /etc/pki/tls/private/
localhost.key
[private]# ls /etc/pki/tls/certs/
Makefile  ca-bundle.crt  ca-bundle.trust.crt  localhost.crt  make-dummy-cert  renew-dummy-cert
[private]#
[private]# mv -i server.key /etc/pki/tls/private/
[private]# mv -i server.crt /etc/pki/tls/certs/
[private]# ls /etc/pki/tls/private/
localhost.key  server.key
[private]# ls /etc/pki/tls/certs/
Makefile  ca-bundle.crt  ca-bundle.trust.crt  localhost.crt  make-dummy-cert  renew-dummy-cert  server.crt
[private]#                

6.パーミッションを変更

[private]# chmod 600 /etc/pki/tls/private/server.key
[private]# chmod 600 /etc/pki/tls/certs/server.crt
[private]#

7.CSRを削除

[private]# ls
cakey.pem  server.csr
[private]# rm server.csr
rm: 通常ファイル `server.csr' を削除しますか? y
[private]#

windows10に証明書をインポート

  • サーバーのプライベート認証局のルート証明書(cacert.pem)を取得
  • .pemを.cerに変更
  • caceert.cerをダブルクリック

https://www.furukawa.co.jp/fitelnet/product/setting/detail/Windows10_CAinstall.pdf

サーバ名がIPアドレスの場合のSSL証明書作成

https://www.magata.net/memo/index.php?%A5%B5%A1%BC%A5%D0%CC%BE%A4%ACIP%A5%A2%A5%C9%A5%EC%A5%B9%A4%CE%BE%EC%B9%E7%A4%CESSL%BE%DA%CC%C0%BD%F1%BA%EE%C0%AE

概要

IPアドレスでアクセスする場合やマルチドメイン用のSSL証明書の場合は、証明書検証時に Subject Alternative Name (SAN) もチェックされるのでこれを含む証明書を作成する必要がある。

openssl.conf

[ v3_req ]
subjectAltName = @alt_names

[ alt_names ]
# サーバーのIPアドレス
IP.1 = 192.168.1.10
IP.2 = 192.168.1.11
# マルチドメイン用の証明書の場合
#DNS.1 = example.com
#DNS.2 = www.example.com
#DNS.3 = hoge.example.com
#DNS.4 = fuga.example.com