はじめに
OpenClaw Gateway はデフォルトで HTTP プロトコルを使用してポート 18789 で動作します。本番環境では、特に Web Dashboard を外部に公開する場合や Webhook でメッセージを受信する場合、HTTPS 暗号化は安全な運用の基本要件です。本記事では、OpenClaw に SSL を設定する 3 つの方法を紹介します。
一、方式の選択
| 方式 | 適用シーン | 複雑度 | 推奨度 |
|---|---|---|---|
| Nginx リバースプロキシ + Let's Encrypt | 本番環境、ドメインあり | 中 | 最も推奨 |
| OpenClaw 内蔵 SSL | シンプルなデプロイ、素早く有効化 | 低 | テスト向き |
| 自己署名証明書 | イントラネット環境、ドメインなし | 低 | イントラネット限定 |
二、方式1:Nginx リバースプロキシ(推奨)
本番環境の推奨方式で、Nginx が SSL 終端を処理し、OpenClaw は HTTP のまま動作します。
2.1 Nginx と Certbot のインストール
# Ubuntu/Debian
sudo apt update
sudo apt install nginx certbot python3-certbot-nginx
# CentOS/RHEL
sudo yum install nginx certbot python3-certbot-nginx
2.2 Nginx リバースプロキシの設定
sudo nano /etc/nginx/sites-available/openclaw
server {
listen 80;
server_name openclaw.yourdomain.com;
location / {
proxy_pass http://127.0.0.1:18789;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
# WebSocket サポート
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
# タイムアウト設定(AI の応答に時間がかかる場合がある)
proxy_read_timeout 120s;
proxy_send_timeout 120s;
}
}
# サイト設定を有効にする
sudo ln -s /etc/nginx/sites-available/openclaw /etc/nginx/sites-enabled/
sudo nginx -t
sudo systemctl reload nginx
2.3 Let's Encrypt 証明書の申請
# 自動的に証明書を申請して SSL を設定
sudo certbot --nginx -d openclaw.yourdomain.com
# プロンプトに従って操作:
# 1. メールアドレスを入力(証明書期限切れのリマインダー用)
# 2. 利用規約に同意
# 3. HTTP を HTTPS にリダイレクトするかどうかを選択(推奨: はい)
Certbot は自動的に Nginx の設定を変更し、SSL 関連の設定を追加します。完了後の設定は以下のようになります。
server {
listen 443 ssl;
server_name openclaw.yourdomain.com;
ssl_certificate /etc/letsencrypt/live/openclaw.yourdomain.com/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/openclaw.yourdomain.com/privkey.pem;
include /etc/letsencrypt/options-ssl-nginx.conf;
ssl_dhparam /etc/letsencrypt/ssl-dhparams.pem;
location / {
proxy_pass http://127.0.0.1:18789;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
proxy_read_timeout 120s;
proxy_send_timeout 120s;
}
}
server {
listen 80;
server_name openclaw.yourdomain.com;
return 301 https://$host$request_uri;
}
2.4 証明書の自動更新
Let's Encrypt 証明書の有効期間は 90 日間で、Certbot にはデフォルトで自動更新のスケジュールタスクが設定されています。
# 更新スケジュールタスクの確認
sudo systemctl list-timers | grep certbot
# 手動で更新テスト
sudo certbot renew --dry-run
# 自動更新が設定されていない場合、手動で crontab に追加
# 毎日午前3時に更新を試行
echo "0 3 * * * certbot renew --quiet --post-hook 'systemctl reload nginx'" | sudo tee -a /etc/crontab
2.5 SSL セキュリティ強化
Nginx の設定にセキュリティヘッダーを追加します。
# server ブロック内に追加
add_header Strict-Transport-Security "max-age=31536000; includeSubDomains" always;
add_header X-Content-Type-Options "nosniff" always;
add_header X-Frame-Options "SAMEORIGIN" always;
add_header X-XSS-Protection "1; mode=block" always;
# 強力な暗号化アルゴリズムのみ許可
ssl_protocols TLSv1.2 TLSv1.3;
ssl_ciphers ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384;
ssl_prefer_server_ciphers on;
三、方式2:OpenClaw 内蔵 SSL
OpenClaw は Nginx の中間層なしで直接 SSL 証明書を設定できます。
3.1 内蔵 SSL の設定
// ~/.config/openclaw/openclaw.json5
{
"gateway": {
"port": 18789,
"ssl": {
"enabled": true,
"cert": "/path/to/fullchain.pem",
"key": "/path/to/privkey.pem",
"port": 18790 // HTTPS リスニングポート
}
}
}
3.2 Let's Encrypt 証明書の使用
# standalone モードで証明書を申請(ポート80を使用するサービスを一時的に停止する必要あり)
sudo certbot certonly --standalone -d openclaw.yourdomain.com
# 証明書ファイルの場所
# /etc/letsencrypt/live/openclaw.yourdomain.com/fullchain.pem
# /etc/letsencrypt/live/openclaw.yourdomain.com/privkey.pem
Let's Encrypt の証明書ファイルはデフォルトで root のみ読み取り可能なため、パーミッションの設定が必要です。
# 方法1: openclaw ユーザーを ssl-cert グループに追加
sudo usermod -aG ssl-cert openclaw
sudo chgrp -R ssl-cert /etc/letsencrypt/live/ /etc/letsencrypt/archive/
sudo chmod -R g+rx /etc/letsencrypt/live/ /etc/letsencrypt/archive/
# 方法2: 証明書を OpenClaw がアクセスできる場所にコピー
sudo mkdir -p /home/openclaw/.openclaw/ssl
sudo cp /etc/letsencrypt/live/openclaw.yourdomain.com/fullchain.pem /home/openclaw/.openclaw/ssl/
sudo cp /etc/letsencrypt/live/openclaw.yourdomain.com/privkey.pem /home/openclaw/.openclaw/ssl/
sudo chown -R openclaw:openclaw /home/openclaw/.openclaw/ssl/
sudo chmod 600 /home/openclaw/.openclaw/ssl/privkey.pem
3.3 証明書更新後の自動リロード
# 更新フックスクリプトの作成
sudo nano /etc/letsencrypt/renewal-hooks/post/openclaw-reload.sh
#!/bin/bash
# 新しい証明書を OpenClaw ディレクトリにコピー
cp /etc/letsencrypt/live/openclaw.yourdomain.com/fullchain.pem /home/openclaw/.openclaw/ssl/
cp /etc/letsencrypt/live/openclaw.yourdomain.com/privkey.pem /home/openclaw/.openclaw/ssl/
chown openclaw:openclaw /home/openclaw/.openclaw/ssl/*.pem
# OpenClaw をリロードして新しい証明書を読み込む
sudo -u openclaw openclaw restart
sudo chmod +x /etc/letsencrypt/renewal-hooks/post/openclaw-reload.sh
四、方式3:自己署名証明書
イントラネットデプロイやテスト環境に適しています。
4.1 自己署名証明書の生成
# 証明書ディレクトリの作成
mkdir -p ~/.openclaw/ssl && cd ~/.openclaw/ssl
# 秘密鍵と証明書の生成(有効期間365日)
openssl req -x509 -nodes -days 365 -newkey rsa:2048 \
-keyout privkey.pem \
-out fullchain.pem \
-subj "/CN=openclaw.local/O=OpenClaw/C=CN"
# パーミッションの設定
chmod 600 privkey.pem
chmod 644 fullchain.pem
4.2 OpenClaw での自己署名証明書の設定
{
"gateway": {
"ssl": {
"enabled": true,
"cert": "~/.openclaw/ssl/fullchain.pem",
"key": "~/.openclaw/ssl/privkey.pem",
"port": 18790
}
}
}
4.3 クライアントでの自己署名証明書の信頼
ブラウザでアクセスすると安全でないという警告が表示されるため、手動で信頼を追加できます。
# Linux: システムの信頼リストに追加
sudo cp ~/.openclaw/ssl/fullchain.pem /usr/local/share/ca-certificates/openclaw.crt
sudo update-ca-certificates
# macOS: キーチェーンに追加
sudo security add-trusted-cert -d -r trustRoot -k /Library/Keychains/System.keychain ~/.openclaw/ssl/fullchain.pem
五、HTTPS 設定の検証
設定完了後、HTTPS が正常に動作していることを検証します。
# HTTPS 接続のテスト
curl -v https://openclaw.yourdomain.com/health
# 証明書情報の確認
openssl s_client -connect openclaw.yourdomain.com:443 -servername openclaw.yourdomain.com </dev/null 2>/dev/null | openssl x509 -noout -dates -subject
# SSL Labs でのオンラインテスト(パブリックアクセス可能な場合)
# https://www.ssllabs.com/ssltest/analyze.html?d=openclaw.yourdomain.com
六、よくある質問
Q: HTTPS 設定後に WebSocket 接続が失敗する?
Nginx の設定に WebSocket サポートの Upgrade と Connection ヘッダーが含まれていることを確認してください。
Q: 証明書更新後にサービスが新しい証明書を読み込まない?
OpenClaw は証明書ファイルの変更を自動的に検出しません。更新後に openclaw restart を実行するか、更新フックスクリプトを設定する必要があります。
Q: HTTP と HTTPS を混在して使用できる?
両方のポートで同時にリッスンできますが、本番環境では HTTPS を強制し、301 リダイレクトで HTTP リクエストを HTTPS に誘導することを推奨します。
SSL 証明書を正しく設定すると、OpenClaw サービスはトランスポート層の暗号化保護を得て、セキュリティコンプライアンス要件を満たすとともに、HTTPS Webhook を必要とする一部のメッセージングプラットフォームへの接続の前提条件も満たします。