August 25, 2005
Daylight Saving & Movable Type
最近気付いたのだけど、どうも TypeKey 認証がうまくいっていない。コメントをする際にサイン・インしようとすると以下のようなエラーが出た。
Google 検索したところ以下のような記事がヒット。
"MTのTypeKey認証で「The validation failed」エラー"(以下一部抜粋):
あるときからこのMTで、TypeKeyの認証をして戻ってきたら「The validation failed」というエラーが出て認証に失敗してコメントができなくなっていたので、それについてずっと調べていたがやっと原因がわかった。
ネットでこの問題を検索してみると、いろいろな場合があって、主に下記のようなことが原因なのが多い。
1 MTのバージョンに依存した問題
lib/MT/Utils.pmのdsa_varifyの1275行目付近のif文で
if ($has_crypt_dsa && 0) {
となっている「&& 0」を取ると直る
2 個別アーカイブのテンプレートで、typekeyへ飛ばすURLで、v=1.1というのがある/ないの問題
3 lib/MT/Utils.pmのperl_sha1_digestが上手くいかない問題
4 lib/MT/App/Comments.pmの$SIG_WINDOWの値が短かすぎる(デフォルト10分)問題
1、2と順にチェックしたが問題は解決されず、3について調べるのウザイな〜と思っていた矢先にあることに気付いた。少し前から気になっていたのだが、エントリーやコメントの投稿時間、ちょっとずれてない?
先ほどの記事を再びくまなく読んでみる。
いろいろと変数をえんやこらとダンプしてデバッグしたところ、このTypeKeyの認証は時間を測ってある一定時間内(これが10分)に認証処理が完了しないとエラーを出す仕様になっているらしく、それを判定する基準となるサーバの時計がズレているために問題が起っていた様です…。
ムム・・・福華の問題もこれっぽくないか?
新規エントリーの作成ページに移り、作成日時を確認すると約1時間強のズレを確認。正確にはサーバの時計から"UTC +9(日本標準時間)"の時間計算の結果が実際より1時間10分程進んでいることになる。福華の使っているサーバはアメリカ西海岸にあるので、その時差は17時間であるはずだが、なぜか18時間として計算しているみたい。
ん〜、夏時間の関係とか?でも夏時間なら時差は16時間だし・・・やっぱりよくわからないけど、でもローカルで TypeKey 認証を試してみたら問題なかったのだから、時間のズレが原因である可能性は高い。
早速サーバの Admin にチャットで接触、挨拶もそこそこに「お前のサーバの時計ズレてるよ!」っていきなりちょっとキレ気味の福華。ガマン強い Admin は一言「待ってて」と言った後、すぐに「OK、直したよ」と言ってくれたのだが、確認してみたところ時差は変わってない。
「まだズレてるよ」(福華)
「オレのサーバの時計がズレるわけない、ズレてんのはお前のコンピュータだ」(Admin)
「(ムカッ)福華のコンピュータがズレるわけないじゃん」(福華)
「なんか設定間違ってんじゃないの?」(福華)
「俺のntpdが間違ってるわけない、ちゃんと毎朝2時に確認するようになってんだぞ」(Admin)
「でも今そっちは夏時間だよね?そういうのって関係ないの?」(福華)
「・・・・・・おぉ、確かに。よく気がついたね福華ちゃん。(ちょっと小馬鹿にした言い方)じゃぁ Google で"Daylight Saving Movable Type"って検索してみなよ。僕今友達のコンピュータで仕事中だからまた後でね」(Admin)
逃げられた・・・。
というわけで今度は"Daylight Saving"と"Movable Type"で Google 検索したところ、
"Movable Typeの投稿が1時間ずれる問題の直し方"(以下一部抜粋):
アメリカがサマータイムになって、Movable Typeに投稿した時間が
1時間ずれるようになったのですが、私だけに起きているわけでも
ないようなのでちょっとMovable Typeのソースをのぞいてみました。
この記事を参考に、lib/MT/Util.pm を編集。
$offset += 1 if (localtime $ts)[8];
↓以下のようにコメントアウト
#$offset += 1 if (localtime $ts)[8];
これで一応時間のズレは直った。でもまだ10分くらいずれてんだけどなぁ・・・絶対サーバの時間間違ってるよ。
でもこれでTypeKey認証のエラーも直ったかもしれないと思ったらまだ甘かった。
上記の引用にもあったように、TypeKey認証は一定の時間内に認証が行われなかった場合にエラーを返すのだが、これの初期設定の値が10分とある。現在のサーバの時計のズレが約10〜15分程度て感じだから、このままだと認証がいきなりエラーで返されてしまうってことなの?ということは、ここで最初の引用の4に戻って、lib/MT/App/Comments.pmを編集してみてはどうだろう。最大15分のズレがあるのだから、認証処理にかける時間を10分から20分に変更とか?
# lib/MT/App/Comments.pm を開き、
my $SIG_WINDOW = 60 * 10;
↓以下のように変更
my $SIG_WINDOW = 60 * 20;
早速テストした結果、動いた!動いたよー!!
って全然根本的な解決になっていないように思えるけど、もー動けばイイヨめんどくさい。
投稿者 elektr0pank : 2005年08月25日 14:08
トラックバック
このエントリーのトラックバックURL:
http://www.f9k-a.com/cgi-bin/MT/mt-tb.cgi/64
このリストは、次のエントリーを参照しています: Daylight Saving & Movable Type:
» TypeKeyサインインが出来なかった問題への対処 from R-Stone
HINAGATAを使って作り直した小室哲哉MixographyとTRF Fan'... [続きを読む]
トラックバック時刻: 2005年09月11日 17:24



コメント