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

以上。

証明書の署名アルゴリズムを確認

表題の通り。`openssl`コマンドでやる。

■ 環境

  • OpenSSL
  • Mac OSX El Capitan

■ openssl

証明書のファイルが手元にあれば下記コマンドで確認することができる。

$ openssl x509 -text -noout -in [証明書ファイル] | grep Algorithm
        Signature Algorithm: sha256WithRSAEncryption
            Public Key Algorithm: rsaEncryption
    Signature Algorithm: sha256WithRSAEncryption
$

この結果であれば”SHA-2“で署名されているようである。ちなみに最近、対応しないと警告が表示されるらしいと話題になった”SHA-1“の署名アルゴリズムの場合は下記のようになるようであった。

$ openssl x509 -text -noout -in old.cert | grep Algorithm
    Signature Algorithm: sha1WithRSAEncryption
            Public Key Algorithm: rsaEncryption
    Signature Algorithm: sha1WithRSAEncryption
$

以上。

対応しているCipherを取得

表題の通り。自身で構築したWebサーバにSSLを組み込んだが、どの暗号スイート(?)暗号アルゴリズム(?)に対応しているのか?を外部から確認したい。

■ 環境

  • nmap 7.40

■ nmap

下記コマンドで取得することができる。

nmap -v --script ssl-enum-ciphers -p 443 [domain]

とあるドメインでは下記が取得できた。

PORT    STATE SERVICE
443/tcp open  https
| ssl-enum-ciphers:
|   TLSv1.0:
|     ciphers:
|       TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA - unknown
|       TLS_ECDHE_ECDSA_WITH_AES_256_CBC_SHA - unknown
|       TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA (rsa 2048) - A
|       TLS_RSA_WITH_AES_128_CBC_SHA (rsa 2048) - A
|       TLS_RSA_WITH_3DES_EDE_CBC_SHA (rsa 2048) - C
|       TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA (rsa 2048) - A
|       TLS_RSA_WITH_AES_256_CBC_SHA (rsa 2048) - A
|     compressors:
|       NULL
|     cipher preference: server
|     warnings:
|       64-bit block cipher 3DES vulnerable to SWEET32 attack
|   TLSv1.1:
|     ciphers:
|       TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA - unknown
|       TLS_ECDHE_ECDSA_WITH_AES_256_CBC_SHA - unknown
|       TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA (rsa 2048) - A
|       TLS_RSA_WITH_AES_128_CBC_SHA (rsa 2048) - A
|       TLS_RSA_WITH_3DES_EDE_CBC_SHA (rsa 2048) - C
|       TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA (rsa 2048) - A
|       TLS_RSA_WITH_AES_256_CBC_SHA (rsa 2048) - A
|     compressors:
|       NULL
|     cipher preference: server
|     warnings:
|       64-bit block cipher 3DES vulnerable to SWEET32 attack
|   TLSv1.2:
|     ciphers:
|       TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256 - unknown
|       TLS_ECDHE_ECDSA_WITH_CHACHA20_POLY1305_SHA256 - unknown
|       TLS_ECDHE_ECDSA_WITH_CHACHA20_POLY1305_SHA256-draft - unknown
|       TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA - unknown
|       TLS_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384 - unknown
|       TLS_ECDHE_ECDSA_WITH_AES_256_CBC_SHA - unknown
|       TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256 (rsa 2048) - A
|       TLS_ECDHE_RSA_WITH_CHACHA20_POLY1305_SHA256 (rsa 2048) - A
|       TLS_ECDHE_RSA_WITH_CHACHA20_POLY1305_SHA256-draft (rsa 2048) - A
|       TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA (rsa 2048) - A
|       TLS_RSA_WITH_AES_128_GCM_SHA256 (rsa 2048) - A
|       TLS_RSA_WITH_AES_128_CBC_SHA (rsa 2048) - A
|       TLS_RSA_WITH_3DES_EDE_CBC_SHA (rsa 2048) - C
|       TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 (rsa 2048) - A
|       TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA (rsa 2048) - A
|       TLS_RSA_WITH_AES_256_GCM_SHA384 (rsa 2048) - A
|       TLS_RSA_WITH_AES_256_CBC_SHA (rsa 2048) - A
|     compressors:
|       NULL
|     cipher preference: server
|     warnings:
|       64-bit block cipher 3DES vulnerable to SWEET32 attack
|_  least strength: unknown

TLSv1.0“, “TLSv1.1“, “TLSv1.2“それぞれでの対応Cipherの一覧のようである。自身の管理するWebサーバのSSLでTLSv1.0は?と聞かれたら、とりあえずこの結果から回答するようにする。

`openssl`コマンドで取得できるもんだと思って、どうやるんだったっけ?と検索しまくったのは内緒である。

以上。