自前の認証局_クライアント証明書の作成①

自前の認証局_クライアント証明書の作成①

社内サイトに対して、通常は社内のIPアドレスからしか繋がらないよう接続元IPの制限を掛けていたのですが、
社内IP以外からの外部からも接続したいという要望があったため
自前で認証局を作成し、認証局でクライアント証明書を発行し、その証明書を設定した端末のみ
アクセスできる設定を実施したいと思います。

今回はまず認証局の設定とサーバー証明書の発行まで。


■認証局の設定

今回の環境はCentOS7を使った場合になります。


opensslが必要ですが、CentOS7の標準に入っております。

まずは今回の認証局用のディレクトリを作成します。
名前は何でも構いません。今回は「testCA」にして、
/etc/pki配下に作成します。

cd /etc/pki
mkdir testCA

opensslにデフォルトで入っている以下のファイルをコピーします。

対象ファイル
/etc/pki/tls/misc/CA
/etc/pki/tls/openssl.cnf


cp /etc/pki/tls/misc/CA testCA/.
cp /etc/pki/tls/openssl.cnf testCA/.


crlnumberを設定します。ないとエラーになります。

echo 01 > testCA/crlnumber



2. /etc/pki/testCA/CA ファイルを修正

vi /etc/pki/testCA/CA

変更前
if [ -z "$CATOP" ] ; then CATOP=/etc/pki/CA ; fi


変更後
if [ -z "$CATOP" ] ; then CATOP=/etc/pki/testCA ; fi  ← 修正

SSLEAY_CONFIG="-config /etc/pki/testCA/openssl.cnf"   ← 追加



3. /etc/pki/testCA/openssl.cnf ファイルを修正

vi /etc/pki/testCA/openssl.cnf


・42行目
変更前
dir             = /etc/pki/CA           # Where everything is kept

変更後
dir             = /etc/pki/testCA           # Where everything is kept ← 修正

・73行目
変更前
default_days    = 365                   # how long to certify for

変更後
default_days    = 3650                  # how long to certify for  ← 修正

※有効期限が1年では短いので、10年に変更



・193行目
変更前
nsComment                     = "OpenSSL Generated Certificate"

変更後
# nsComment                   = "OpenSSL Generated Certificate" ← 修正


・247行目  [ v3_ca ] 下の以下を変更

変更前
# keyUsage = cRLSign, keyCertSign

変更後
keyUsage = cRLSign, keyCertSign  ← 修正



[ usr_cert ] の下に以下を追加


keyUsage = digitalSignature, keyEncipherment   ← 追加
extendedKeyUsage = serverAuth           ← 追加


4.秘密鍵・公開鍵・自己署名証明書の発行

cd /etc/pki/testCA
./CA -newca


上記コマンドを叩くと以下のように表示され、CAのパスフレーズを要求されます。

CA certificate filename (or enter to create)

Making CA certificate ...
Generating a 2048 bit RSA private key
..............................+++
...........+++
writing new private key to '/etc/pki/testCA/private/./cakey.pem'
Enter PEM pass phrase:
Verifying - Enter PEM pass phrase:


適当に12桁ほどのパスワードを入力して下さい。
※ただし今後も使いますので、記録しておいてください。



その後、以下のようにCAの情報を聞いてきます。
オレオレのためなんでもかまいません。

Country Name (2 letter code) [XX]:JP
State or Province Name (full name) []:tokyo
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) []:test.ca
Email Address []:

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


最後の先ほど設定したパスフレーズを再度聞いてきますので、入力。


以下のような表示が出ていればOKです。

Certificate Details:
        Serial Number:
            d8:43:53:18:41:70:a4:ee
        Validity
            Not Before: Dec 19 04:19:37 2022 GMT
            Not After : Dec 18 04:19:37 2025 GMT
        Subject:
            countryName               = JP
            stateOrProvinceName       = tokyo
            organizationName          = Default Company Ltd
            commonName                = test.ca
        X509v3 extensions:
            X509v3 Subject Key Identifier:
                FD:BF:F2:AB:A9:85:F3:82:21:8B:57:7D:84:F5:FB:F2:F0:09:AA:8C
            X509v3 Authority Key Identifier:
                keyid:FD:BF:F2:AB:A9:85:F3:82:21:8B:57:7D:84:F5:FB:F2:F0:09:AA:8C

            X509v3 Basic Constraints:
                CA:TRUE
Certificate is to be certified until Dec 18 04:19:37 2025 GMT (1095 days)

Write out database with 1 new entries
Data Base Updated



以下のファイルが作成されます。

CA 証明書      cacert.pem, newcerts/***.pem
CA 秘密鍵      private/cakey.pem
CA 証明書発行要求  certs/00.pem


5. 次にサーバ証明書を発行します。

cd /etc/pki/testCA
./CA -newreq


writing new private key to 'newkey.pem'
Enter PEM pass phrase:
Verifying - Enter PEM pass phrase:


適当に12桁ほどのパスワードを入力して下さい。
証明書パスフレーズになり、CAのパスフレーズとは別になります。


その後、以下のようにサーバー証明書の情報を聞いてきます。
オレオレのためなんでもかまいません。

Country Name (2 letter code) [XX]:JP
State or Province Name (full name) []:tokyo
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) []:test.ca
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



サーバー証明書をCA認証局に認証させます。

./CA -sign

CAのパスフレーズを入力
Enter pass phrase for /etc/pki/testCA/private/cakey.pem:CAのパスフレーズを入力

後は y  で進めてOKです。
Sign the certificate? [y/n]:y
1 out of 1 certificate requests certified, commit? [y/n]y

newcertsのディレクトリ配下に「EADD7C1BC1063642.pem」というようなファイルができております。この値はそれぞれ実施環境で違ってまいりますのでご注意ください。

そして、以下コマンドを実行
# ls newcerts
EADD7C1BC1063642.pem
# mv newreq.pem certs/EADD7C1BC1063642.pem (←探したファイル名を入れる)
# mv newkey.pem private/EADD7C1BC1063642.pem (←探したファイル名を入れる)
# rm newcert.pem
# openssl x509 -in newcerts/EADD7C1BC1063642.pem -out www.crt
# openssl rsa -in private/EADD7C1BC1063642.pem -out www.key
Enter pass phrase for private/EADD7C1BC1063642.pem:サーバー証明書のパスフレーズを入力


以下のようなサーバー証明書ファイルが作成されました。
SSLCertificateFile    www.crt
SSLCertificateKeyFile    www.key



というわけで本日はここまで。
次回はサーバー証明書を設置し、クライアント証明書の発行と設定を実施します。