1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

Apache-tomcatの環境にCloudflareで作成した証明書を使用する

Last updated at Posted at 2024-04-18

個人メモ

前提条件

  • Raspberry Pi上にapache/tomcatを稼働させている
  • オレオレ証明書を使用している
  • Cloudflareでドメイン名の取得、レコードの設定を行いドメイン名でアクセスできる
  • 今回作成する証明書はCloudflare経由でしか使用できません
    (普通にWEBサーバをhttpsで公開するなどの場合には使用できません)

0.環境確認

Cloudflareにログインし証明書を使用できる環境にあるか確認する

[1/2]Proxy statusがProxiedになっている

image.png

Proxyについて
通信経路は下記のようになっている
 ブラウザ --(1)--> Cloudflare --(2)--> サーバ

  • DNS onlyになっている場合
    通常のDNSとのやり取りと同じ
    ブラウザはCloudflareにて名前解決(ドメイン名→IPアドレス取得)し、
    以降は、取得したIPアドレスを使用してサーバと通信する
  • Proxiedになっている場合
    ブラウザは常にCloudflareとやり取りを行う
    ブラウザはCloudflareにて名前解決すると、CloudflareのIPアドレスを返却される
    このIPアドレスを使用して通信すると、Cloudflareがブラウザの代わりに
    サーバとやり取りを行い結果をブラウザに返却する

[2/2]SSL/TLS 暗号化モードが「Full(strict)」になっている

image.png

暗号化モードについて
通信経路は下記のようになっている
 ブラウザ --(1)--> Cloudflare --(2)--> サーバ

  • Off
    (1)(2)どちらの経路もSSL(https)では通信しない
    ブラウザにてhttpsでアクセスした場合も、httpで通信する
    SSL証明書は不要
  • Flexible
    (1)のみhttp/httpsで通信可能
    (2)はhttp
    SSL証明書不要
  • Full
    (1)(2)ともにhttpsで通信
    ブラウザにてhttpでアクセスした場合も、httpsで通信する
    SSL証明書は必要だが、適当(オレオレ証明書等)でも問題なし
  • Full(strict)
    (1)(2)ともにhttpsで通信
    ブラウザにてhttpでアクセスした場合も、httpsで通信する
    SSL証明書は必要、CA認証された証明書か、Cloudflareで作成した証明書でないとエラーとなる

1.CloudflareでのSSL証明書生成の前準備

CloudflareにログインしHome画面を開き、対象のドメイン名をクリックし管理画面を開く

image.png

左メニューから、「SSL/TLS」>「Origin Server」を選択し、下記画面を表示する
画面真ん中あたりの青いボタン「Create Certificate」をクリックする
image.png

オプションを選択し、「Create」ボタンをクリックする
image.png

オプションの内容

  • Generate private key and CSR with Cloudflare
    → ここでキーとCSRを生成する、生成はRSA暗号(2028Byte)を使用する
  • Hostnames
    → 認証するホスト名を編集、デフォルトでOK
  • Select a validity period for your certificate
    → 有効期限の設定、デフォルトでは15年、有効期限前にCloudflare側で自動更新してくれる

SSL証明書を生成するために必要なCSRとkeyが生成されるためコピーしておく
(Private keyはこの画面を閉じると見られなくなるので注意)

OKボタンを押すと最初の画面に戻る

image.png

2.Cloudflareのルート証明書(中間証明書)の取得

必要な理由
CA → Cloudflare → 自サーバ の流れで認証証明書を利用するため
Cloudflare自身の証明書も必要となる。
(オレオレ証明書の場合、生成した証明書自身がCAになるので中間証明書は不要だった)

下記アドレスから、「Cloudflare Origin CAルート証明書」にある
「Cloudflare オリジン RSA PEM」をクリックして「origin_ca_rsa_root.pem」をダウンロードする
https://developers.cloudflare.com/ssl/origin-configuration/origin-ca#cloudflare-origin-ca-root-certificate

3.SSL証明書の設定

証明書ファイル、キーファイルの作成

Raspberry Piにsshで接続し下記コマンドを実行し証明書ファイルとキーファイルを格納するフォルダを作成する(すでにある場合は不要)

コマンド
$ sudo mkdir /etc/apache2/ssl(すでにフォルダがあれば不要)

証明書ファイルを作成する(既にファイルが格納されていれば削除等する)

コマンド
$ cd /etc/apache2/ssl
$ sudo vi server.pem(ファイル名はなんでもいい)
server.pem
(手順1でコピーした「Original Certificate」の方を貼り付ける)

キーファイルを作成する(既にファイルが格納されていれば削除等する)

コマンド
$ sudo vi server.key(ファイル名はなんでもいい)
server.key
(手順1でコピーした「Private Key」の方を貼り付ける)

手順2で取得したCloudflareの証明書「origin_ca_rsa_root.pem」を下記に保存し、
権限を他と合わせる

パス
$ sudo mv (保存パス) /etc/apache2/ssl(もしくはSFTPなどで保存)
$ sudo chmod 644 origin_ca_rsa_root.pem

Apacheの設定

SSLの設定ファイルを開く(まだApacheのSSL対応をしていない場合はこちらを参考に設定)
※人によってファイル名が異なるため注意

コマンド
$ sudo vi /etc/apache2/sites-available/default-ssl.conf

下記例では、すでにSSL証明書ファイルが設定されていたため記述を削除して追記している

default-ssl.conf
<IfModule mod_ssl.c>
        <VirtualHost _default_:443>
        ~省略~
        SSLEngine on

-       SSLCertificateFile    /etc/apache2/ssl/server.crt
-       SSLCertificateKeyFile /etc/apache2/ssl/server.key
+       SSLCertificateFile      /etc/apache2/ssl/server.pem
+       SSLCertificateChainFile /etc/apache2/ssl/origin_ca_rsa_root.pem
+       SSLCertificateKeyFile   /etc/apache2/ssl/server.key
        
        ~省略~

        </VirtualHost>
</IfModule>

設定完了後、Apacheを再起動する

コマンド
$ sudo service apache2 restart

3.SSL証明書の確認

サイトにアクセスして下記画像のところから証明書を確認
(画像ではGoogle Chromeを使用)

アドレスバー左のアイコン→「この接続は保護されています」→「証明書は有効です」
から確認可能

image.png

暗号化モードが、Full(strict)で証明書が間違ってる場合、エラー画面が表示される
ProxyがDNS onlyの場合、「保護されていない通信」と表示される

以上

1
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?