2
2

More than 1 year has passed since last update.

組み込み向け SSL コマンドラインツール で自己署名証明書を作成してみる

Last updated at Posted at 2022-08-01

概要

wolfSSLのコンソールツール、wolfCLU について紹介します。wolfCLUは、wolfSSLのポータブルコマンドラインツールです。wolfCLU は、一般的な暗号化処理、例えば証明書の解析、暗号化鍵の生成などを、一からアプリケーションを書くよりも容易に行ってくれます。単純な暗号操作だけしか必要がない場合や、OpenSSLがインストールされていない組み込み機器でコマンドラインによる操作が必要な場合に最適です。

wolfCLU の最新安定バージョンv0.0.8では次表のようなコマンドをサポートしています。

コマンド名 備考
BENCH 暗号処理のベンチマーク
CRL CRLファイルの検証。CRLファイルをDER又はPEM形式へ変換
DGST 署名検証
ECPARAM ECC鍵の作成
ENC 暗号化または復号化処理
GENKEY RSA, ECC及びED25519鍵の作成
HASH ハッシュ値の生成
MD5 MD5ハッシュ値の生成
PKCS12 PCKS12の解析のみサポート
PKEY 鍵情報を標準出力へ出力
RAND ランダム値をRawデータまたはbase64で出力
REQ 証明書の署名リクエストの生成または自己署名証明書の生成
RSA RSA暗号処理
S_CLIENT 基本的なTLS接続
VERIFY X509証明書の検証
X509 X509証明書の解析と出力

各コマンドにはそれぞれオプションが複数含まれます。オプションについては英語になりますが、wolfCLU マニュアルで確認することが出来ます。

今回は、wolfCLU をもちいて自己署名証明(俗に言うオレオレ証明書)を作成しTLS通信を行ってみます。使用するコマンドは上記表の ECPARAMREQ 及び X509コマンドを使用します。

ダウンロード、ビルド、インストール

1. wolfSSL のソースコード取得とビルド

最新コードを github から取得します。

$git clone --depth 1 https://github.com/wolfSSL/wolfssl 

コンフィグレーションに "--enable-wolfclu"オプションを指定し、CLU 機能を wolfSSL に組み込み、システムへインストールします。

$ ./autogen.sh
$ ./configure --enable-wolfclu
$ make && make check
$ sudo make install

2. wolfCLU のソースコード取得とビルド

2.1 wolfCLU のソースコード取得

github から最新版を clone します。

git clone https://github.com/wolfSSL/wolfCLU

2.2 wolfCLU のビルド

以下のコマンドを使って wolfCLU をビルドします。

$./autogen.sh
$./configure
$make && make check
$sudo make install

正常にビルドが終了すると wolfCLU ルートフォルダに wolfssl が作成されます。

$ ls -al wolfssl
-rwxrwxr-x 1 foo foo 1244224 Jul 28 18:03 wolfssl

コマンドプロンプトにて次のコマンドを入力し、正常に wolfCLU がビルドされていることを確認します。

$wolfssl -h

3. 自己署名証明の作成

最初に証明書にサインするECC秘密鍵を、wolfCLU の ECPARAM コマンドで作成します。楕円曲線として secp384r1 を指定します。鍵を ecc.key として出力します。

$wolfssl ecparam -genkey -out ecc.key -name secp384r1
$ cat ecc.key 
-----BEGIN EC PARAMETERS-----
BgUrgQQAIg==
-----END EC PARAMETERS-----
-----BEGIN EC PRIVATE KEY-----
MIGkAgEBBDCA+l1+SfMMRggymjJTdX93FwTdDdUEUhUJrNajEmthCv7gqglgAHkb
Dm9bVvDrTgmgBwYFK4EEACKhZANiAATiJXEouK4YVfYT/WmIn3U6hXh5Xce+/PGK
nTUnLs+m3SgKLnsOkxHhKz/JBVLM9NxLOuDAdLIRXm7X9F6YmBSrzgYM1orezxiS
6ksaefyH6NleVoI+cx96f86tz4oCWZg=
-----END EC PRIVATE KEY-----

次に REQコマンドを用いて自己署名証明書を作成します。次のコマンドを入力します。
各オプションは次のような働きをします。

new オプション指定で新規作成
x509 オプション指定で自己署名証明書を指定
days オプション指定で有効期限を 3650
key オプション指定で証明書に含める公開鍵を先ほど作成した ecc.key を指定
out オプション指定で出力先を ecc-self.pem に指定
outform オプション指定で出力形式をPEMに指定
sha256 オプション指定で署名用のハッシュアルゴリズムをsha256を指定

コマンド入力に引き続いて作成者の情報入力をもとめられますので、適当に入力します。

$ wolfssl req -new -x509 -days 3650 -key ecc.key -out ecc-self.pem -outform PEM -sha256
Enter without data will result in the field being skipped.
Examples of inputs are provided as [*]
Country [US] : JP
State or Province [Montana] : KUMAMOTO
Locality [Bozeman] : KUMAMOTO
Organization Name [wolfSSL] : wolfSSL
Organization Unit [engineering] : engineering
Common Name : 
Email Address :

作成した証明書は、X509コマンドを使用し内容を確認することが出来ます。

$ wolfssl x509 -in ecc-self.pem -text
Certificate:
    Data:
        Version: 3 (0x2)
        Serial Number:
            24:c8:cc:d4:30:cf:94:2a:b2:01:de:39:fe:32:fe:af
        Signature Algorithm: SHA256wECDSA
        Issuer: /C=JP/ST=KUMAMOTO/L=KUMAMOTO/O=wolfSSL/OU=engineering
        Validity
            Not Before: Jul 30 01:36:33 2022 GMT
            Not After : Jul 27 01:36:33 2032 GMT
        Subject: /C=JP/ST=KUMAMOTO/L=KUMAMOTO/O=wolfSSL/OU=engineering
        Subject Public Key Info:
            Public Key Algorithm: EC
                 Public-Key: (384 bit)
                 pub:
                     04:e2:25:71:28:b8:ae:18:55:f6:13:fd:69:88:9f:
                     75:3a:85:78:79:5d:c7:be:fc:f1:8a:9d:35:27:2e:
                     cf:a6:dd:28:0a:2e:7b:0e:93:11:e1:2b:3f:c9:05:
                     52:cc:f4:dc:4b:3a:e0:c0:74:b2:11:5e:6e:d7:f4:
                     5e:98:98:14:ab:ce:06:0c:d6:8a:de:cf:18:92:ea:
                     4b:1a:79:fc:87:e8:d9:5e:56:82:3e:73:1f:7a:7f:
                     ce:ad:cf:8a:02:59:98
                ASN1 OID: SECP384R1
        X509v3 extensions:
    Signature Algorithm: SHA256wECDSA
        30:66:02:31:00:cc:7c:fe:84:ac:bf:39:f3:95:a9:38:e9:7b:
        a5:7e:e9:2e:df:b5:6f:23:b5:1e:84:45:2e:97:01:2d:98:59:
        0a:39:1f:fc:51:d6:32:57:46:58:99:6d:ea:7b:d1:49:e1:02:
        31:00:cf:37:68:ad:bc:fa:13:28:46:98:67:1e:77:51:02:1b:
        99:f3:00:34:24:36:e0:9a:53:c5:bd:5a:54:13:27:d1:92:8b:
        46:fd:f4:40:22:10:bc:35:e4:aa:f7:44:ed:6d
-----BEGIN CERTIFICATE-----
MIIB8DCCAXWgAwIBAgIQJMjM1DDPlCqyAd45/jL+rzAKBggqhkjOPQQDAjBbMQsw
CQYDVQQGEwJKUDERMA8GA1UECAwIS1VNQU1PVE8xETAPBgNVBAcMCEtVTUFNT1RP
MRAwDgYDVQQKDAd3b2xmU1NMMRQwEgYDVQQLDAtlbmdpbmVlcmluZzAeFw0yMjA3
MzAwMTM2MzNaFw0zMjA3MjcwMTM2MzNaMFsxCzAJBgNVBAYTAkpQMREwDwYDVQQI
DAhLVU1BTU9UTzERMA8GA1UEBwwIS1VNQU1PVE8xEDAOBgNVBAoMB3dvbGZTU0wx
FDASBgNVBAsMC2VuZ2luZWVyaW5nMHYwEAYHKoZIzj0CAQYFK4EEACIDYgAE4iVx
KLiuGFX2E/1piJ91OoV4eV3Hvvzxip01Jy7Ppt0oCi57DpMR4Ss/yQVSzPTcSzrg
wHSyEV5u1/RemJgUq84GDNaK3s8YkupLGnn8h+jZXlaCPnMfen/Orc+KAlmYMAoG
CCqGSM49BAMCA2kAMGYCMQDMfP6ErL8585WpOOl7pX7pLt+1byO1HoRFLpcBLZhZ
Cjkf/FHWMldGWJlt6nvRSeECMQDPN2itvPoTKEaYZx53UQIbmfMANCQ24JpTxb1a
VBMn0ZKLRv30QCIQvDXkqvdE7W0=
-----END CERTIFICATE-----

4. 自己署名証明書を使ってTLS通信してみる

wolfSSL に含まれるサンプルサーバ・クライアントを利用し、ステップ 3 で作成した自己証明書を使ってTLS通信してみます。別のターミナルを開き、wolfSSLのルートフォルダーへ移動し、サンプルサーバを起動します。

$ cd <wolfssl-root>
$ ./examples/server/server -b -i -d -c <wolfCLU-root>/ecc-self.pem -k <wolfCLU-root>/ecc.key

さらに別のターミナルを開き、サンプルクライアントを起動します。

$ ./examples/client/client -A <wolfCLU-root>/ecc-self.pem

サンプルサーバの出力を確認します。

//出力例
$ ./examples/server/server -b -i -d -c <wolfCLU-root>/ecc-self.pem -k <wolfCLU-root>ecc.key
peer has no cert!
SSL version is TLSv1.2
SSL cipher suite is TLS_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384
SSL signature algorithm is (null)
SSL curve name is SECP384R1
Server Random : 61B93116574990092DD8678948E13FF65F4902AE3713D624E402ADB0DFEE7BFC
Client message: hello wolfssl!

サンプルクライアントの出力を確認します。

$ ./examples/client/client -A /home/miyazakh/workspace/wolfCLU/ecc-self.pem 
Session Ticket CB: ticketSz = 172, ctx = initial session
Alternate cert chain used
 issuer : /C=JP/ST=KUMAMOTO/L=KUMAMOTO/O=wolfSSL/OU=engineering
 subject: /C=JP/ST=KUMAMOTO/L=KUMAMOTO/O=wolfSSL/OU=engineering
 serial number:46:0a:e0:5e:f8:4a:f4:dc:31:f7:74:e0:33:64:e7:f4 
SSL version is TLSv1.2
SSL cipher suite is TLS_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384
SSL curve name is SECP384R1
---
Server certificate
-----BEGIN CERTIFICATE-----
....

TLS通信を行っていることが分かります。

まとめ

今回は、wolfSSL のポータブルコマンドラインツールである wolfCLU について紹介しました。現在の最新安定バージョンは、v0.0.8 で、まだまだ進化の途上である感は否めません。一方で github 版の最新コードは定期的に更新され機能も充実してきてるので、実験的に試すにはお勧めです。

2
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
2