2016年5月アーカイブ

letsencrypt使って無料でHTTPS対応

昔ながらの人にとっては、HTTPSといえばお金がとか認証がとか実在性がとか鍵の運用がとか、いろいろ面倒だという印象があり、導入するのを避けられてきた印象が強いですが、ただ昨今は、通信路での盗み見とかなりすましとか多様な攻撃を受けるリスクが格段に増えているということもあり、常時HTTPSL化が普通に叫ばれるようになってきてます。そんな中で生まれたのが無料HTTPSサービスとも言われるletsencryptです。つい最近正式サービスに移行したので、このrarul.comも対応することにしました。

導入方法については、Let's Encrypt の使い方に丁寧に書いてあるのでほとんど困らないでしょう。CentOS6だとワナに陥りやすいですが、それも、CentOS 6 で発生するエラーの対処法なんてページがあり、いろいろ親切です。自動実行スクリプトがPythonでいろいろ依存モジュールを勝手に入れようする点が個人的にアレに感じますが、むしろそれすら自動でやってくれるので楽、という人が多いでしょう。

注意点は2つほどあって、
・有効期限が最大3ヶ月なので、「導入したら完了」ではなく「継続的に更新」する手順も確認しときましょう。
・法人格やら実在性やらまでは見ないので、信じていいのはドメインとサーバの正当性と暗号化までです。「悪意を持った人が正しく運用しているサーバ」もあるわけなので、ユーザは、HTTPSだからといってそれが信じていいサイトなのかどうかを判断しないといけないです。

私が実際に導入するときにはまったのは、
・SNI使って複数ドメインを1枚の証明書で運用する場合、Apacheの VirtualHost _default_:443 の ServerNameは別名の方じゃなくて本名の方を書く。
・ルータのポート、TCP 80だけでなく443も開けておく。
CNAMEだとダメて言いましたが、別問題ではまっていただけで、CNAMEでもよかったのかもしれない(未確認)

サーバの移行自体は問題なかったのですが、公開しているコンテンツ、一部が「http://www.rarul.com/」とハードコーディングしているせいで、コンテンツを書き換える方がはるかにめんどいなぁとかとか(特にMovable Type) httpアクセス時はRedirectを入れるにしても、httpをやめるのは難しそうです。

automountはtime(NULL)が0の時にバグる

autofs(automount)time(2)の返り値が0の時に、アクセスしたプロセスからトラップして動こうとするmountに失敗して-ENOENTが返る。少なくとも現時点の最新版のv5.1.1で起こる。

automountには「最後にmountしようとして失敗した時からN秒間は再度のmountのトライをせずに抜けてくる」という判定をする箇所があるが、この「時刻になるまでは再度のmountトライをしない」の時刻の初期値が0になっている。なので、time(NULL)が0の時、automountは「まだ再度のmountトライをするような時刻じゃない」と判断して、すぐにエラーを返す。

バグの直し方は、簡単なように見えて厳密には難しい。time(2)の返り値はtime_t型だけど、time_tのビット幅やsignedやはPOSIX的には定義されていないようなので、0より小さい値を入れるのが可能かがわからない。なので、0を特別な値として扱うようにするような直し方が考えられる。けどオーバフローして0になった場合とかとかいろいろめんどい。まぁそもそもtime_tがオーバフローするような環境だと他にもっと重大な問題が起こりそうだけど。(わからない人は2038年問題でググって。)

まぁ幸いにも、Linuxの今時の32ビットCPUアーキではtime_tはlongでsignedの64bitなので、0ではなく-1あたりに初期化するよう直せば問題なさそう。・・・てかそれ以前にautomountはLinux前提だからあまりUNIX標準を考えなくてもいいのかもしれない。

このアーカイブについて

このページには、2016年5月に書かれたブログ記事が新しい順に公開されています。

前のアーカイブは2016年3月です。

次のアーカイブは2016年6月です。

最近のコンテンツはインデックスページで見られます。過去に書かれたものはアーカイブのページで見られます。

月別 アーカイブ

ウェブページ

Powered by Movable Type 5.2.13