きんめも

語彙力がヤバイ

シュッとWoSignで証明書獲得とexpress(Node.js)でHTTPS通信をする

express-generatorで生成されたテンプレートでとりあえずHTTPS通信ができるようにすることを目標とします.

認証局は中国系SSL認証局沃通(WoSign)を使います.
WoSignは有効期限が3年間もあるのでLet’s Encryptよりも管理とかが楽だと思う.
(WoSignはこの前やらかしたけど個人用+ハッカソンのテスト用くらいなら問題ないでしょう…) <2017/1/25 追記> WoSignで新規作成された証明書はブラウザで警告が発生するようになったみたいです なのでこの記事は非推奨です。Let’s Encryptも設定が簡単になったのでそちらを使うのが良いでしょう。

WoSignで証明書を発行してもらう

ここではとにかく早く・楽にHTTPS通信を実現するために,WoSignに秘密鍵を作成してもらいます. WoSignは上記の前例もあるので,本当にセキュアな通信を必要とするならば自分で秘密鍵を作成しそこからCSRを生成すべきでしょう.

  1. WoSignの申請ページドメイン名,国,アカウント作成に必要な情報(フリーメールでも可)を入力します.

  2. myorderに申請したドメインの「Operation」がsent CSRとなっているので,そこをクリックして「Generated by system」でCSR秘密鍵の署名)や秘密鍵を自動で生成してもらいましょう.このとき入力するパスワードはあとで証明書と秘密鍵をダウンロードをする際に必要となります.

  3. 発行処理中のときは「Operation」がPendingとなるので15分くらい待つとGet Certとなるのでそこから証明書と秘密鍵をzip形式でダウンロードできます.

expressに証明書を設定する

express-generatorで生成されたテンプレートを元に説明します.

1. zipファイル中の「for Apache」を解凍.

$ unzip [さっきダウンロードしたファイル名].zip
$ cd  [さっきダウンロードしたファイル名]

$ unzip for\ Apache.zip

2. 証明書の編集

express用にサーバ証明書(2_[ドメイン名].crt)とroot証明書と中間証明書(1_root_bundle.crt)を結合します.(結合時,2と1の順番を間違えるとexpressでエラーになります)ついでに秘密鍵の名前も変えます.

$ cat 2_[ドメイン名].crt 1_root_bundle.crt > server.crt 
$ cp 3_[ドメイン名].key server_private.key

3. expressに証明書をコピー+権限の設定

まずexpressのテンプレートを生成します.(既存のプロジェクトに適用する場合は省略で)

$ express https-test 
$ cd https-test
$ npm i

今回はexpressのapp.jsがあるディレクトリにcertディレクトリを作り,そこに証明書を設置します.

$ mkdir cert

証明書設置後

$ chmod 700 cert
$ chmod 400 cert/*

4. bin/wwwの作成

certディレクトリに設置した証明書を読み込むbin/wwwを作成します.

$ mv bin/www bin/www-http
$ vim bin/www
var debug = require('debug')('web');<
var https = require('https');<
var app = require('../app');<
var fs = require('fs');<

var port = 443;
var options = {
    key: fs.readFileSync('./cert/server_private.key'),
    cert: fs.readFileSync('./cert/server.crt')
};

var server = app.listen(app.get('port'), function() {
https.createServer(options, app).listen(port);

あとはsudo npm startでサーバが立ち上がります.
(443ポートを使用で立ち上げるためsudoが必要になります)

Git2.8.1をソースコードからコンパイルしてインストール

この記事ではビルドしたいけどよくわからんから理解したいって人向けに解説を書いています.
Gitのインストールをするだけなら下の記事の方が簡潔です.

qiita.com



Gitをインストールしようとしたら,CentOS6のepelリポジトリのgitが古い.

yum list | grep git.x86

で調べてみると1.7.1−4.el7_7.1だった.(最新は2.8.1)

なのでCentOS6にGitの最新版をソースからコンパイルしてインストールすることにした.
既にyumからインストールしている場合はsudo yum remove git アンインストールしてください.

まず,[公式サイト](https://www.kernel.org/pub/software/scm/git/)からソースの最新版を確認する.
拡張子にtar.gz, tar.xz, tar.sign等があるが,tarで複数ファイルをまとめられてから(アーカイブ化),
各種圧縮された方法が違うだけなのでどれをDLしてもかわらない.なので今回はgzipで圧縮されたtar.gzをDLして展開する.

$ wget https://www.kernel.org/pub/software/scm/git/git-2.8.1.tar.gz
$ tar zxvf git-2.8.1.tar.gz
$ cd git-2.8.1

(tar の z オプションはgzipを解凍する際に使うものです.tar.gz以外のファイルをDLした人は変更してください.)

次にコンパイルしたりインストールしたりするMakefileを作成する.
Makefileは./configureで作成することができる.
./configureでGitをインストールするディレクトリを指定する.
指定方法は「--prefix=ディレクトリ名」で可能.

$ ./configure --prefix=/usr/local

ちなみに,--prefixで指定せずともデフォルトのインストール先は/usr/localなので,ただ./configureでもよかったりする.

以上でlsコマンドでMakefileを確認できると思う.
あとはmakeコマンドでカレントディレクトリのMakefileを基にコンパイルできる.
その後,make installによって--prefixで指定したディレクトリに生成したバイナリファイルをコピー(インストール)できる.

$ make
$ sudo make install

./configureでMakefileの作成については以下の記事が参考になるかも.
仕事で使える魔法のLAMP(12):configureの設定を変更してみる - @IT

インストール先のディレクトリについてはこんな記事もある.
自分でソフトウェアをビルド・インストールするときに/usrや/usr/localへインストールしない - Qiita