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

シェアする

あらためて、プライベート認証局を構築するための方法を整理しておこうと思います。
過去に、Apache HTTPサーバでhttpsの通信を行いたいために、プライベート認証局を作成していましたが、今回は「CAスクリプト」ツールを使った方法にします。もちろん、過去の方法でも結果は同じです。

プライベート認証局を構築するサーバ

プライベート認証局を構築するサーバの情報です。
できるだけ、新しいパッケージで構築するのが望ましいと思います。

# uname -r
3.10.0-327.22.2.el7.x86_64
# yum info openssl
     :(省略)
Installed Packages
Name        : openssl
Arch        : x86_64
Epoch       : 1
Version     : 1.0.1e
Release     : 51.el7_2.5
Size        : 1.5 M
Repo        : installed
From repo   : updates
Summary     : Utilities from the general purpose cryptography library with TLS implementation
    :(省略)
# openssl version -d
OPENSSLDIR: "/etc/pki/tls"

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

OpenSSLパッケージで提供される「CAスクリプト」では、有効期限が3年(1095日)となっているので、オプション指定で有効期限を変更できるようにします。

# cp -p /etc/pki/tls/misc/CA /etc/pki/tls/misc/CA.original
# vim /etc/pki/tls/misc/CA <= 修正する
# diff /etc/pki/tls/misc/CA.original /etc/pki/tls/misc/CA <= 修正内容
64c64
< CADAYS="-days 1095"   # 3 years
---
> if [ -z "$CADAYS" ] ; then CADAYS="-days 1095" ; fi   # 3 year

自己署名による証明書発行ですので、証明書作成の際に、決まりきったものをデフォルト値として設定しておくと、証明書を発行する際の手間が省けるのとオペミスも防ぐ効果があります。

# cp -p /etc/pki/tls/openssl.cnf /etc/pki/tls/openssl.cnf.original
# vim /etc/pki/tls/openssl.cnf <= 修正する
# diff /etc/pki/tls/openssl.cnf.original /etc/pki/tls/openssl.cnf <= 修正内容
130c130
< countryName_default           = XX
---
> countryName_default           = JP
135c135
< #stateOrProvinceName_default  = Default Province
---
> stateOrProvinceName_default   = Hyogo
138c138
< localityName_default          = Default City
---
> localityName_default          = Takarazuka
141c141
< 0.organizationName_default    = Default Company Ltd
---
> 0.organizationName_default    = orangetakam.com

CA証明書・サーバー証明書・クライアント証明書を発行するための設定ファイルをそれぞれ用意します。
次の工程でそれぞれの設定ファイルを準備することになります。

# cp -p /etc/pki/tls/openssl.cnf /etc/pki/tls/openssl_ca.cnf <= CA証明書用
# cp -p /etc/pki/tls/openssl.cnf /etc/pki/tls/openssl_server.cnf <= サーバー証明書用
# cp -p /etc/pki/tls/openssl.cnf /etc/pki/tls/openssl_client.cnf <= クライアント証明書用
# ls -l /etc/pki/tls/openssl_*.cnf
-rw-r--r--. 1 root root 10905 Jun 27 19:25 /etc/pki/tls/openssl_ca.cnf
-rw-r--r--. 1 root root 10905 Jun 27 19:25 /etc/pki/tls/openssl_client.cnf
-rw-r--r--. 1 root root 10905 Jun 27 19:25 /etc/pki/tls/openssl_server.cnf

プライベート認証局のCA証明書を発行

CA証明書を発行するための設定ファイルを編集します。

# vim /etc/pki/tls/openssl_ca.cnf <= 修正する
# diff /etc/pki/tls/openssl.cnf /etc/pki/tls/openssl_ca.cnf <= 修正内容
172c172
< basicConstraints=CA:FALSE
---
> basicConstraints=CA:TRUE <= CA証明書を発行
250c250
< # nsCertType = sslCA, emailCA
---
> nsCertType = sslCA, emailCA <= ssl用とemail用

CA証明書を発行します。

# CADAYS="-days 3650" SSLEAY_CONFIG="-config /etc/pki/tls/openssl_ca.cnf" \
> /etc/pki/tls/misc/CA -newca
CA certificate filename (or enter to create) <= [Enter]キーを押下

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:xxxx <= パスフレーズを入力(ここでのパスフレーズは忘れないように)
Verifying - Enter PEM pass phrase:xxxx <= パスフレーズを入力(再入力)
-----
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) [Hyogo]:Hyogo
Locality Name (eg, city) [Takarazuka]:Takarazuka
Organization Name (eg, company) [orangetakam.com]:orangetakam.com
Organizational Unit Name (eg, section) []:.
Common Name (eg, your name or your server's hostname) []:PrivateCA.orangetakam.com
Email Address []:.

Please enter the following 'extra' attributes
to be sent with your certificate request
A challenge password []:  <= [Enter]キーを押下
An optional company name []: <= [Enter]キーを押下
Using configuration from /etc/pki/tls/openssl_ca.cnf
Enter pass phrase for /etc/pki/CA/private/./cakey.pem:xxxx <= パスフレーズを入力
Check that the request matches the signature
Signature ok
Certificate Details:
        Serial Number: 10398347498328779299 (0x904e59f4f8f56a23)
        Validity
            Not Before: Jun 27 14:31:25 2016 GMT
            Not After : Jun 25 14:31:25 2026 GMT
        Subject:
            countryName               = JP
            stateOrProvinceName       = Hyogo
            organizationName          = orangetakam.com
            commonName                = PrivateCA.orangetakam.com
        X509v3 extensions:
            X509v3 Subject Key Identifier:
                A3:40:A3:EA:B5:74:E6:3F:CF:F5:76:11:31:10:F4:F1:8E:79:39:B6
            X509v3 Authority Key Identifier:
                keyid:A3:40:A3:EA:B5:74:E6:3F:CF:F5:76:11:31:10:F4:F1:8E:79:39:B6

            X509v3 Basic Constraints:
                CA:TRUE
            Netscape Cert Type:
                SSL CA, S/MIME CA
Certificate is to be certified until Jun 25 14:31:25 2026 GMT (3650 days)

Write out database with 1 new entries
Data Base Updated
# ls -lF /etc/pki/CA/* | grep -v "/$"
-rw-r--r--. 1 root root 4459 Jun 27 23:31 /etc/pki/CA/cacert.pem <= CA証明書[CA公開鍵]
-rw-r--r--. 1 root root 1017 Jun 27 23:31 /etc/pki/CA/careq.pem <= CAのCSR(証明書署名要求)
-rw-r--r--. 1 root root  104 Jun 27 23:31 /etc/pki/CA/index.txt <= インデックスファイル
-rw-r--r--. 1 root root   21 Jun 27 23:31 /etc/pki/CA/index.txt.attr <= 設定情報ファイル
-rw-r--r--. 1 root root    0 Jun 27 23:29 /etc/pki/CA/index.txt.old <= バックアップファイル
-rw-r--r--. 1 root root   17 Jun 27 23:31 /etc/pki/CA/serial <= シリアル番号ファイル
 
/etc/pki/CA/certs: <= 証明書ディレクトリー
total 0
 
/etc/pki/CA/crl: <= 証明書失効ディレクトリー
total 0
 
/etc/pki/CA/newcerts: <= 新しい証明書ディレクトリー(cacert.pemと同じ内容)
total 8
-rw-r--r--. 1 root root 4459 Jun 27 23:31 904E59F4F8F56A23.pem
 
/etc/pki/CA/private: <= 秘密鍵ディレクトリー
total 4
-rw-r--r--. 1 root root 1834 Jun 27 23:31 cakey.pem <= CAキーファイル[CA秘密鍵]
# chmod 600 /etc/pki/CA/cacert.pem
# chmod 600 /etc/pki/CA/careq.pem
# chmod 600 /etc/pki/CA/newcerts/*.pem
# chmod 600 /etc/pki/CA/private/cakey.pem

プライベート認証局の構築ができて、CA公開鍵とCA秘密鍵の作成もできました。
このプライベート認証局でサーバー証明書やクライアント証明書を、自己署名証明書として発行できます。

作成された証明書の確認

作成された証明書を確認することができます。

# openssl x509 -in cacert.pem -text
Certificate:
    Data:
        Version: 3 (0x2)
        Serial Number: 11111111111111111111 (0xf6b75ab2bc471c7)
    Signature Algorithm: sha256WithRSAEncryption
        Issuer: C=JP, ST=Hyogo, O=orangetakam.com, CN=PrivateCA.orangetakam.com
        Validity
            Not Before: Sep  1 07:36:18 2017 GMT
            Not After : Aug 17 07:36:18 2018 GMT
        Subject: C=JP, ST=Hyogo, O=orangetakam.com, CN=PrivateCA.orangetakam.com
        Subject Public Key Info:
            Public Key Algorithm: rsaEncryption
                Public-Key: (2048 bit)
    :(省略)