カテゴリー
2021年 AWS Azure クラウド コンピューター トラブルシューティング 技術一般 証明書

パケットキャプチャーからサーバー証明書を抜き出す方法

Webサーバー向けのテストをしていると、代理証明書が必要となるケースが多いです。特に、インターネット上にあるサーバーに対しての通信テストとなると、それらのサーバー署名書をまず手に入れ、その内容を元に、代理証明書を作成する必要があります。

インターネット上にあるサーバーの証明書ですが、実は簡単に内容を取得することができます。パケットキャプチャ(TCP ダンプ)を取得するのです。

パケットキャプチャには、通信の全てが含まれています。当然、サーバー証明書も含まれます。このやり取りの証明書の部分を指定して、証明書だけを抜き出せば良いのです。

サーバ証明書の抜き出し方

まず、証明書を取得したいサーバーにアクセスをし、その通信をWiresharkを使ってパケットキャプチャします。

Server Hello が飛んできた後に、Certificateのやり取りが見えます。この中に証明書が入っています。上の画面キャプチャーの青色で反転させているパケットです。このパケットの中を見ていきます。

  1. Secure Sockets Layer
  2. TLSV1.2 Record Layer: Handshake Protocol : Certificate
  3. Handshake Protocol: Certificate
  4. Certificates (バイト数)

の順にクリックして、詳細を表示させます。

その中に、Certificate (id-atCommonName=ドメイン名)のパケットが見えます。

id-at-ConnomName=w.usabilla.com を取り出してみます。

そのパケットを選択し、右クリックメニューを表示させます。

メニューから、Export Selected Packet Bytes… をクリックします。

このパケットを、証明書として保存します。名前をつけて保存のウィンドウが表示されますので、ファイル名のところで名前を指定します。

この時のポイントは、拡張子を「.crt」にして保存することです。こうすることで、Windows 上からは証明書として認識されますので、ダブルクリックで中が見られるようになります。

証明書の内容を見てみる

名前をつけて保存した証明書ファイルを開いて、中をみてみましょう。

w.usabilla.com.crt の証明書を、駄ぬんるクリックして開いてみます。

発行社はAmazonなんですね。

「詳細」タブをクリックして、証明書の詳細も見てみましょう。

証明書の記載項目の一覧が表示されますので、「サブジェクト」をクリックしてみます。

CN: Common Name が表示されましたね。

次に、「サブジェクト代替名」をクリックしてみます。

SAN: Subject Alternative Name が表示されましたね。

証明書の中身が分かりましたので、これで代理証明書を作成することが可能です。自分でCA局のサーバーを建てて、そこでサインして発行するのも良いのですが、オンラインで簡単に証明書を発行できるサイトがあります。

これも使ってみてください。

関連する記事:

最近の記事:

カテゴリー
2021年 Raspberry Pi ガジェット コマンド コンピューター バックアップ・リストア 技術一般

Raspberry pi 4 バックアップ・リストア

バックアップ

MacOS を使っているなら、DD がおすすめです。ターミナルでの操作になりますが、バックアップイメージの書き出しが非常に速いです。

Windows でも、これを入れれば、DD が使えるようになるみたいです。私は使ったことがないのですが。

MacOS

ターミナルを起動し、df コマンドを実行します。

kma@C02CL3FJMD6R-MAC ~ % df -h
Filesystem                  Size   Used  Avail Capacity    iused       ifree %iused  Mounted on
/dev/disk1s1               1.8Ti   10Gi  1.2Ti     1%     488398 19538540362    0%   /
devfs                      193Ki  193Ki    0Bi   100%        667           0  100%   /dev
/dev/disk1s2               1.8Ti  578Gi  1.2Ti    32%    2598232 19536430528    0%   /System/Volumes/Data
/dev/disk1s5               1.8Ti  4.4Gi  1.2Ti     1%          4 19539028756    0%   /private/var/vm
map auto_home                0Bi    0Bi    0Bi   100%          0           0  100%   /System/Volumes/Data/home
/dev/disk1s4               1.8Ti  505Mi  1.2Ti     1%         57 19539028703    0%   /Volumes/Recovery
//admin@172.16.16.4/share  2.7Ti  1.2Ti  1.5Ti    45% 1284655110  1628797004   44%   /Volumes/share

MicroSD を認識させた後に、もう一度 DF コマンドを実行します。増えているものが、MicroSD のディスク番号です。

私の例ですと、/dev/disk2s1 になってます。これを、メモしておきます。

kma@C02CL3FJMD6R-MAC ~ % df -h
Filesystem                  Size   Used  Avail Capacity    iused       ifree %iused  Mounted on
/dev/disk1s1               1.8Ti   10Gi  1.2Ti     1%     488398 19538540362    0%   /
devfs                      193Ki  193Ki    0Bi   100%        667           0  100%   /dev
/dev/disk1s2               1.8Ti  578Gi  1.2Ti    32%    2598246 19536430514    0%   /System/Volumes/Data
/dev/disk1s5               1.8Ti  4.4Gi  1.2Ti     1%          4 19539028756    0%   /private/var/vm
map auto_home                0Bi    0Bi    0Bi   100%          0           0  100%   /System/Volumes/Data/home
/dev/disk1s4               1.8Ti  505Mi  1.2Ti     1%         57 19539028703    0%   /Volumes/Recovery
//admin@172.16.16.4/share  2.7Ti  1.2Ti  1.5Ti    45% 1284655110  1628797004   44%   /Volumes/share
/dev/disk2s1               252Mi   49Mi  204Mi    20%          0           0  100%   /Volumes/boot

MicroSD をアンマウントします。

kma@C02CL3FJMD6R-MAC ~ % diskutil umountDisk /dev/disk2s1 
Unmount of all volumes on disk2 was successful

MiscoSD の中のデータをコピーします。

sudo dd if=/dev/rdiskX of=./image-name.img bs=1m

「if=」の後に、先ほどのディスク番号を指定します。私の場合は、「/dev/disk2s1」なので、「/dev/disk2」です。

diskの前に「r」を付けるのを忘れないようにしてください。これを忘れると、書き出しが非常に遅くなります。

「of=」の後ろには、書き出した後のイメージの名前を指定します。以下の例では、書き出し先は、カレントディレクトリーです。

最後に「bs=1m」を指定しておきます。これも忘れると、書き出しが非常に遅くなるので注意です。

kma@C02CL3FJMD6R-MAC ~ % sudo dd if=/dev/rdisk2 of=./raspberry-20210606-bak.img bs=1m
Password:

書き出しが始まりました。

別のターミナルを起動して見てみましょう。指定した名前のファイルができてますね。

kma@C02CL3FJMD6R-MAC ~ % ls -la ./*.img
-rw-r--r--  1 root  staff  5622464512 Jun  6 13:11 ./raspberry-20210606-bak.img

書き出しが完了するまで、しばらく待ちます。

32GB の MicroSD からイメージを書き出しましたが、約422秒で完了です。なかなか速いですね。

30145+0 records in
30145+0 records out
31609323520 bytes transferred in 421.862104 secs (74928094 bytes/sec)

これでバックアップは完了です。

ちなみに、このイメージファイルですが、圧縮するとかなりサイズが小さくできるみたいです。32GBのバックアップイメージを圧縮すると、1.9GBくらいまで小さくできます。

バックアップを数世代残しておきたい場合は特に、圧縮して保存しておくと良いかもしれません。

リストア

BelenaEtcher をダウンロードします。使い方も簡単で、個人的におすすめです。

バックアップの時に使用した DD コマンドでもリストアはできるのですが、こちらの方が、書き込み速度が速いです。

Windows 版、MacOS 版、Linux 版があります。

Etcher を起動します。

「Flash from file」をクリックします。

エクスプローラーから、バックアップイメージを指定します。

「Select target」をクリックします。

リストア先の MicroSD を指定し、「Select」をクリックします。

「Flash」を押せば、リストアが開始します。

MicroSD への書き込みが始まります。

使っているパソコンのスペック次第というところもありいますが、32GB のイメージの書き込みで、45分くらいという感じです。

関連する記事:

最近の記事: