SG3210X-M2 Webコンソール用のSSL証明書もプライベートCAから出力しました。
【2026年3月 追記・修正】
Easy-RSAを使った自己署名証明書作成手順(プライベートCAの構築)は、ニフクラさん(現FJcloud-V)の記事が大変わかりやすいのでWeb検索してみてください。
以前の記事では「秘密鍵ファイルのヘッダーフッターを手動で書き換える」という強引な手法を紹介していました。実はこれ、PKCS#1 形式が要求されているというオチでした。
というかPKCS#1 形式の存在は私は本日知りました。お恥ずかしい限りです。
OpenSSL3.0以降では、コマンドや環境によりますが、秘密鍵の出力形式はPKCS#8形式(BEGIN PRIVATE KEY)となります。
そのため、従来のPKCS#1形式(BEGIN RSA PRIVATE KEY)で出力したい場合は、「-traditional」オプションを明示的に指定する必要があります。
以前の記事では、受入時にヘッダ/フッタ情報だけPKCS#1形式に変更、中身のバイナリデータ自体はRSAとして正しかったため、スイッチの秘密鍵インポート時のチェックも合格しており、いったんインストールさえできれば、装置内蔵のWebサーバはPKCS#8形式の秘密鍵でも動作OKだったということだと推察します。
今回の記事修正ではPKCS#1形式の秘密鍵を作成する方法に変更しています。
ヘッダーとフッターを書き換えるという、強引な設定。その場しのぎの対処であり、良く動かしていたな・・・と呆れながらも、記事を修正させていただきます。
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形式に変換します。
※ 2026/3/20 訂正
初出記事では、下記コマンドを実行しておりました。
# openssl rsa -in /root/cert/pki/private/sg3210x.oz.exiv.net.key \
-out /root/sg3210x/sg3210x.key # プライベートキーの変換・出力
-traditional指定が必要でした。下記コマンドでPKCS#1 形式となります。
# openssl rsa -in /root/cert/pki/private/sg3210x.oz.exiv.net.key \
-out /root/sg3210x/sg3210x.key -traditional # プライベートキーの変換・出力
変換後、出力したRSA形式のプライベートキーのヘッダーとフッターを確認します。
# vi /root/sg3210x/sg3210x.key
-----BEGIN RSA PRIVATE KEY-----
MIIEpAIBAAKCAQEAwHkNaUo+l76bbvy/9IucVzOlzGkKcihNtr9NvtwxScI4kxaQ
[途中省略]
3RGSqB5crlojYbEdwtI4gLCV9pTnqI4w8Ro/M2MSHdz7jGxN6JS72A==
-----END RSA 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形式に変換した後、ヘッダーフッターもそれぞれ修正する必要がある点、注意が必要です。
PKCS#8形式のキーを組み込もうとしたところ、正常に処理が完了しませんでした。
今回は、PKCS#1 形式のキーが要求される点が最大のポイントとなります。
組み込む対象が変わるたびに、操作や設定がいろいろと異なってくるというのは、なかなか難しいものです。
いろいろなパターンがありますね。この手の設定内容や操作、ぜったいに忘れるので、最近、こうして備忘録として記録を残すようにしています。
easy-rsaは扱いが簡単で便利ですね。opensslコマンドと併用ができるので、さまざまな要求にも柔軟に対応することができます。このプライベートCAは、openvpn構築時に設定したものですが、openvpnのユーザ証明書発行だけではなく、いろいろな機器にもSSL証明書が発行できるので、とても気に入っています。

コメント