ssh 公開鍵・秘密鍵を作成するとき ssh-keygen で使ってるオプション

ssh 公開鍵・秘密鍵を作成するときに ssh-keygen コマンドで使っているオプションをご紹介します。

$ ssh-keygen -t rsa -b 4096 -f ~/.ssh/example.com -C who@example.com
Generating public/private rsa key pair.
Enter passphrase (empty for no passphrase): 
Enter same passphrase again: 
Your identification has been saved in /Users/yourname/.ssh/example.com.
Your public key has been saved in /Users/yourname/.ssh/example.com.pub.
The key fingerprint is:
SHA256:bDiAA/Rpt24cM3nlrCJBrWwsYQvass4z623oDowPIMA who@example.com
The key's randomart image is:
+---[RSA 4096]----+
|o.               |
|....o            |
|oEo=.o   .       |
|=.B.o.oo+        |
|=o.* *o.So       |
|=oo + =o.        |
|=... = .         |
|+*..o .          |
|+B*.             |
+----[SHA256]-----+

-t 鍵タイプを指定する(rsa/dsa)
-b 鍵の長さを指定する
-f 出力ファイルを指定する
-C 新しいコメントを追加する

$ ssh-keygen -l -f ~/.ssh/example.com
4096 SHA256:bDiAA/Rpt24cM3nlrCJBrWwsYQvass4z623oDowPIMA who@example.com (RSA)

-l 公開鍵の情報(種別、指紋、コメントなど)を確認する

僕個人の判断としては、2048bit RSA鍵で2030年まで戦えるらしいので当分それでいいと思っています。

という意見があるので、これで良しとしてます。

参考情報

[JavaScript] 小数点以下の桁数を取得する方法

JavaScript で小数点以下の桁数を取得する方法をご紹介します。

小数点以下の桁数を取得する getDecimalPlace メソッド

/**
 * 小数点以下の桁数を取得する
 * @param {Number} number
 * @return {Number} decimalPlace
 **/
var getDecimalPlace = function(number) {
  if (typeof number !== 'number') {
    return null;
  }
 
  var decimalPlace = 0;
  var numbers = number.toString().split('.');
  if (numbers[1]) {
    decimalPlace = numbers[1].length;
  }
 
  return decimalPlace;
};

使い方

第一引数に数字を指定すると、戻り値は小数点以下の桁数が返ってきます。

var number = 1234.56789;
 
getDecimalPlace(number); // 5
getDecimalPlace('not number'); // null

[JavaScript] 指定した id, class 名を持つ全ての要素を削除する

JavaScript で、指定した id もしくは class 名を持つ全ての要素を削除するメソッドをご紹介します。

jQuery は使わずに pure JavaScript で実装しています。

指定した id を持つ要素を削除する

var removeIdElement = function(id){
  var e = document.getElementById(id);
  if (e) {
    e.parentNode.removeChild(e);
  }
};

指定した class 名を持つ全ての要素を削除する

var removeClassElement = function(className){
  var elements = document.getElementsByClassName(className);
  for (var i = 0; i < elements.length; i++) {
    var e = elements[i];
    if (e) {
      e.parentNode.removeChild(e);
    }
  }
};

自分自身の要素を削除するには、parentNode で親ノードに辿って removeChild で子ノードを削除しているところがポイントです。

参考情報

[Mongoose] model.save({ validateBeforeSave: false }) で validate をスキップできる

Mongoose 4.2.0 から model.save() のときにバリデーションをスキップするためのオプション validateBeforeSave が追加されています。

validateBeforeSave のテストコード test/document.test.js#L462-L473

validateBeforeSave オプションを利用するサンプルコードですが、mongoose のテストコードが直感的に理解できそうでした。

it('allows you to skip validation on save (gh-2981)', function(done) {
  var db = start();
 
  var MyModel = db.model('gh2981',
      {name: {type: String, required: true}});
 
  var doc = new MyModel();
  doc.save({validateBeforeSave: false}, function(error) {
    assert.ifError(error);
    db.close(done);
  });
});

Mongoose 4.2.0 からしか使えないので古いバージョンを利用しているなら早くアップデートすることをオススメします。

参考情報

[Nginx] http を https にリダイレクトする設定 & HTTP Strict Transport Security (HSTS) 対応

Nginx で http リクエストを https にリダイレクトする設定と HTTP Strict Transport Security (HSTS) の設定の2つをご紹介します。

http を https へリダイレクトする設定

以下のように return 301 https://$host$request_uri; の部分で 301 リダイレクトさせてます。

server {
    listen 80;
    server_name example.com;
    return 301 https://$host$request_uri;
}
 
server {
    # 'http2' requires nginx 1.9.5+. If using older nginx, replace with 'spdy'.
    listen 443 ssl http2;
    server_name example.com;
}

HTTP Strict Transport Security (HSTS) の設定

server {
    listen 443 ssl http2;
 
    # HTTP Strict Transport Security: tells browsers to require https:// without first checking
    # the http:// version for a redirect. Warning: it is difficult to change your mind.
    # 
    #    max-age: length of requirement in seconds (31536000 = 1 year)
    #    includeSubdomains: force TLS for *ALL* subdomains (remove if this is not what you want)
    #    preload: indicates you want browsers to ship with HSTS preloaded for your domain.
    # 
    #    Submit your domain for preloading in browsers at: https://hstspreload.appspot.com
    add_header Strict-Transport-Security "max-age=31536000; includeSubDomains; preload" always;
 
 
    # If you won't/can't turn on HTTPS for *all* subdomains, use this simpler version:
    # add_header Strict-Transport-Security "max-age=31536000;" always;
}

HSTS Preload リストへ登録する

Google では ドメインを HSTS Pre-loaded List に登録するサービス を行っています。記載された手順に従ってドメインを登録すれば、今後ブラウザとそのドメインとの間に安全でない通信は起こらなくなります。これに登録するには Strict-Transport-Security ヘッダに preload パラメータを含める必要があります。

[引用元] HTTP Strict Transport Security – Web セキュリティ | MDN

とのことなので HSTS Preload List Submission から登録しましょう。

HSTS Preload List を登録するための条件として、

  • サブドメインは指定できないのでネイキッドドメインを指定する
  • add_header で includeSubDomains を設定する

などが必要です。

今の時代 GoogleのHTTPSサイト優遇方針で待ったなし! と言われていることもあり、未対応のサイト運営者は早めに対応したほうがよさそうです。

参考情報