- 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」
|
|