VPN CafeではCloudflareを使っているため、オリジンサーバー側で証明書を用意しなくてもHTTPS化は簡単に実現できます。とはいえ、HTTPS化しないとうまく動かないWordPressプラグインなどがあるため、VPN Cafeのオリジンサーバー側は自己証明書を使ってHTTPS化しています。
本記事では、3分ほどでHTTPS化させる方法を解説します。
大前提として、CloudflareでオリジンサーバーのIPアドレスを隠したい場合、Cloudflareを通過しない通信は拒否し直アクセスを防ぎます。直アクセスを禁止する方法は次の記事で解説しています。

なお本記事では、Ubuntu 24.04 + apache2の環境を想定しています。
自己証明書を作成する
ブラウザがアクセスするのはCloudflareのエッジサーバーなので、必ずしもオリジンサーバー側で市販の証明書やLets's Encryptのような無料の証明書を使う必要はありません。更新が面倒なので、わたしは自己証明書を使っています。
これから解説するサーバー側の作業はすべてrootで実行しています。一般ユーザーで作業する場合は適宜sudoコマンドを使ってください。
openssl genrsa 2048 > server.key
openssl req -new -key server.key > server.csr
コマンドを実行すると、設定内容を入力する画面がでるのですが基本的にエンターキーを押すだけでOKです。もちろん”Country Name”の箇所で”JP”などと正しく入力しても構いません。
ただし、1点だけ注意したいのは、もしもオリジンサーバーを隠したい場合は”Common Name (e.g. server FQDN or YOUR name)”の箇所へ律儀に正しいFQDNを入力しないでください。次の例では”hogehoge”と入力しています。
ただし、1点だけ注意したいのは、もしもオリジンサーバーを隠したい場合は”Common Name (e.g. server FQDN or YOUR name)”の箇所へ律儀に正しいFQDNを入力しないでください。次の例では”hogehoge”と入力しています。
# openssl req -new -key server.key > server.csr
You are about to be asked to enter information that will be incorporated
into your certificate request.
What you are about to enter is what is called a Distinguished Name or a DN.
There are quite a few fields but you can leave some blank
For some fields there will be a default value,
If you enter '.', the field will be left blank.
-----
Country Name (2 letter code) [AU]:
State or Province Name (full name) [Some-State]:
Locality Name (eg, city) []:
Organization Name (eg, company) [Internet Widgits Pty Ltd]:
Organizational Unit Name (eg, section) []:
Common Name (e.g. server FQDN or YOUR name) []:hogehoge
Email Address []:
Please enter the following 'extra' attributes
to be sent with your certificate request
A challenge password []:
An optional company name []:
#
これはShodanのような検索エンジンで証明書検索をされた際、ヒットしないようにするための対策です。Shodanは証明書のコモンネームを検索することができるため、もしもCloudflareでIPアドレスを隠している場合にHTTPS化したいのであれば、上記のように正しいFQDNではなく適当な名前にした方がよいです。

IPアドレスを隠す必要がない場合は正しいFQDNを入力しても構いません。どちらにしても自己証明書なのでWEBサイトの表示に影響はないです。
次のコマンドを実行します。毎年更新する気はないので、有効期間は10年にしています。
# openssl x509 -days 3650 -req -sha256 -signkey server.key < server.csr > server.crt
これで完了です。
Apache2に自己証明書を適用する
先にmod_sslを有効化しておきます。
# a2enmod ssl
/etc/ssl配下に”certs”と”private”というディレクトリがあることを確認してください。
# ls /etc/ssl/
certs openssl.cnf private
#
先ほど作成した証明書と秘密鍵をそれぞれ配置します。
# cp server.crt /etc/ssl/certs/
# cp server.key /etc/ssl/private/
ファイルを配置したら設定を変更します。”/etc/apache2/sites-available/default-ssl.conf”をエディタで開いてください。
31行目と32行目くらいに”SSLCertificateFile”と”SSLCertificateKeyFile”を設定する箇所があるので、証明書と秘密鍵を配置したパスに変更します。
SSLCertificateFile /etc/ssl/certs/server.crt
SSLCertificateKeyFile /etc/ssl/private/server.key
この時点ではこの設定が有効化されていないはずなので、次のコマンドを実行します。
# a2ensite default-ssl.conf
実行すると次のように表示されるはずです。
# a2ensite default-ssl.conf
Enabling site default-ssl.
To activate the new configuration, you need to run:
systemctl reload apache2
#
このコマンドを実行すると”/etc/apache2/sites-enabled/default-ssl.conf”にシンボリックリンクが作成されます。
最後にApache2で設定を読み込みます。
# systemctl reload apache2
サーバー側の作業はこれで完了です。
Cloudflare側の設定
画面左メニューの[SSL/TLS]をクリックして、矢印で示している[設定]ボタンをクリックします。

次に赤枠で囲った「フル」を選択して[保存]ボタンをクリックします。自己証明書を使っているので「フル(厳密)」選択すると通信できなくなりますから注意してください。

これでCloudflareとオリジンサーバー間がHTTPSで通信するようになりました。以上ですべて完了です。
コメント
コメント一覧 (2件)
お世話になっております。以前のサイトを参考にして自分でvpsを借りていろいろ勉強してるのですが、vpsを借りてすぐにクラウドフレアを登録したところurlscan.ioやその他のサイトで自分のドメインを検索してもすべてクラウドフレア経由になっておりました。しかしshodanで自分のipを逆引きするとドメインがヒットしていました。新しいvpsを借りてこのページを参考にすれば、逆引きしてもヒットしないようにできるのでしょうか。どこで躓いたのか自分でもよくわからなくなっております。
コメントありがとうございます。
>shodanで自分のipを逆引きするとドメインがヒットしていました
shodanで「ip:192.168.2.1」のようにIPフィルターで検索してみたらドメインが表示されたということでしょうか。
CloudflareのようなCDNサービスを利用しているサイトのオリジンIPアドレスを特定する手法はいくつかあります。
よく参照される情報は以下のようなものです。
1.SSL証明書
2.Favicon
3.HTMLタグ(Titleなど)
4.GoogleのタグIDなど
これらの情報取得を防ぐには2つの防御策が必要です。
第1にSSL証明書からドメインにつながる情報を取得させないこと。
これは本記事で解説している方法で対策できます。
第2にCloudflareを経由せず直接アクセスさせないこと(IPアドレス指定でアクセスさせない)。
これは次の記事をご覧ください。
http://133.18.111.204/cloudflare-origin-protection/