2010/12/20

hg push basic-auth web push_ssl

調べるの 2 回目だったので書いとく。入門Mercurialにも書いてあったら御免なさい。


Mercurial を web ui 経由で push するには
[web]
allow_push = blooper
push_ssl = false
とか書けばいいって
PublishingRepositories - Mercurial
に書いてありました。

つーかその他、複数の repository をまとめて提供する方法とか
色々書いてあるからまた後でよーく読もうと思います。

hgweb.wsgi とか hgwebdir.wsgi とかあるけど
hgwebdir.wsgi がどこで提供されてるのか良く分からん。
と思ったらmodwsgi - Mercurial書いてあった。
WSGI さえ使えればあとは
from mercurial import demandimport; demandimport.enable()
from mercurial.hgweb.hgwebdir_mod import hgwebdir

application = hgwebdir('/var/www/vhosts/hg.example.net/cgi-bin/hgweb.config')
っての用意して
hgweb.config に提供したいもの書けばいいらしい。
楽チンだ。

2010/11/25

bash 変数 改行

情弱なので shell script とか書けません
コマンドの結果とっといて調べて必要なら出力しようと思いました
$ diff=`diff -u a b`
$ if [ $diff != '' ]; then echo $diff; fi
みたいなね
そしたら結果が
--- a 2010-11-25 01:07:18.017333910 +0900 +++ b 2010-11-25 01:07:29.313422799 +0900 @@ -1,4 +1,4 @@ a -b c d +e
って感じで改行無くなっちゃったの

どーすんだかなー、と思ってググりました
bashなどのシェル変数の値に改行を含める事は可能でしょうか? - Linux系OS - 教えて!goo
教えて!goo かぁ、情弱にはぴったりな感じです

つわけで、変数を "" で括って解決してしまいました
切ない

2010/11/03

django file download

ひさ〜しぶりに Django で作ってあったものをいじりました。
str で持ってるデータをダウンロードしてもらいたくって
どうするのかな〜と思ってググってみると

Generating file to download with Django - Stack Overflow
もぉほんと、Stack Overflow と結婚しちゃえばいいのに

上のページは
「Zip file を実ファイル作らずに何とかしたい」
っつー話だったようですが
def download(request):
zip_string = (何か zipped なデータ)
response = HttpResponse(zip_string, content_type='application/zip')
response['Content-Disposition'] = 'attachment; filename=myfile.zip'
return response
みたいにすればいいみたいでした。
みたいってのは content_type を HttpResponse の引数に渡して
Content-Disposition で filename など指定してあげること。

なんか、今更そんなこと調べてるのか! って感じですね、

2010/10/26

getpass python username

Google History は便利ですねぇ。
以前は Firefox の履歴から Google で検索したものを、
じゃなかった、ググったものを抜いてネタ探してたんですが、
今ではすっかり Google History です。

で、暫くサボってたんで記憶も曖昧になってるんですが
getpass python username で検索してるんですよね

何したかったかっつーとそれは覚えてて
getpass は key input 隠して入力取ってくれるけど
入力見せつつ prompt 出して入力取ってくれるの無いの?
って思って

でね、あるわけですよ、raw_input って関数が、だから、
import getpass

print "%s\t%s" % (raw_input('user: '), getpass.getpass('passwd: '))
こんなことすりゃいいんですよ

でね、これは覚えてるんだけどどのページ見て raw_input に辿りついたのか
もしかしたら何か適当にソースを読んだのかもしれないし
どっかページを見たのかもしれないし
それが思い出せんのです

いや〜、こまった
歳が

2010/10/10

tokyocabinet

Tokyo Cabinet を使ってみよー、と思ったんですが
ググってみても
データベースマネージャ Tokyo Cabinet
まぁご本家が一番お詳しいわけですよ

と思ってインストールしようとしたら若干はまりまして
  • 32bit 環境だったら --enable-off64 付けましょう
というのが教訓でした

で、どうせならこれを TokyoTyrant からと思って
ディスク多めだった FreeBSD のサーバから、と思ったらまたはまって
  • FreeBSD だったら gmake 使って build

というのが結論でした

更に、データほ他マシンに移動させると
5: invalid meta data
って怒られたりするの。
  • --enable-swab っていう configure option もあるぞ
まじでー

dbm かわいいなぁ

メモリが 16GB くらいあるマシンが欲しいっす

2010/10/05

cryptoapi aia windows-98

cryptoapi というのはここでは Windows API の暗号のやつを想定
AIA は Authority Information Access の略
Authority Information Access は X.509 などの機能拡張
X.509 は公開鍵証明書の規格の名前
で Windows 98 は Microsoft の OS の名前

で、やっぱ AIA ですよね、何それ? っていうの
http://www.ipa.go.jp/security/rfc/RFC5280-04JA.html#042201 見ると
その証明書の認証局の証明書が入ったりするみたいです。

で、ここで我らが Microsoft さんの登場です。
いつも知らないところで色々してくれてる Microsoft さん。
CryptoAPI で証明書を検証するときにも AIA をちゃんと見てくれて
手元に指されてる証明書が無かったら取ってきてくれたりするんです。

えー、まじでー

っていうのを検索した結果の「暗号と PKI の基本」には書いてあります

にしても「RFC 5280」にしても「暗号と PKI の基本」にしても
長い
引用しようと思ったけど必要なとこ含ませると長くなっちゃって
そんなダラダラ引用しても仕方ないから引用しませんでした
なんかもーこっとさっくり言えないもんすかねぇ

で、Windows 98 ですよ、検索語句にも含めた
Windows 98 でもそうなのかどうか? が良く分からず
検索自体は空振りに終わってしまいました
実機検証でもできたらいいんですが...

Windows 98 ってどうやったらいま動かせるの??
CD はあるんですが boot disk が見当たらず
FreeDOS と仮想化技術で何とかならないのかなぁと思うんですが
面倒ですね、Windows 98 までそこまでするか??

いかん、Microsoft の話してるのに愚痴が多くなってしまった

2010/09/23

diffie-hellman dhe

なんか、質問受けてたんですよね、きっと
DH と DHE って何が違うの? って話になったんで検索しました

夜でもアッサム: SSL(TLS)のDHとDHEの違い
なんかもぉ、しっかり書いてありましたよ
  • DHEのEは、EphemeralのE。
  • DHEは、DHパラメータを通信時に動作に作成する。
  • DHは、DHパラメータは証明書に書かれている物を使う。よって、static DHとも呼ばれる。
  • DH-RSAは、証明書にCAがRSAで署名したという事。証明書にRSA鍵が入っているわけではない。
  • DHE-RSAは、証明書にRSA鍵が入っている。


でね、気になるので原典をあたるわけですよ、
英語だと辛いから和訳ですけど
The TLS Protocol Version 1.0
DH は、認証局(CA)によって署名されたサーバー証明書に含まれているDiffie-Hellman パラメータを使用した暗号スイートを示すものである。DHEは、CA によって署名された DSS またはRSA証明書により署名されたDiffie-Hellmanパラメータを使用した一時的 Diffie-Hellman を示すものである。使用される署名アルゴリズムは、DHまたは DHEパラメータの後に指定される。
おぉ、なるほど、これだ

この前後に、大量の CipherSuite が記載されています。
抜粋すると
CipherSuite TLS_RSA_WITH_RC4_128_MD5 = { 0x00,0x04 };
CipherSuite TLS_RSA_WITH_RC4_128_SHA = { 0x00,0x05 };
CipherSuite TLS_RSA_WITH_3DES_EDE_CBC_SHA = { 0x00,0x0A };
CipherSuite TLS_DH_DSS_WITH_3DES_EDE_CBC_SHA = { 0x00,0x0D };
CipherSuite TLS_DH_RSA_WITH_3DES_EDE_CBC_SHA = { 0x00,0x10 };
CipherSuite TLS_DHE_DSS_WITH_3DES_EDE_CBC_SHA = { 0x00,0x13 };
CipherSuite TLS_DHE_RSA_WITH_3DES_EDE_CBC_SHA = { 0x00,0x16 };


SSL/TLS って何をしてるかってーと
  • サーバ(とクライアント)の認証
  • 通信の暗号化
  • 通信の改竄検知
でした。で、それぞれ
  • 証明書(=身元情報+公開鍵+それらの認証局による署名)と公開鍵に対応する秘密鍵を持ってること
  • 外部とは秘密に交換した情報を鍵とした暗号化
  • 外部とは秘密に交換した情報を鍵とした HMAC
で実現してました。

何が大切かっていうと「信頼できる相手」と「鍵交換」できるってことね

TLS_RSA_WITH
鍵交換に使える RSA 証明書があるんで、秘密鍵持ってることを確認して認証して、証明書の鍵で鍵交換
TLS_DH_???_WITH
DH 証明書があるんで、鍵交換で同じもの共有できると秘密鍵の所有も確認できるんで認証もできる。??? ってのは証明書の署名。
TLS_DHE_???_WITH
鍵交換には使えないかもしれない? RSA/DSS 証明書があるんで、秘密鍵持ってることを確認して認証して、公開鍵で署名した DH の鍵なら信頼できるんでそれを使って鍵交換。??? は、何だ? 証明書の公開鍵か? 署名か?


かな、ちょっと想像入ってるけど。
分からない部分もあるけど。

っていうか鍵交換に使える RSA 証明書しか見たことないし
TLS_RSA_WITH だけで許してもらえるよね、きっと。