そういうのがいいブログ

SIerで働く30代サラリーマンSEがインフラエンジニアに憧れてLinux・クラウド・AWSの勉強をするブログ

CentOS8プライベート認証局(WEBサーバHTTPS化)【①ルートCA作成】

※[PR]当ブログの記事の中にはプロモーションが含まれています。

・CentOS8でプライベート認証局を作って、LAN内のWEBサーバにHTTPSアクセスができるようにしたい。
・ネットで検索すると、新旧のいろいろな情報が出てきて、同じように真似してやってみたが上手くいかないので、最新の手順を詳しく知りたい。

こういった疑問に答えます。

本記事の内容

  1. CentOS8とOpenSSLでプライベート認証局(ルートCA)を作る方法
  2. CentOS8とOpenSSLで中間認証局を作る方法
  3. CentOS8のWEBサーバの証明書を作る方法
  4. CentOS8・ApacheのWEBサーバに証明書を設定してHTTPSアクセスを許可する方法

この記事を書いている私は、某SIerに勤務しながら、
WEB系エンジニア・インフラエンジニアに憧れて、プログラミングおよびインフラ技術の勉強をしています。

私が実機で試したコマンドや画像を載せて書いています。
記事の信頼性担保に繋がると思います。

前提

①~⑦までをまとめて読みたい方は下記のまとめ記事から。

souiunogaii.hatenablog.com

プライベート認証局にするCentOS8サーバのバージョン

cat /etc/redhat-release
uname -r
[root@SV-EARTH ~]# cat /etc/redhat-release
CentOS Linux release 8.2.2004 (Core)
[root@SV-EARTH ~]# uname -r
4.18.0-193.14.2.el8_2.x86_64

CentOS8にOpenSSLをインストール

CentOS8にOpenSSLをインストール

dnf install openssl

今回の私の環境では、既にOpenSSLがインストール済でした。

[root@SV-EARTH ~]# dnf install openssl
メタデータの期限切れの最終確認: 0:17:36 時間前の 20200913092746秒 に実施しました。
パッケージ openssl-1:1.1.1c-15.el8.x86_64 はすでにインストールされています。
依存関係が解決しました。
行うべきことはありません。
完了しました!

CentOS8で「/etc/pki/tls/misc/CA」を使えるようにする

CentOS7までのOpenSSLでは認証局を簡単に作れるスクリプト/etc/pki/tls/misc/CA がありましたが、
CentOS8では見つかりません。

ですが、これが無いと不便なので、別のCentOS7サーバからコピーしておきます。

/etc/pki/tls/misc/CA

CentOS7サーバの「/etc/pki/tls/misc/CA」をダウンロード

CentOS8サーバにそのままアップロード

実行権限を付与(パーミッション

CentOS8でプライベート認証局(ルートCA)を作成

CA用のconfファイルを作成

/etc/pki/tls/openssl.cnf をバックアップ

cp /etc/pki/tls/openssl.cnf /etc/pki/tls/openssl.cnf.original_bk
[root@SV-EARTH tls]# cp /etc/pki/tls/openssl.cnf /etc/pki/tls/openssl.cnf.original_bk
[root@SV-EARTH tls]# ls -l
合計 28
lrwxrwxrwx  1 root root    49  812 07:38 cert.pem -> /etc/pki/ca-trust/extracted/pem/tls-ca-bundle.pem
drwxr-xr-x. 2 root root    54  814 21:28 certs
-rw-r--r--. 1 root root   412  424 12:00 ct_log_list.cnf
drwxr-xr-x. 2 root root     6  424 12:34 misc
-rw-r--r--. 1 root root 11225  424 12:00 openssl.cnf
-rw-r--r--  1 root root 11225  912 16:06 openssl.cnf.original_bk
drwxr-xr-x. 2 root root     6  424 12:34 private

openssl.cnf をコピーしてopenssl-root-ca.cnfを作成

cp openssl.cnf openssl-root-ca.cnf
[root@SV-EARTH tls]# cp openssl.cnf openssl-root-ca.cnf
[root@SV-EARTH tls]# ls -l
合計 40
lrwxrwxrwx  1 root root    49  812 07:38 cert.pem -> /etc/pki/ca-trust/extracted/pem/tls-ca-bundle.pem
drwxr-xr-x. 2 root root    54  814 21:28 certs
-rw-r--r--. 1 root root   412  424 12:00 ct_log_list.cnf
drwxr-xr-x. 2 root root    16  913 07:04 misc
-rw-r--r--  1 root root 11225  913 07:09 openssl-root-ca.cnf
-rw-r--r--  1 root root 11225  913 07:08 openssl.cnf
-rw-r--r--  1 root root 11225  912 16:06 openssl.cnf.original_bk
drwxr-xr-x. 2 root root     6  424 12:34 private

confの内容を編集

vi /etc/pki/tls/openssl-root-ca.cnf
[ v3_ca ]


# Extensions for a typical CA


# PKIX recommendation.

subjectKeyIdentifier=hash

authorityKeyIdentifier=keyid:always,issuer

basicConstraints = critical,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 = critical, cRLSign, keyCertSign, digitalSignature

# Some might want this also
# nsCertType = sslCA, emailCA

# Include email address in subject alt name: another PKIX recommendation
# subjectAltName=email:copy
# Copy issuer details
# issuerAltName=issuer:copy

# DER hex encoding of an extension: beware experts only!
# obj=DER:02:03
# Where 'obj' is a standard or added object
# You can even override a supported extension:
# basicConstraints= critical, DER:30:03:01:01:FF

[v3_ca] の以下の部分をルートCA用に設定

  • basicConstraints = critical,CA:true
  • keyUsage = critical, cRLSign, keyCertSign, digitalSignature

プライベート認証局(ルートCA)の自己署名証明書を作成

OPENSSL_CONFIG="-config /etc/pki/tls/openssl-root-ca.cnf" /etc/pki/tls/misc/CA -newca
[root@SV-EARTH rootCA]# OPENSSL_CONFIG="-config /etc/pki/tls/openssl-root-ca.cnf" /etc/pki/tls/misc/CA -newca
CA certificate filename (or enter to create)
★★★そのまま[Enter]キー★★★
Making CA certificate ...
Generating a RSA private key
...................................................................................................................+++++
.....................................................................................................................................+++++
writing new private key to '/etc/pki/CA/private/./cakey.pem'
Enter PEM pass phrase:★★★秘密鍵のパスワード★★★
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) [XX]:JP
State or Province Name (full name) []:Tokyo
Locality Name (eg, city) [Default City]:Shinagawa-ku
Organization Name (eg, company) [Default Company Ltd]:EARTH PLANET Inc.
Organizational Unit Name (eg, section) []:★★★空のまま[Enter]キー★★★
Common Name (eg, your name or your server's hostname) []:EARTH PLANET Root CA
Email Address []:rootca@sv-earth.planet.jp

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.cnf
Enter pass phrase for /etc/pki/CA/private/./cakey.pem:★★★秘密鍵のパスワード★★★
Check that the request matches the signature
Signature ok
Certificate Details:
        Serial Number:
            08:90:dc:22:c5:bf:cc:56:77:7a:d6:64:09:19:0f:bf:34:03:1d:1a
        Validity
            Not Before: Sep 12 22:24:30 2020 GMT
            Not After : Sep 12 22:24:30 2023 GMT
        Subject:
            countryName               = JP
            stateOrProvinceName       = Tokyo
            organizationName          = EARTH PLANET Inc.
            commonName                = EARTH PLANET Root CA
            emailAddress              = rootca@sv-earth.planet.jp
        X509v3 extensions:
            X509v3 Subject Key Identifier:
                3B:C6:C5:A4:75:5A:1F:E9:DA:40:AD:E6:EC:40:34:14:53:34:26:E8
            X509v3 Authority Key Identifier:
                keyid:3B:C6:C5:A4:75:5A:1F:E9:DA:40:AD:E6:EC:40:34:14:53:34:26:E8

            X509v3 Basic Constraints: critical
                CA:TRUE
Certificate is to be certified until Sep 12 22:24:30 2023 GMT (1095 days)

Write out database with 1 new entries
Data Base Updated

作成されたファイルの確認

find /etc/pki/CA
[root@SV-EARTH CA]# find /etc/pki/CA
/etc/pki/CA
/etc/pki/CA/certs
/etc/pki/CA/crl
/etc/pki/CA/newcerts
/etc/pki/CA/newcerts/0890DC22C5BFCC56777AD66409190FBF34031D1A.pem
/etc/pki/CA/private
/etc/pki/CA/private/cakey.pem
/etc/pki/CA/careq.pem
/etc/pki/CA/cacert.pem
/etc/pki/CA/serial
/etc/pki/CA/index.txt.old
/etc/pki/CA/index.txt
/etc/pki/CA/index.txt.attr

ルートCA証明書の内容の表示

openssl x509 -in /etc/pki/CA/cacert.pem -text
[root@SV-EARTH CA]# openssl x509 -in /etc/pki/CA/cacert.pem -text
Certificate:
    Data:
        Version: 3 (0x2)
        Serial Number:
            08:90:dc:22:c5:bf:cc:56:77:7a:d6:64:09:19:0f:bf:34:03:1d:1a
        Signature Algorithm: sha256WithRSAEncryption
        Issuer: C = JP, ST = Tokyo, O = EARTH PLANET Inc., CN = EARTH PLANET Root CA, emailAddress = rootca@sv-earth.planet.jp
        Validity
            Not Before: Sep 12 22:24:30 2020 GMT
            Not After : Sep 12 22:24:30 2023 GMT
        Subject: C = JP, ST = Tokyo, O = EARTH PLANET Inc., CN = EARTH PLANET Root CA, emailAddress = rootca@sv-earth.planet.jp
        Subject Public Key Info:
            Public Key Algorithm: rsaEncryption
                RSA Public-Key: (2048 bit)
                Modulus:
                    00:cd:96:94:d2:59:5f:d5:97:b6:d0:40:5b:76:f5:
                    ce:c5:f7:97:63:1c:d8:71:7c:30:16:66:9d:7b:bd:
-------------------(中略)--------------
                    ef:23:33:f0:94:cd:8f:25:7f:12:3a:74:16:71:fa:
                    e7:2f:8e:63:44:89:ae:78:ef:43:52:0a:bb:87:96:
                    a1:25
                Exponent: 65537 (0x10001)
        X509v3 extensions:
            X509v3 Subject Key Identifier:
                3B:C6:C5:A4:75:5A:1F:E9:DA:40:AD:E6:EC:40:34:14:53:34:26:E8
            X509v3 Authority Key Identifier:
                keyid:3B:C6:C5:A4:75:5A:1F:E9:DA:40:AD:E6:EC:40:34:14:53:34:26:E8

            X509v3 Basic Constraints: critical
                CA:TRUE
    Signature Algorithm: sha256WithRSAEncryption
         4c:84:6b:29:19:f4:f7:b1:c1:71:5a:b4:3d:d5:74:95:60:e2:
         bf:58:6b:04:ae:fd:72:95:bc:50:0a:3f:4f:c7:b9:a0:90:e5:
-------------------(中略)--------------
         ba:bc:be:67:4c:94:c0:fb:a9:e5:2c:6a:5a:f5:e2:14:26:7c:
         9d:a9:66:9b:b3:12:eb:14:3a:e2:5e:c2:38:dd:83:75:75:bb:
         1c:15:51:d3
-----BEGIN CERTIFICATE-----
MIID5zCCAs+gAwIBAgIUCJDcIsW/zFZ3etZkCRkPvzQDHRowDQYJKoZIhvcNAQEL
BQAwgYIxCzAJBgNVBAYTAkpQMQ4wDAYDVQQIDAVUb2t5bzEaMBgGA1UECgwRRUFS
-------------------(中略)--------------
+Dm123cVj9aqQmSVzEWdFa9BrcELzUwniQPo1zKTcBhnAOf5356wtbi1tGOM88yk
7RTcySNdsUxldC+kVzghb0gtWmSGA5qrSrzvuRrZvpZX8PhnME49BgblhBw4VIoD
aFvjury+Z0yUwPup5SxqWvXiFCZ8nalmm7MS6xQ64l7CON2DdXW7HBVR0w==
-----END CERTIFICATE-----

少し長くなったので、続きは次の記事に書きます。

souiunogaii.hatenablog.com