testssl

表題のツールについて。

■ 環境

  • testssl
  • Homebrew
  • macOS High Sierra

■ testssl

何の気なしに `testssl` というものの存在を知ったのでインストールしてみることにした。名前的に興味を持っただけである。

$ brew info testssl
testssl: stable 2.9.5-3, HEAD
Tool which checks for the support of TLS/SSL ciphers and flaws
https://testssl.sh/
Not installed
From: /usr/local/Homebrew/Library/Taps/homebrew/homebrew-core/Formula/testssl.rb
==> Dependencies
Required: openssl ✘
==> Options
--HEAD
    Install HEAD version
$
$ brew install testssl

インストールされたモジュールは下記の通りである。

$ brew ls testssl
/usr/local/Cellar/testssl/2.9.5-3/bin/testssl.sh
/usr/local/Cellar/testssl/2.9.5-3/etc/ (12 files)
/usr/local/Cellar/testssl/2.9.5-3/libexec/bin/testssl.sh
/usr/local/Cellar/testssl/2.9.5-3/share/man/man1/testssl.1
$

実行してみる。

$ testssl.sh https://www.example.com/

###########################################################
    testssl.sh       2.9.5 from https://testssl.sh/

      This program is free software. Distribution and
             modification under GPLv2 permitted.
      USAGE w/o ANY WARRANTY. USE IT AT YOUR OWN RISK!

       Please file bugs @ https://testssl.sh/bugs/

###########################################################

 Using "OpenSSL 1.0.2o  27 Mar 2018" [~125 ciphers]
 on iida:/usr/local/opt/openssl/bin/openssl
 (built: "reproducible build, date unspecified", platform: "darwin64-x86_64-cc")


Testing all IPv4 addresses (port 443): XXX.XXX.XXX.XX1 XXX.XXX.XXX.XX2
  :

DNSが複数のIPを返す場合、全てのIPに対して実施してくれるようだ。

  • SSL/TLS protocol check
  • standard cipher categories to give you upfront an idea for the ciphers supported
  • checks (perfect) forward secrecy: ciphers and elliptical curves
  • server preferences (server order)
  • server defaults (certificate info, TLS extensions, session information)
  • HTTP header (if HTTP detected or being forced via –assume-http)
  • vulnerabilities
  • testing each of 359 ciphers
  • client simulation

テストの内容は大雑把にこんな感じ。

ふむ。便利そうである。残しておく。

以上。

SNI環境でのSSL証明書情報

表題の件について。

■ 環境

  • OpenSSL

■ SNI

とあるFQDNの証明書について調べたかったのだが、想定の証明書情報が得られないくしばし悩んでしまった。

$ openssl s_client -connect example.com:443 < /dev/null 2> /dev/null | openssl x509 -text

どうやら対象のFQDNではSNIが使用されているようで、そのサーバのデフォルトの証明書が返却されているようであった。下記のように”-servername“オプションを指定する必要がある。

$ openssl s_client -servername example.com -connect example.com:443 < /dev/null 2> /dev/null | openssl x509 -text

これで想定通りの証明書が得られた。

以上。

SSL証明書のパスフレーズ削除

表題の通り。以前のエントリではapacheの再起動時にパスフレーズの入力を省略する設定であったが、そもそも証明書のプライベートキーからパスフレーズを削除してしまう。

■ 環境

  • OpenSSL 1.0.1k
  • Linux
  • Mac OSX El Capitan

■ パスフレーズ削除

下記コマンドで削除することができる。もちろん実行時にはパスフレーズの入力が必要である。

$ openssl rsa -in old.key -out new.key
Enter pass phrase for newkey.pem: **********
writing RSA key
$

パスフレーズが正しく削除されていれば、秘密鍵のファイルは以前は下記のようであったものが削除されていることがわかるであろう。

削除前

-----BEGIN RSA PRIVATE KEY-----
Proc-Type: 4,ENCRYPTED
DEK-Info: DES-EDE3-CBC,XXXXXXXXXXXXXXXX

XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
  :

削除後

-----BEGIN RSA PRIVATE KEY-----
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
  :

この秘密鍵であれば、以前のような”SSLPassPhraseDialog“ディレクティブは必要としない。

以上。

■ 関連

SSLを組み込んだApache再起動時のパスフレーズ

TLS1.1/1.2で接続確認

Macで表題を行いたい。

■ 環境

  • OpenSSL
  • Mac OSX El Capitan

■ openssl

下記コマンドでSSL2/SSL3/TLS1.0/TLS1.1/TLS1.2あたりの接続を確認しようとした。

SSL2

$ echo | openssl s_client -connect example.com:443 -ssl2

SSL3

$ echo | openssl s_client -connect example.com:443 -ssl3

TLS1

$ echo | openssl s_client -connect example.com:443 -tls1

TLS1.1をやろうとしたところでコマンドの実行エラー。`openssl`のヘルプが表示されてしまった。どうやら`-tls1_1`や`-tls1_2`というオプションが無いようである。versionを調べると下記であった。

$ openssl version
OpenSSL 0.9.8zh 14 Jan 2016
$

ちなみにAmazonLinuxでは下記のversionであった。

$ openssl version
OpenSSL 1.0.1k-fips 8 Jan 2015
$

AmazonLinuxのversionであれば、`-tls1_1`や`-tls1_2`のオプションが存在する。

そういえばHomebrewで`openssl`は入れている気がする。ので確認。

$ brew info openssl

現時点で最新の”1.0.2k“がインストールされていた。上記に記載された下記の通り、”PATH“を通す使い方が良いのだろうか。

If you need to have this software first in your PATH run:
  echo 'export PATH="/usr/local/opt/openssl/bin:$PATH"' >> ~/.bash_profile

とりあえず必要な時はデフォルトではなくこっちの`openssl`を使うようにする。

TLS1.1

$ echo | /usr/local/opt/openssl/bin/openssl s_client -connect example.com:443 -tls1_1

TLS1.2

$ echo | /usr/local/opt/openssl/bin/openssl s_client -connect example.com:443 -tls1_1

以上。