WEBサーバー

ELBに複数のSSLを割り当てる @AWS

以前使っていたサーバーが、以前に3日ほど通信障害で、
アボンしたこともあり、年末に切れる契約を見越して、
mixhostという、サーバーに夏頃に切り替えました。

無事、移行も済んだところで、

ある日、メールが届かなくなりました!

 

普段だと、もっと届くはずなのにと思って、
別のアドレスから送ってみると、「送信エラー」が返ってきます。

1時間の送信量がオーバーしていて、rejectされている様子。

早速、サポートにメールを入れたところ、
対応に2,3日との自動応答・・・

Gmailへの転送(フォーワード)にしていたのを、
POP3で受け、サポートから、連絡が来るのを待ったところ、
制約がかかっていたということで、解除されました。

「無料期間からの移行時に、解除できてなかった」と言っていますが、
無料期間後、数ヶ月転送出来ていました。
明確な回答もなく、自分で制御できないのも不安すぎるので、
mixhostを捨てて、AWSに移行することにしました。


さて、本題です。

1年前、AWSを使いはじめました。
最低限の機能しか、使っていませんが、

一般的には、1サーバー・1ドメインが普通だと思います。

1サーバー・複ドメインでも、もちろん運用出来ますが、
SSL化すると問題が発生します。

解決策としては、

  1. お金で解決
  2. 技術的に何とかする

です。

***

冗長性のために、サーバー2台。上にロードバランサーを置いて運用しています。

 

AWSのELB(エラスティック・ロードバランサー)には、
1つのSSL証明書しか、割当が出来ません。
お金のある人は、ロードバランサーを複数契約してもらえば、
苦労することなく、SSL化が可能なんですが、

ひと月$20もするので、SSLを付けて1つのELBで運用できる方法を探しました。

※AWSに聞いても、出来るかも。という解答で、答えはくれませんでした。今思えば、教えたくなかったのかも?!

 

Cloudfront(CDN)は、無制限でSSLを付けることが出来ます。
なので、CloudfrontのOriginをELBに指定し、SSLを割り当て運用するのですが、
ドメイントップで、Cloudfrontを作っても、Route53で割当が出来ませんでした。(1年前)

 

サブドメイン(wwwなど)を付けると、割当が出来たので、
当時は、ケツの余裕がなかったので、wwwを付けて運用してきたのですが、
今回の移行に当たり、見た目「www」邪魔なので、
試しに、もう1度、

トップドメインでCloudfrontで証明書を作り、
Route53で割当を試みたところ、あっさり割当完了!

以前は、AliasにCloudfrontの名前が出てこなかったのですが、
出来て当然のことなので、
きっと、去年の私は、何か間違っていたのかもしれません。

 

Cloudfrontに割り当て出来るSSLの上限は、10 x 10個

去年、ものすごく時間をかけて、
1つのELBにSSLを割り当てる方法を試行錯誤したのですが、
Certificate Managerの仕様に、わりと悩まされます。
というのも、1つずつSSLの証明を発行していたところ、
10個でエラーが表示されるようになりました。

回避するには、「この証明に別の名前を追加」で、追加していきます。
30ほど、まとめて登録しようとしたら、エラーに。
10+1でエラーだったので、追加できるのは 9が上限みたいです。(計10個)

しかし、不要になったドメイン証明書を個別に消すことは出来ないので、
作り直すしかありません。

しかし、11個目の証明書を作ろうとすると、余裕が無いためエラーになるので、
1つは予備として、9実質90個)が上限となります。

 

証明書を発行したら、Cloudfrontで証明書の入替え。

去年は、1つ1つDisable >> Deleteし、再作成。
Route53も再割り当てと、ものすごく面倒なことをしていましたが、
対象のCloudfrontのGeneralから、SSLを切り替えるだけでOKです。

今回、ワイルドカード証明書の発行ができることを知りました。
省略出来るのならと、
*.shoroji.com (*.shoroji.net)などと作っていったのですが、
ネイキッドドメイン(wwwなし)の場合、該当しないため、
shoroji.com (shoroji.net)の証明書も、必要となります(計4つになる)

過去に、wwwを付けて運用してきたので、
wwwなしのネイキッドで動かすためには、2つの証明書が必要になります。
www.shoroji.com リダイレクト shoroji.comで、1年ぐらいかけて、移行する必要がありそうです。
ワイルドカード指定の場合でも、ネイキッドも含めてくれたら良かったのに。

 

S3を使ったリダイレクト

WordPressだと、サイトURLをhttp://shoroji.comに書き換えれば、
勝手にやってくれますが、
S3を使ってすることが出来るようです。

S3のバケットに、www.shoroji.comを作成し、
プロパティより、Static website hostingで設定

あとは、Cloudfrontから、www.shoroji.com のエイリアスを、上記S3のバケットに割り当てるだけ。

参 >> ネイキッド・ドメインのリダイレクトをRoute53 + S3で実現する

***

初めからすべて完璧にはできません。動かないときは、イラッとしますが、
いろいろ試行錯誤を重ねていくことで、
少しづつ、理解が深まっていくのは、良いですね。

-

WordPress マルチサイトを無料でSSL化 @ロリポップ

2017年7月11日より、SSLが無料になったロリポップ

早速、手続きをしてみたのですが、思いの外カンタンでした。

***

以前は、有料でないと使えないサービスだったSSLですが、

Lolipopでは、「Let’s Encrypt」という、

アメリカ合衆国カリフォルニア州の公益法人
「Internet Security Research Group(ISRG)」が
無料で提供するSSL/TLSサーバー証明書を使用しているため、

ロリポップでも無料で、SSL化することが、出来るんですね~

 

最近は、Wordpressで運用されている方が多いと思いますが、
シングルサイトであれば、

ログイン後、設定 -> 一般より、

http:// -> https://に書き換えてやるだけでいいのですが、

.htaccessに、以下の記述を追加も忘れずに。

RewriteCond %{SERVER_PORT} !^443$
RewriteRule ^.*$ https://%{SERVER_NAME}%{REQUEST_URI} [L,R]

※shoroji.comは、別のサーバーでSSL化予定

 

さて、問題の

WordPressのマルチサイトのSSL化

強者であれば、
1つのサーバーに、複数のWordpressをインストールするような下品なことは、しないでしょう。
やっぱり、マルチサイトにしますよね?!

SSL化した場合、imgタグなど、別のURLがhttpで入っていると、

SSLの保護マークが付きません

 

lolipopで、マルチサイトを作る場合、
通常、サブドメイン+ロリッポプのドメイン(例:shoroji.hippy.jp)
を、使うことが多いと思うのですが、

  • javascript
  • CSS

のリンク先が、そのサブドメインになってしまいます。
※独自ドメインにしても、同じこと(汗

WordPressも余計なことをせず、ルート表記にしてくれたら良いのですが、
メインサイトのURL+格納場所のURLになります。

これが原因で、SSLの保護マークが付きません。

 

上記、シングルサイト同様、.htaccessでリダイレクトしてくれると
期待したのですが、そうも叶わず。

 

WordPress 4.8系にて、現在調査中ですので、今しばらくお待ちあれ。

2017年9月15日追記

サイトネットワーク管理 >> サイトより、
登録サイトの編集を行います。

このサイトアドレスには、
元々「http://xxx.hippy.jp/xxx.net/」など、
ロリポップから支給される固定のサブドメインを指定していましたが、

これを、トップドメインに変更すると、
緑色のhttpsマークが点灯しました。

imgタグを見てみると、
srcには、元のxxx.hippy.jpのURLなんですけど、
srcsetという、追加項目があり、そっちが独自ドメインになり、
画像なども、表示されました。

WordPressは、元々対応していた。
でも、運用スタイルが悪かっただけ。

このような設定にしていたのは、管理ページへのアクセスを一元化し、
パスワードの登録などを、簡略化するためでしたが、
これは、諦めたほうがいいようですね。

 

.htaccessの書き換え

non SSL

RewriteCond %{SERVER_PORT} ^443$
RewriteCond %{HTTP_HOST} xxx.hippy.jp
RewriteRule ^.*$ http://%{SERVER_NAME}%{REQUEST_URI} [L,R]

RewriteCond %{SERVER_PORT} !^443$
#RewriteCond %{ENV:HTTPS} !^on$
#RewriteCond %{HTTP:X-Forwarded-For} ^$
RewriteCond %{HTTP_HOST} !xxx.hippy.jp
RewriteRule ^.*$ https://%{SERVER_NAME}%{REQUEST_URI} [L,R]

xxx.hippy.jpをSSLから除外するようにしました。

-