Pistolfly のすべての投稿

Software Engineer in Tokyo, Japan

OpenSSLコマンドで証明書のチェック

発行したSSLサーバ証明書と中間CA証明書を実際にApache等にインストールする前に、正しいかどうか検証したいことがある。
その場合は、OpenSSLのopensslコマンドで検証することができる。

openssl s_serverでサーバを起動

s_serverは、リモートのクライアントからのSSL/TLSの接続を受け入れる一般的なSSL/TLSサーバを実装している。

openssl s_server -cert <サーバ証明書ファイル> -key <秘密鍵ファイル> -CAfile <中間証明書ファイル>

実行例:

$ openssl s_server -cert server.crt -key server.key -CAfile intermediate.crt 
Using default temp DH parameters
Using default temp ECDH parameters
ACCEPT

openssl s_clientでチェック

起動したサーバに openssl s_client で接続して、証明書を検証する。
s_clientは、リモートのサーバに対するSSL/TLSの接続を確立する一般的なSSL/TLSクライアントを実装している。

openssl s_client -connect localhost:4433 -CAfile <CA証明書ファイル>

CA証明書ファイルの例:

  • Mac OS X
    /etc/openssl/cert.pem
    /opt/local/etc/openssl/cert.pem、/opt/local/share/curl/curl-ca-bundle.crt (MacPortsの場合)
  • Ubuntu (ca-certificates をインストールしておく)
    /etc/ssl/certs/ca-certificates.crt
  • CentOS
    /etc/pki/tls/certs/ca-bundle.crt にあるが、指定しなくても大丈夫。

実行例:

$ openssl s_client -connect localhost:4433 -CAfile /opt/local/share/curl/curl-ca-bundle.crt
CONNECTED(00000003)
depth=3 (略)
verify return:1
depth=2 (略)
verify return:1
depth=1 (略)
verify return:1
depth=0 (略)
verify return:1
---
Certificate chain
 0 s:(略)
   i:(略)
 1 s:(略)
   i:(略)
 2 s:(略)
   i:(略)
 3 s:(略)
   i:(略)
---
Server certificate
-----BEGIN CERTIFICATE-----
(略)
-----END CERTIFICATE-----
subject=(略)
issuer=(略)
---
No client certificate CA names sent
---
SSL handshake has read 4744 bytes and written 443 bytes
---
New, TLSv1/SSLv3, Cipher is ECDHE-RSA-AES256-GCM-SHA384
Server public key is 2048 bit
Secure Renegotiation IS supported
Compression: zlib compression
Expansion: zlib compression
SSL-Session:
    Protocol  : TLSv1.2
    Cipher    : ECDHE-RSA-AES256-GCM-SHA384
    Session-ID: (略)
    Session-ID-ctx: 
    Master-Key: (略)
    Key-Arg   : None
    PSK identity: None
    PSK identity hint: None
    SRP username: None
    TLS session ticket lifetime hint: 300 (seconds)
    TLS session ticket:
    (略)
    Compression: 1 (zlib compression)
    Start Time: 1421023132
    Timeout   : 300 (sec)
    Verify return code: 0 (ok)
---

実際にサーバにインストールしたら、s_clientで以下のように証明書をチェックする。
-servername は、SNI(Server Name Indication)のために必要。

実行例:

  • Mac OS X
    (CAfileはMacPortsの場合)

    $ openssl s_client -connect www.example.com:443 -servername www.example.com -showcerts -CAfile /opt/local/etc/openssl/cert.pem
    
  • CentOS

    $ openssl s_client -connect www.example.com:443 -servername www.example.com -showcerts
    
  • Ubuntu
    (ca-certificates をインストールしておく)

    $ openssl s_client -connect www.example.com:443 -servername www.example.com -showcerts -CAfile /etc/ssl/certs/ca-certificates.crt
    

証明書の有効期限をチェックしたい場合は、

$ echo | openssl s_client -connect www.example.com:443 -servername www.example.com -showcerts 2>/dev/null | openssl x509 -noout -dates

svn diffに色を付ける

colordiffをインストールして、Subversionのdiff-cmdに設定する。

colordiffをインストール

Macなら、MacPortsにcolordiffがある。

$ sudo port install colordiff

DebianとUbuntuはパケージがあるらしいのでapt-getで。

その他のLinuxの場合は、http://www.colordiff.org/ からソースをダウンロードしてインストール。

Subversionに設定

~/.subversion/config

[helpers]
diff-cmd = colordiff

実行例

$ svn diff | less -R

Xcode6のiOSシミュレーターでキーボードやピッカーが表示されない

Xcode6のiOSシミュレーターでキーボードやピッカーが表示されない。
(正確に言うと、ツールバーのところだけは表示される)

対処方法

iOS Simulatorを起動して、
Hardware -> Keyboard の "Connect Hardware Keyboard" のチェックを外す。
ただし、"Connect Hardware Keyboard" のチェックを外すと、Macのキーボードをシミュレーターでの入力に使えなくなる。
Macのキーボードもシミュレーターのソフトウェアキーボードも両方使いたい場合は、Hardware -> Keyboard の "Connect Hardware Keyboard" のチェックは付けておいて、Hardware -> Keyboard の "Toggle Software keyboard"(または⌘K)でソフトウェアキーボードのオンオフを切り替えればよい。

ブランチの名前を変更する

ブランチの名前を変更するには、-m オプションを使う。

oldbranchをnewbranchに変更する

$ git branch -m <oldbranch> <newbranch>

現在のブランチをnewbranchに変更する

$ git branch -m <newbranch>

newbranchがすでに存在している場合に上書きするには、-m の代わりに -M オプションを使う。

omniauth-google-oauth2はGoogle APIのContacts APIとGoogle+ APIを有効にする必要がある

devise + omniauth-google-oauth2でGoogleアカウントでのログインを実装しているRailsアプリケーションで bundle updateしたら、omniauth-google-oauth2 が0.2.2から0.2.4になり、Googleアカウントでのログインで、invalid credentials が発生するようになった。
0.2.3から、Google APIのContacts APIとGoogle+ APIを有効にしないといけなくなったようだ。

https://github.com/zquestz/omniauth-google-oauth2#google-api-setup

コマンドの終了コードが128を超える場合はシグナルで終了した場合

コマンドの終了コードが128を超える場合はシグナルで終了した場合。

$ man bash
The return value of a simple command is its exit status, or 128+n if the command is terminated by signal n.
$ some_command
$ echo $?
139

例えば上記のように終了コードが139なら、139=128+11なので、シグナル11で終了したということになる。
man signalとかで見ると、シグナル11はSIGSEGVで、セグメンテーション違反だということが分かる。

yumアップデート時に変更点を表示する

yum-plugin-changelogプラグインをインストール。

# yum install yum-plugin-changelog

※ CentOS5はyum-changelog

# yum install yum-changelog

yum-plugin-changelogプラグインをインストールすると、--changelogオプションが追加される。
パッケージの変更点を表示するには、--changelogオプションを付けてyum updateを実行する。

# yum --changelog update