SSL(httpsプロトコル)を利用するには、ルート証明機関からサーバ証明書を拾得しなければなりません。が、これの年間維持費はだいたい500ドルくらい掛かります。ADSL自前鯖でSSLをサポートしようとするとこのコストが一番の壁。ところが電話(携帯可)があれば無料で正規の(USERTrust発行の)証明書を貰えるサービスが世の中にはあったりします。それが「FreeSSL」http://www.freessl.com/。以下には http://pc2.2ch.net/test/read.cgi/php/1016169881/38-56 での投稿内容をまとめておきます。
% openssl genrsa -des3 -out hogehoge.key 1024“-des3”ってつけるとパスフレーズを聞かれるんで適当に打つ。証明書を使う時には必ずこのパスフレーズが必要になるんで注意。Apache 立ち上げる時にも聞かれるんで、PC起動時にはコンソールに貼り付く必要アリ。“-des3”付けないと暗号化されないんでそんな必要はなくなるけど、証明書と対になるRSAキーを取られるだけでその証明書を誰でも使えるようになる。(あんまりお薦めできない)
% openssl req -new -key hogehoge.key -out hogehoge.csrなんか英語で質問されるんで適当に答えること。質問と典型的な答えは以下の通り。
mkdir /usr/local/apache2/conf/ssl.crt mkdir /usr/local/apache2/conf/ssl.key
cp hogehoge.key /usr/local/apache2/conf/ssl.key/
cat > /usr/local/apache2/conf/ssl.crt/hogehoge.crt (ターミナルに CRT をコピペ) -----BEGIN CERTIFICATE----- MIID/zCCAuegAwIBAgIEAIW1CTANBgkqhkiG9w0BAQQFADCBozELMAkGA1UEBhMC (中略) yMtv+gZCk8O1DI6x9jXI44axqw== -----END CERTIFICATE-----
/usr/local/apache2/bin/apachectl startssl(start じゃなくて、startssl)ここで、鍵を作ったときに設定したパスフレーズを入力。パスフレーズがあっていれば起動する。
で。これは一応試験サービスという位置付けらしく、年間35ドルの格安コースが主力商品らしい。手順は同一でクレジットカード関係の入力欄が増えているだけ。(03/05/25時点では“Order NOW!”のボタンが見つからなくなっている)
2chで使われているトリップ(ひとりキャップ)は、投稿前でも事前に知ることができます。名前欄中の「#」文字以降を次の Perl スクリプトに通しましょう。
#!perl -w # 2chtrip.pl die( sprintf "usage: %s <tripkey>\n", __FILE__ ) unless @ARGV; my $tripkey = $ARGV[0]; my $salt = substr substr( $tripkey, 1, 2 ) . "H.", 0, 2; $salt =~ tr{:;<=>?\@[\\]^_`}{ABCDEFGabcdef}; $salt =~ s{[^./0-9A-Za-z]}{.}g; my $trip = substr crypt( $tripkey, $salt ), -10; printf "◆%s", $trip; 1; __END__
2ch の cript 関数は 56bitDES です。MD5 で実装されてたら当然結果は違います。
実際にこれを他の CGIに実装する場合は、名前中の「◆」は「◇」に置換するといった偽称対策が要ります。むしろ表示の際に「◆」の代わりに「#」を使ったほうが簡単でしょうね。トリップキーを取り出す時点で「#」は名前中から既に取り除かれてるはずですから。
ついでに、2ch の ID表示はこんな感じ。
use Digest::MD5; use Digest::MD5 qw(md5_hex); sub get_2ch_id { my $bbskey = shift; my $rand = shift; my $ip = $ENV{'REMOTE_HOST'}; my $day = ( localtime )[3]; my $md5 = Digest::MD5->new(); my $ipmd5 = substr( md5_hex( $ip ), -4 ); $md5 -> add( $ipmd5 ); $md5 -> add( $bbs ); $md5 -> add( $day ); $md5 -> add( $rand ); my $id = substr( $md5->b64digest, 0, 8 ); return $id; } # printf "ID:%s", &get_2ch_id( 'bbskey', 'rand' ); # # bbskey は板の名前 # rand は /dev/rand から読み出した16バイトの乱数文字列 # ただし ( localtime )[3] の値がおなじ間は変化しない(再利用する)こと。