【補足2】Dify導入のためのLinux基礎:OpenSSLでSSL/TLS証明書を準備する方法

Dify環境構築

Difyで自社専用AIチャットボットを構築する際、サーバー(Linux)の準備が第一歩です。Difyはログイン情報、AIのAPIキー、チャット履歴など、非常に機密性の高い情報を取り扱います。そのため、これらの通信をすべて暗号化する「HTTPS」での運用が絶対に必要です。

そのHTTPSを実現するために不可欠なのが「SSL/TLS証明書」です。

この記事では、システムに詳しくない方でもDifyサーバーを安全に運用できるよう、「OpenSSL」というツールを使ってSSL/TLS証明書(の「材料」)を準備する、具体的で簡単な手順を解説します。

 

1. OpenSSLとは?

OpenSSLは、Linuxに標準で搭載されている「デジタル世界の鍵と錠前を作るための道具箱」のようなものです。SSL/TLS通信に必要な「鍵」や「証明書」を作成・管理するための、オープンソースのソフトウェアライブラリです。

DifyサーバーをHTTPS化するために、私たちはこの道具箱を使って「秘密鍵」と「証明書署名要求(CSR)」という2つの重要なアイテムを作成します。

 

2. 環境の準備と確認(インストール)

Difyの環境として推奨されるUbuntuなどの最新Linuxディストリビューションには、OpenSSLは最初からインストールされています

念のため、ターミナルで以下のコマンドを実行し、バージョン情報が表示されるか確認しましょう。

# OpenSSLがインストールされているか、バージョンを確認します
openssl version

もし「command not found」と表示された場合(ほとんどありませんが)、以下のコマンドでインストールしてください。

# パッケージリストを最新にします
sudo apt update

# OpenSSLをインストールします
sudo apt install openssl

 

3. SSL証明書の「材料」を作成する

SSL証明書を取得するには、まず2つの「材料」をサーバー上で作成する必要があります。

  1. 秘密鍵 (private.key)
    • 役割: あなたのサーバーだけが持つ「マスターキー」です。この鍵で通信を暗号化したり、サーバーが本物であることを証明します。
    • 重要度: 絶対にサーバー外部に漏らしてはいけません。 これが漏れると、第三者があなたのサーバーになりすますことが可能です。
  2. CSR (Certificate Signing Request) – 証明書署名要求
    • 役割: AlphaSSLやLet’s Encryptのような「認証局(CA)」に、「私はこのドメインの所有者です。証明書を発行してください」とお願いするための「申請書」です。
    • この申請書には、あなたのドメイン名や組織情報、そして「公開鍵」(秘密鍵とペアになる鍵)が含まれます。

 

4. 【ステップ1】 秘密鍵 (private.key) の作成

最も重要な「秘密鍵」から作成します。

  1. ターミナルを開き、証明書関連のファイルをまとめておくディレクトリ(フォルダ)を作成して、そこに移動すると管理が楽です。
    # /etc/ssl/private という場所に移動します(Nginxなどで一般的な場所です)
    # もしなければ作成します: sudo mkdir -p /etc/ssl/private
    # sudo chown $USER:$USER /etc/ssl/private (一時的に権限変更)
    # cd /etc/ssl/private
    
    # もしくは、ホームディレクトリに作業用フォルダを作っても構いません
    mkdir ~/ssl-work
    cd ~/ssl-work
    
  2. 以下のコマンドを実行して、秘密鍵(private.key)を生成します。
    # 2048ビットのRSA秘密鍵を「private.key」という名前で生成します
    openssl genrsa -out private.key 2048
    
    • genrsa: RSAという暗号化方式の鍵を生成するコマンドです。
    • -out private.key: private.key という名前のファイルに出力します。
    • 2048: 鍵の長さ(強度)です。2048ビットが現在一般的です。

これで、カレントディレクトリに private.key ファイルが作成されます。

(補足)パスフレーズについて コマンド実行時にパスフレーズ(秘密鍵を使うためのパスワード)を設定することもできますが、Difyを動かすNginxなどのWebサーバーと連携させる場合、サーバー再起動のたびにパスワード入力を求められ、自動起動に失敗します。 サーバーで使う秘密鍵は、パスフレーズなしで作成するのが一般的です。

 

5. 【ステップ2】 CSR (証明書署名要求) の作成

次に、作成した「秘密鍵」を使って「申請書(CSR)」を作成します。

  1. ステップ1と同じディレクトリで、以下のコマンドを実行します。
    # 「private.key」を基に、新しい申請書「server.csr」を作成します
    openssl req -new -key private.key -out server.csr
    
  2. コマンドを実行すると、対話形式で質問が始まります。 これらは申請書に記載される情報です。落ち着いて入力しましょう。
    You are about to be asked to enter information that will be incorporated
    into your certificate request.
    -----
    

CSR入力項目の解説(Difyユーザー向け)

質問項目 (英語) 日本語の意味 入力例(特にDifyで重要)
Country Name (2 letter code) 国名 (2文字コード) JP (日本の場合はJPと入力してEnter)
State or Province Name 都道府県名 TokyoChiba (ローマ字で入力)
Locality Name (eg, city) 市区町村名 Shibuya-ku (ローマ字で入力)
Organization Name 組織名・会社名 My Dify Project (個人の場合。法人の場合は会社名)
Organizational Unit Name 部門名 IT Department (空欄のままEnterでも可)
Common Name (CN) コモンネーム (ドメイン名) dify.your-domain.com
Email Address メールアドレス admin@your-domain.com (あなたの連絡用)
A challenge password チャレンジパスワード (入力せずにEnter。空欄のまま進めてください)
An optional company name 任意の会社名 (入力せずにEnter。空欄のまま進めてください)

最重要ポイント: Common Name (CN)

  • Common Name (CN) は、Difyでアクセスする予定の「ドメイン名(FQDN)」と完全に一致させる必要があります。
  • もし https://dify.example.com でDifyを公開するなら、dify.example.com と正確に入力してください。
  • ここを間違えると、証明書を取得してもブラウザで「ドメイン名が一致しません」というエラーが発生します。

すべて入力し終えると、カレントディレクトリに server.csr ファイルが作成されます。

 

6. (オプション) 設定ファイルを使ってCSRを「一発で」作成する

毎回対話形式で入力するのが面倒な場合や、www.your-domain.comyour-domain.com の両方に対応する証明書(SAN: サブジェクト代替名)が必要な場合は、設定ファイルを使うと便利です。

  1. openssl.cnf といった名前で以下の設定ファイルを作成します。
    [ req ]
    distinguished_name = req_distinguished_name
    req_extensions = v3_req
    prompt = no # これで対話形式の質問をスキップします
    
    [ req_distinguished_name ]
    C = JP
    ST = Tokyo
    L = Chiyoda-ku
    O = My Dify Company
    OU = Tech Team
    CN = dify.your-domain.com # ★あなたのDify用ドメイン名
    
    [ v3_req ]
    # ここで複数のドメイン名(SAN)を指定できます
    subjectAltName = @alt_names
    
    [ alt_names ]
    DNS.1 = dify.your-domain.com
    DNS.2 = [www.dify.your-domain.com](https://www.dify.your-domain.com) # (もし別名も必要なら)
    
  2. 以下のコマンドで、設定ファイルを読み込んで一発でCSRを作成します。
    openssl req -new -key private.key -out server.csr -config openssl.cnf
    

 

7. 次のステップ:証明書を取得する

これで、あなたの手元には2つのファイルが準備できました。

  1. private.key (秘密鍵)
  2. server.csr (証明書署名要求 / 申請書)

DifyサーバーをHTTPS化するための次のステップは、この server.csr を使って、本物の「SSL証明書(.crtファイル)」を認証局(CA)から発行してもらうことです。

 

 

8. OpenSSLの基本操作

ここでは、OpenSSLの基本的な操作方法について説明します。初めて使う方向けに、よく使うコマンドの使い方や、それらのコマンドがどのように役立つかを学んでいきましょう。

ヘルプコマンド

OpenSSLの全てのコマンドを一覧表示し、それぞれのコマンドの目的や使用法を確認します。

openssl help

バージョン確認

インストールされているOpenSSLのバージョンを確認します。これは、使用しているバージョンが最新であることを確認するために重要です。

openssl version

暗号化・復号化

テキストを暗号化し、その暗号化されたテキストを復号化する方法を説明します。これにより、データの安全な保存や送信が可能になります。

暗号化

テキストデータをAES-256-CBCアルゴリズムを使って暗号化します。これは、データを第三者から守るために使用します。AES-256-CBCは非常に強力な暗号化アルゴリズムで、データを安全に保護するために広く使用されています。

echo "Hello, OpenSSL!" | openssl enc -aes-256-cbc -out encrypted.dat

復号化

暗号化されたデータを復号化します。これにより、暗号化されたデータを元の形式に戻すことができます。

openssl enc -d -aes-256-cbc -in encrypted.dat

ハッシュ計算

テキストのSHA-256ハッシュ値を計算します。ハッシュ値はデータの整合性を確認するために使用されます。ハッシュ値は一方向性であり、元のデータに戻すことはできません。暗号化とは異なり、ハッシュはデータを保護するためのものではなく、データが改ざんされていないかを確認するためのものです。

echo -n "Hello, OpenSSL!" | openssl dgst -sha256

 

まとめ

OpenSSLは、Difyサーバーを安全に運用するための必須ツールです。この記事の手順で「秘密鍵」と「CSR」さえ作成できれば、どんなSSL証明サービス(認証局)にでも対応できます。

まずは openssl genrsa (秘密鍵作成) と openssl req (CSR作成) の2つのコマンドをマスターし、安全なDify環境の構築を進めましょう。

コメント

error: Content is protected !!