MQTT - ブローカー - SSH - 証明書作成


クラウディア 


1. 概要
2. インストール
3. 証明書作成
4. 参考サイト

1. 概要

 「SSH」を使うので、証明書を作成します。  サーバがインターネットへの公開サーバではありませんので、自己証明書(いわゆるなんちゃって証明書)を作成します。  本設定では、「IP」アドレスにより証明書を作成します。  「IP」アドレスが変更された場合は、証明書を再作成して、再配置する必要がありますので、ご注意ください。

2. インストール

 「OpenSSL」が必要になりますので、インストールしておきます。  以下、本ページは、すべて「root」ユーザ権限で。

apt update

apt upgrade -y

apt install -y openssl

3. 証明書作成

 下記のスクリプトを作成します。

#!/usr/bin/sh

cd /etc/mosquitto/certs/ || exit 1

INTERFACE=$(ip route | grep '^default' | awk '{print $5}')
IP_ADDRESS=$(ip -4 addr show "$INTERFACE" | grep -oP '(?<=inet\s)\d+(\.\d+){3}')
echo "subjectAltName = IP:$IP_ADDRESS" > server.ext
echo "extendedKeyUsage = clientAuth" > client.ext

openssl genrsa -out ca.key 2048
openssl req -x509 -new -nodes -key ca.key -days 3650 -out ca.crt -subj "/C=JP/ST=Some-State/O=Internet Widgits Pty Ltd/CN=MyCA"

openssl genrsa -out server.key 2048
openssl req -new -key server.key -out server.csr -subj "/C=JP/ST=Some-State/O=Internet Widgits Pty Ltd/CN=$IP_ADDRESS"
openssl x509 -req -in server.csr -CA ca.crt -CAkey ca.key -CAcreateserial -out server.crt -days 3650 -sha256 -extfile server.ext

openssl genrsa -out client.key 2048
openssl req -new -key client.key -out client.csr -subj "/C=JP/ST=Some-State/O=Internet Widgits Pty Ltd/CN=client"
openssl x509 -req -in client.csr -CA ca.crt -CAkey ca.key -CAcreateserial -out client.crt -days 3650 -sha256 -extfile client.ext

chown mosquitto:mosquitto /etc/mosquitto/certs/server.key /etc/mosquitto/certs/server.crt
chmod 600 /etc/mosquitto/certs/server.key
chmod 644 /etc/mosquitto/certs/server.crt
chmod 600 /etc/mosquitto/certs/client.key
chmod 644 /etc/mosquitto/certs/client.crt
chmod 644 /etc/mosquitto/certs/ca.crt
 5~8行で、サーバの「IP」アドレスを取得して、以降のパラメータファイルを作成しています。  10、11行で、「CA」認証局)用の鍵と証明書を作成しています。  13~15行で、サーバの秘密鍵「Private Key」(2048 ビット、RSA)、証明書署名要求「CSR」、サーバー証明書を作成して、「CA」で署名しています(期限、10年間)。  17~19行で、クライアント証明書を作成して「CA」で署名、クライアント鍵を作成、クライアント「CSR」を作成しています。  21行で、所有権を設定しています。  22~27行で、パーミッションを設定しています。  スクリプトを「sudo」で実行します。  下記が表示されます。

Certificate request self-signature ok
subject=C = JP, ST = Some-State, O = Internet Widgits Pty Ltd, CN = ip_address
Certificate request self-signature ok
subject=C = JP, ST = Some-State, O = Internet Widgits Pty Ltd, CN = client
 ここまでの結果。

/etc/mosquitto/certs/
 に、下記のファイルが作成されているはずです。

-rw-r--r-- 1 root      root      1.3K Dec  4 07:17 ca.crt
-rw------- 1 root      root      1.7K Dec  4 07:17 ca.key
-rw-r--r-- 1 root      root      1.3K Dec  4 07:17 client.crt
-rw-r--r-- 1 root      root       980 Dec  4 07:17 client.csr
-rw-r--r-- 1 root      root        30 Dec  4 07:17 client.ext
-rw------- 1 root      root      1.7K Dec  4 07:17 client.key
-rw-r--r-- 1 mosquitto mosquitto 1.3K Dec  4 07:17 server.crt
-rw-r--r-- 1 root      root       993 Dec  4 07:17 server.csr
-rw-r--r-- 1 root      root        35 Dec  4 07:17 server.ext
-rw------- 1 mosquitto mosquitto 1.7K Dec  4 07:17 server.key

4. 参考サイト

 本ページは、「ChatGPT」軍曹および下記のサイトを参考にさせていただきました。
【Mosquitto】MQTTブローカの構築・動作確認 (ユーザ認証・TLS暗号化まで) #mqtt

EaseUS
AbemaTV 無料体験