MultiX.jp

MemoRandom

030525 : FreeSSL

 SSL(httpsプロトコル)を利用するには、ルート証明機関からサーバ証明書を拾得しなければなりません。が、これの年間維持費はだいたい500ドルくらい掛かります。ADSL自前鯖でSSLをサポートしようとするとこのコストが一番の壁。ところが電話(携帯可)があれば無料で正規の(USERTrust発行の)証明書を貰えるサービスが世の中にはあったりします。それが「FreeSSL」http://www.freessl.com/。以下には http://pc2.2ch.net/test/read.cgi/php/1016169881/38-56 での投稿内容をまとめておきます。

  1. http://www.freessl.com/ へいって“Order NOW!!”
  2. CSR(証明書の元)を作ってフォームにはりつけて "Next"
    openssl を使ってCSRを作る方法は以下の通り。
    1. まずRSAキーを作る。これが証明書に押される自分のハンコがわりになる。
      % openssl genrsa -des3 -out hogehoge.key 1024
      “-des3”ってつけるとパスフレーズを聞かれるんで適当に打つ。証明書を使う時には必ずこのパスフレーズが必要になるんで注意。Apache 立ち上げる時にも聞かれるんで、PC起動時にはコンソールに貼り付く必要アリ。“-des3”付けないと暗号化されないんでそんな必要はなくなるけど、証明書と対になるRSAキーを取られるだけでその証明書を誰でも使えるようになる。(あんまりお薦めできない)
    2. CSRの作成
      % openssl req -new -key hogehoge.key -out hogehoge.csr
      なんか英語で質問されるんで適当に答えること。質問と典型的な答えは以下の通り。
      • 国名2文字("JP")
      • 都道府県名("Tokyo"とか)
      • 市町村名("Chiyoda-ku"とか)
      • 会社・団体名("AKIBA DQN KAI"とか)
      • 部署名("FAT OTAKU GROUP"とか)
      • 証明したいモノ(ホスト名なら"fat.akiba-dqn.jp"とか)
      • メールアドレス("otacky@akiba-dqn.jp"なんてね)
      できあがった hogehoge.csr の中身(テキスト)を form にコピー。
  3. CN(証明したいURL)が出てくるので正しければ“Next”
  4. 責任者の名前、メールアドレス、電話番号を記入する。他にも技術責任者とか経理とかの名前を書く欄があるけど、全部上に同じにすればよい。
  5. 認証に使う電話番号を入力(携帯も可)。国選択もあるので Japan を選択。
  6. 認証の電話の手順が表示されて、電話を掛けるボタンが出てくる。
  7. ボタンを押すと暗証番号が表示されて、本当に電話が掛かってくる…!
  8. 電話には #, [暗証番号]#, [音声で自分の名前]# で答えて終了。
  9. しばらくして CRT(Web Server Certificate)がメールで送られてくる。(数分程度)
  10. CRT ファイルと秘密鍵ファイルを入れるディレクトリを作成。(Apache2での例)
    mkdir /usr/local/apache2/conf/ssl.crt
    mkdir /usr/local/apache2/conf/ssl.key
  11. RSA秘密鍵ファイル(ここでは、hogehoge.key)を上記の秘密鍵のディレクトリにコピー。
    cp hogehoge.key /usr/local/apache2/conf/ssl.key/
  12. FreeSSL から送られてきた CRT を hogehoge.crt として保存。
    cat > /usr/local/apache2/conf/ssl.crt/hogehoge.crt
    (ターミナルに CRT をコピペ)
    -----BEGIN CERTIFICATE-----
    MIID/zCCAuegAwIBAgIEAIW1CTANBgkqhkiG9w0BAQQFADCBozELMAkGA1UEBhMC
    (中略)
    yMtv+gZCk8O1DI6x9jXI44axqw==
    -----END CERTIFICATE-----
  13. /usr/local/apache2/conf/ssl.conf を修正。(Apache 1.x + mod_ssl の場合は、httpd.conf だと思う)
    SSLCertificateFile と SSLCertificateKeyFile に、上でコピーした CRT および秘密鍵ファイルのフルパスを書く。その他、ServerName とか ServerAdmin とかも適宜修正。
  14. Apache が動いていたら、いちどストップさせる。
  15. SSL 付の Apache を起動。
    /usr/local/apache2/bin/apachectl startssl
    (start じゃなくて、startssl)ここで、鍵を作ったときに設定したパスフレーズを入力。パスフレーズがあっていれば起動する。
  16. https://hogehoge として、アクセスできるか確認。一般の SSL サーバと同じように、暗号化がどうのこうのというダイアログが現れて無事出来れば、設定完了!

 で。これは一応試験サービスという位置付けらしく、年間35ドルの格安コースが主力商品らしい。手順は同一でクレジットカード関係の入力欄が増えているだけ。(03/05/25時点では“Order NOW!”のボタンが見つからなくなっている)

030525 : 2chトリップ

 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] の値がおなじ間は変化しない(再利用する)こと。
Last-Update: February 15, 2004 ©2003 ASKN, MultiX.jp