easyrsaでSAN証明書を作成する(4) for TP-LINK SG3210X-M2

Internet


SG3210X-M2 Webコンソール用のSSL証明書もプライベートCAから出力しました。

1. Webコンソール用SSL証明書の作成

プライベートCAのコンソールでサーバ証明書を発行します。
「IP:」でSG3210X-M2のIPアドレスを指定します。

# ./easyrsa --subject-alt-name="IP:192.168.0.252,DNS:sg3210x.oz.exiv.net" build-server-full sg3210x.oz.exiv.net nopass


作成した証明書ファイルは、認証局ディレクトリ配下 pkiディレクトリに出力されます。
私の環境では/root/certが認証局のルートです。

/root/cert/pki/private/sg3210x.oz.exiv.net.key # プライベートキー(秘密鍵)
/root/cert/pki/issued/sg3210x.oz.exiv.net.crt # サーバ証明書
/root/cert/pki/ca.crt # プライベートCA証明書

作成したサーバ証明書を表示します。

# cat /root/cert/pki/issued/sg3210x.oz.exiv.net.crt
Certificate:
    Data:
        Version: 3 (0x2)
        Serial Number:
                                     [省略]
        Signature Algorithm: sha256WithRSAEncryption
        Issuer: CN=oz.exiv.net
        Validity
            Not Before: Jul  9 11:24:17 2024 GMT
            Not After : Oct 12 11:24:17 2026 GMT
        Subject: CN=sg3210x.oz.exiv.net
        Subject Public Key Info:
            Public Key Algorithm: rsaEncryption
                Public-Key: (2048 bit)
                Modulus:
                                     [途中省略]
                    b8:07
                Exponent: 65537 (0x10001)
        X509v3 extensions:
            X509v3 Basic Constraints: 
                CA:FALSE
            X509v3 Subject Key Identifier: 
                                     [途中省略]
            X509v3 Authority Key Identifier: 
                                     [途中省略]
                DirName:/CN=oz.exiv.net
                                     [途中省略]
            X509v3 Extended Key Usage: 
                TLS Web Server Authentication
            X509v3 Key Usage: 
                Digital Signature, Key Encipherment
            X509v3 Subject Alternative Name: 
                IP Address:192.168.0.252, DNS:sg3210x.oz.exiv.net
    Signature Algorithm: sha256WithRSAEncryption
    Signature Value:
                                     [途中省略]
        35:a5:fb:66
-----BEGIN CERTIFICATE-----
MIIDiDCCAnCgAwIBAgIRAOg3qPOED0nfKzU+5x/a9cYwDQYJKoZIhvcNAQELBQAw

                        Base64エンコードされたサーバ証明書データ
                                     [途中省略]

oN7NNfG8XpZgPMppwyJ0sG/wv6Fx/IRsd+PqlTsnySMlgjDgitqP3jWl+2Y=
-----END CERTIFICATE-----

 前回のSSL証明書と同様に証明書チェーン形式に整えます。具体には「Base64エンコードされたサーバ証明書データ」と「Base64エンコードされたCA証明書データ」をひとつのファイルにまとめて記述します。
 このうち、必要な箇所「—–BEGIN CERTIFICATE—–」から「—–END CERTIFICATE—–」までのデータ(これは、Base64エンコードされたサーバ証明書です)をクリップボードへコピーしておきます。

続けてSG3210X-M2用の作業ディレクトリを作成、証明書チェーンファイルを作成します。

# mkdir /root/sg3210x
# vi sg3210x.crt # 証明書チェーンの作成

クリップボードからサーバ証明書のデータをペーストします。

-----BEGIN CERTIFICATE-----
MIIDiDCCAnCgAwIBAgIRAOg3qPOED0nfKzU+5x/a9cYwDQYJKoZIhvcNAQELBQAw

                        Base64エンコードされたサーバ証明書データ
                                     [途中省略]

oN7NNfG8XpZgPMppwyJ0sG/wv6Fx/IRsd+PqlTsnySMlgjDgitqP3jWl+2Y=
-----END CERTIFICATE-----

いったん、保存します。
次にプライベートCA証明書の内容をコンソールに表示します。

# cat /root/cert/pki/ca.crt
-----BEGIN CERTIFICATE-----
MIIDSzCCAj0gAw1BAg1Uf5Bky9T+XNHshecWcsayUjoIwzowDQYJKoZ1hvcNAQEL
                        Base64エンコードされたCA証明書データ
                                     [途中省略]
/ApNs19v8eMHJiBSkghKsfhgHIIEZpQ2/q/4Lr7C0g==
-----END CERTIFICATE-----

同様に「—–BEGIN CERTIFICATE—–」から「—–END CERTIFICATE—–」までのデータ(これは、Base64エンコードされたプライベートCA証明書です)をクリップボードへコピーします。
さきほど、保存したファイルに追記します。

# vi sg3210x.crt  証明書チェーンの再編集

ファイルの最終行へカーソルを移動、クリップボードからプライベートCA証明書のデータをペーストします。

-----BEGIN CERTIFICATE-----
MIIDiDCCAnCgAwIBAgIRAOg3qPOED0nfKzU+5x/a9cYwDQYJKoZIhvcNAQELBQAw
                        Base64エンコードされたサーバ証明書データ
                                     [途中省略]
oN7NNfG8XpZgPMppwyJ0sG/wv6Fx/IRsd+PqlTsnySMlgjDgitqP3jWl+2Y=
-----END CERTIFICATE-----
-----BEGIN CERTIFICATE-----
MIIDSzCCAj0gAw1BAg1Uf5Bky9T+XNHshecWcsayUjoIwzowDQYJKoZ1hvcNAQEL
                        Base64エンコードされたCA証明書データ
                                     [途中省略]
/ApNs19v8eMHJiBSkghKsfhgHIIEZpQ2/q/4Lr7C0g==
-----END CERTIFICATE-----

保存します。

続けてプライベートキーを準備します。SG3210X-M2用のプライベートキーはRSA形式に変換する必要があるとのことです。opensslコマンドでRSA形式に変換します。

# openssl rsa -in /root/cert/pki/private/sg3210x.oz.exiv.net.key \
          -out /root/sg3210x/sg3210x.key # プライベートキーの変換・出力

変換後、出力したRSA形式のプライベートキーのヘッダーとフッターを確認します。

# vi /root/sg3210x/sg3210x.key

-----BEGIN PRIVATE KEY-----
MIIEvQIBADANBgkqhkiG9w0BAQEFAASCBKcwggSjAgEAAoIBAQC69R8QhG1nk8bl

[途中省略]

3RGjaGflp3j0ekpg2TbPLHk=
-----END PRIVATE KEY-----

もし、ヘッダーおよびフッターが「BEGIN PRIVATE KEY」「END PRIVATE KEY」として記述されている場合は、これを「BEGIN RSA PRIVATE KEY」「END RSA PRIVATE KEY」にそれぞれ書き換えます。

-----BEGIN RSA PRIVATE KEY-----
MIIEvQIBADANBgkqhkiG9w0BAQEFAASCBKcwggSjAgEAAoIBAQC69R8QhG1nk8bl

[途中省略]

3RGjaGflp3j0ekpg2TbPLHk=
-----END RSA PRIVATE KEY-----

プライベートキーを変更、上書き保存したら、準備した2つのファイル(sg3210x.keyとsg3210x.crt)は、作業用PCへ転送します。

2. SG3210X-M2への証明書インストール

 SG3210X-M2のWebコンソールにログインします。
メニューの[SECURITY]から[Access Security]-[HTTPS Config]をクリックします。
スクロールバーを操作、ページを下方向へスクロールします。

[Load Certificate]で[Browse]をクリック、証明書ファイル(crt)を指定します。

[Load]ボタンをクリックします。

[Download the file?]と確認ダイアログが表示されます。[Yes]をクリックします。

※Upload ではなく Downloadなのは、基準が作業用PCではなく、SG3210X-M2だからだと思います。
 おもしろいですね!

Downloadが完了、処理が成功すると[The SSL file downloaded successfully.]とメッセージが表示されます。
OKボタンをクリックします。

同様に[Load Key]からプライベートキーファイルもDownloadします。

証明書・プライベートキーを設定したら、セーブをクリック、装置を再起動します。
再起動が完了したら、クライアントPCのWebブラウザから管理コンソールにアクセスします。
IPアドレスでブラウザアクセスしても警告表示されないため、快適です。

※プライベート認証局のCA証明書は、予めクライアントPCにもインストールしておく必要があります。

3. 最後に

 Web管理コンソールはプライベートキーのDownload処理時に、1行目のヘッダー文字列(BEGIN RSA PRIVATE KEY)をチェックしているようです。
 最初、ヘッダーを修正せずにプライベートキーを組み込もうとしたところ、正常に処理が完了しませんでした。RSA形式に変換した後、ヘッダーフッターもそれぞれ修正する必要がある点、注意が必要です。

 組み込む対象が変わるたびに、操作や設定がいろいろと異なってくるというのは、なかなか難しいものです。
いろいろなパターンがありますね。この手の設定内容や操作、ぜったいに忘れるので、最近、こうして備忘録として記録を残すようにしています。

 easy-rsaは扱いが簡単で便利ですね。opensslコマンドと併用ができるので、さまざまな要求にも柔軟に対応することができます。このプライベートCAは、openvpn構築時に設定したものですが、openvpnのユーザ証明書発行だけではなく、いろいろな機器にもSSL証明書が発行できるので、とても気に入っています。

コメント

タイトルとURLをコピーしました