no-image

[node.js]HTTPS通信に対応させてみる(SSL-リバースプロキシ環境を構築する)

タイトルの通り。httpsのこともこれから勉強していかなければならないのかなーと思い。

きっかけはこの記事です。

『証明書を無料で発行、HTTPSの導入を支援する「Let’s Encrypt」』は何に使え、何に使えないのか – いろいろやってみるにっき

HTTPS普及を推進するプロジェクト「Let’s Encrypt」、Linux Foundation傘下に

これを見ながら10年後くらいはWeb全てがhttpsになってんじゃねーかなと思えてきて。

無料なら個人でも気兼ねなく使えますもんね。商用には辞めたほうがいい感じですけれど・・・

 

当然、証明書は所謂オレオレ証明書です。

・・・オレオレ証明書って言い方はどうなんだろうとちょっと思います。別に偽サイトじゃないのにニュアンスからそう思わせてしまうじゃないかと。

ソースコード。

URL:https://potproject.net/

※オレオレ証明書なので当然https通信に関する警告が各ブラウザで出ます。

node.jsには標準モジュールとして既にhttpsが存在します。これでencrypt関連のことは全く知らなくても使えます。

なので、最小限のコードであれば通常のhttp通信と違うところは証明書の登録をしなくてはならないという点だけです。

証明書(秘密鍵・公開鍵)に関してはopensslで生成。ここに公的機関が発行した証明書を入れ替えればすぐに使えます。

これで通信は暗号化されたわけですが、最近はSSL絡みの脆弱性がいっぱい出てきてますし、規格に関してはまだまだ変わっていくのでしょうかねー・・・

このブログもhttpsに対応させよう

せっかくなのでブログも対応させよう。

httpsに対応することで、ログイン時に盗聴されて乗っ取られることはなくなると思います。そもそもまずそんなことは起きない・・・というツッコミはさておき。
鯖自体、リバースプロキシサーバでサブドメインごとに振り分けているため、設定は結構複雑になってきます。

こんな感じで鯖の構造も変更しました。
http-node-proxy(リバースプロキシサーバ | port 80/443[外部ポート番号])
—potproject.net(Node.js | port 8080(http/https)
—blog.potproject.net(Apache | port 8081(http)/8443(https))
別途、ApacheにSSLの設定をしなくてはならないです。

と思ったんですが、リバースプロキシからの通信は暗号化する必要ないので(同じ鯖で内部ルーティングしているため)、
ネットワークからリバースプロキシまでをSSLで暗号化、
リバースプロキシからapacheの受付内部ポートまでは暗号化せずhttpで渡すようにしました。
なので、バーチャルホスト設定で8443ポートを内部ルーティングできるようにして、ApacheのSSL設定は停止しました。
Apache ssl.conf設定。ssl.confだけどSSL切ってます

node.jsプロキシサーバの設定。

こんな形に変更しました。

options[secure]はhttps -> httpsでプロキシをする時にtrueにします。今回はhttps -> httpなのでfalseです。

そしてhttpsでつながった・・・のはいいのですが、デザインが崩れて明らかにCSSやJSが読み込めていない。
調べたところ、こういう問題があるようです。
WordPress をSSL運用すると管理画面でアップロードした画像が見れない
こんな問題があるらしい。ってことはまだ治っていないのだろうか?それともテーマの問題か?
ということでSetEnv HTTPS onをssl.confに追加し、コードを組むことででちゃんと表示されるようになりました。
その後、WordPress HTTPS(SSL)プラグインを導入し、管理者ログインと画面をhttps通信化。
ちゃんと管理者画面だけhttpsにリダイレクトしてくれますのでいいですね。

https://blog.potproject.net/
※オレオレ証明書なので当然https通信に関する警告が(以下略
これでこのブログもhttpsの仲間入りですね。オレオレ証明書だしまあ多分ほとんど意味ない気がしますが・・・
Let’s Encryptの無料証明書がきたらぜひ使ってみようと思います。まあその時までこのままで。
無料のSSLならStartSSLなんか使えるという声もありますが登録めんどそうなので・・・