まずはWin32 OpenSSLをゲット


Shining Light Productionsで「Win32 OpenSSL v1.0.1g Light」と「Visual C++ 2008 Redistributables」をダウンロード。
ここでOSが64Bit版だからといって、Win64版をダウンロードすると後でハマリますので、必ずWin32版の方をダウンロードしてください。
(2014/5/11時点では、Win64版はエラーが出て、rand.datの時点で0バイトのファイルしかできない)
(今後もっと新しいバージョンのものが出ると思いますので、もっと新しいのがあれば必ずそれを利用するようにしてください。)

Win32 Open SSLのインストール


先にVisual C++ 2008 Redistributables(vcredist_x86.exe)をインストールしておく。(2014/6/24追記:英語版で!)
その後、Win32 OpenSSL v1.0.1g Light(Win32OpenSSL_Light-1_0_1g.exe)をインストール。
image001Visual C++ 2008 Redistributablesをインストールしておいたにもかかわらず、「見つけらんなかったんですけど!」みたいなアラートが出てくるけど無視。
回避できる人教えてください。(;´Д`)

友人の金子徹哉氏から「英語版のVisual C++ 2008 Redistributablesならエラーでないよ」との報告がありました。
さすがシステム屋。
なるほど。(;´Д`)

なんとなくこっちを選択

image002よく分からなかったけども、ここはなんとなく「The OpenSSL binaries (/bin) directory」を選択してみました。
このあと寄付しろって画面になるので「Finish」をクリックし、開いたブラウザにてPayPalで寄付する、もしくはそっと閉じる。
(注:画像はWin64版です。すみません。直すのが面倒でした。)

Windowsの設定


コントロールパネル→システム→システムの詳細設定→システム環境変数→Pathに

;c:\OpenSSL-Win64\bin

を追加。
「システム環境変数」の下の「新規」をクリック。
変数名を「OPENSSL_CONF」
変数値を「C:\OpenSSL-Win32\bin」
に設定してOKをクリック。
Windows再起動。

SSLの秘密鍵、証明書作成


Windowsのコマンドプロンプトで

cd C:\OpenSSL-Win64\bin

次に

openssl md5 * > rand.dat

で疑似乱数生成。(エラーは出るがファイルはC:\OpenSSL-Win64\binにできている)

openssl genrsa –rand rand.dat –des3 2048 > key.pem

で秘密鍵ファイル生成。(パスフレーズは適当に決めてください。)

openssl req –new –key key.pem > server.csr

でCSR作成。
CountryNameだけJPって書いたけど、あとは面倒なので全部エンターキーで流してしまいました…。(;´Д`)

openssl x509 –req –signkey key.pem < server.csr > crt.pem

で証明書完成。(エラーは出るがファイルはC:\OpenSSL-Win64\binにできている)
key.pemとserver.crtをapp.jsのあるフォルダにコピーして終了。
rand.datは削除しておいてください。

node.js側の設定


app.jsでは、

var https = require('https');
var options= {
	key: fs.readFileSync('key.pem'),
	cert: fs.readFileSync('crt.pem'),
	passphrase: 'さっき決めたパスフレーズ'
};
https.createServer(options, app).listen(app.get('port'), function(){
  console.log('Express server listening on port ' + app.get('port'));
});

とまぁこんな感じにしておくと大丈夫です。

ブラウザでアクセス


これでnode.jsを動かしておいて、ブラウザでアクセスすると、
image003こんな感じの表示が出ますが、「このまま続行」をクリック。
これで以後httpsで通信できるようになります。

オレオレ証明書なんで仕方ない

なお、URLの表示されているところが
image004
って表示になっていますが、オレオレ証明書なんで仕方ありません。(´・ω・`)

今日はこんなところ。
これでかなり時間とられちゃいました。orz