GNU/Linux >> Linux の 問題 >  >> Linux

6すべてのシステム管理者が知っておくべきOpenSSLコマンドオプション

トランスポート層セキュリティ(TLS)は、セキュリティ戦略の重要な部分であり、Webサーバー以外のアプリケーションは、公開鍵暗号化によって提供される保護をますます利用しています。 OpenSSLツールキットは、システム管理者がTLSで保護されたアプリケーションの保守を担当しているかどうかを知る必要がある基本的なユーティリティです。この記事では、私が毎日使用する最も一般的なコマンドのいくつかを紹介します。多くの記事は証明書署名要求(CSR)または自己署名証明書の生成に焦点を当てていますが、この記事では、証明書生成プロセス以外のOpenSSLコマンドとワンライナーの確認に時間を費やします。

[次のこともお楽しみいただけます:LinuxコマンドラインツールでCA証明書を利用できるようにする]

証明書の有効性の確認

実行する最も一般的なトラブルシューティング手順の1つは、サーバーから送信された証明書チェーンの基本的な有効性を確認することです。これは、openssl s_clientで実行できます。 指図。以下の例は、ポート443での接続後にサーバー(redhat.com)によって送信された正常に検証された証明書チェーンを示しています。-brief フラグは、OpenSSLが通常表示するより詳細な出力の一部を除外します。 「確認」は「OK」として出力されることに注意してください。

デフォルトでは、openssl s_client リモートサーバーに送信するデータの標準入力から読み取ります。 echoを追加する ワンライナーに改行を送信し、すぐに接続を終了します。これがないと、 Ctrl + Cを押す必要があります 接続を終了します。

$ echo | openssl s_client -connect redhat.com:443 -brief
CONNECTION ESTABLISHED
Protocol version: TLSv1.2
Ciphersuite: ECDHE-RSA-AES128-GCM-SHA256
Peer certificate: C = US, ST = North Carolina, L = Raleigh, O = "Red Hat, Inc.", OU = Information Technology, CN = *.redhat.com
Hash used: SHA256
Signature type: RSA
Verification: OK
Supported Elliptic Curve Point Formats: uncompressed
Server Temp Key: ECDH, P-256, 256 bits
DONE

上記の出力を以下の例と比較してください。この出力では、「自己署名証明書」というエラーで検証が失敗したことがはっきりとわかります。

$ echo | openssl s_client -connect self-signed.badssl.com:443 -brief
depth=0 C = US, ST = California, L = San Francisco, O = BadSSL, CN = *.badssl.com
verify error:num=18:self signed certificate
CONNECTION ESTABLISHED
Protocol version: TLSv1.2
Ciphersuite: ECDHE-RSA-AES128-GCM-SHA256
Peer certificate: C = US, ST = California, L = San Francisco, O = BadSSL, CN = *.badssl.com
Hash used: SHA512
Signature type: RSA
Verification error: self signed certificate
Supported Elliptic Curve Point Formats: uncompressed:ansiX962_compressed_prime:ansiX962_compressed_char2
Server Temp Key: ECDH, P-256, 256 bits
DONE

証明書の有効期限の決定

すべてのシステム管理者は、公開されているWebサイトの証明書の有効期限が切れることを許可した後の困惑を経験しています。これを監視し、発生しないようにするための監視ツールはたくさんありますが、コマンドラインから証明書の有効期限をすばやく確認したい場合はどうでしょうか。 OpenSSLで対応できます。

証明書の有効期限の確認には、2つのOpenSSLコマンドで構成される1つのライナーが含まれます:s_client およびx509s_client 前の例でサーバーへの接続を確立します。出力をx509にパイプすることによって 、-datesを使用して、証明書の有効期間を取得できます 国旗。以下は、有効な証明書と期限切れの証明書の両方の例です。

# A valid certificate that hasn’t expired yet
$ echo | openssl s_client -connect redhat.com:443 2>/dev/null | openssl x509 -noout -dates
notBefore=Jul  9 00:00:00 2019 GMT
notAfter=Aug  2 12:00:00 2021 GMT

# A certificate that expired in 2015
$ echo | openssl s_client -connect expired.badssl.com:443 2>/dev/null | openssl x509 -noout -dates
notBefore=Apr  9 00:00:00 2015 GMT
notAfter=Apr 12 23:59:59 2015 GMT

:サーバー証明書の代わりにデフォルトのSSL証明書を受け取った場合は、このSNI(サーバー名表示)の説明を確認してください。

証明書の拡張子を確認する

X509拡張機能を使用すると、証明書に追加のフィールドを追加できます。最も一般的なものの1つは、サブジェクト代替名です。 (さん)。証明書のSANを使用すると、複数の値(複数のFQDNなど)を単一の証明書に関連付けることができます。検証に証明書の共通名を使用することは推奨されていないため、SANは複数の値がない場合でも使用されます。

以前のワンライナーと同様に、複数のOpenSSLコマンド間で出力をパイプ処理すると、特定の証明書拡張を簡単に検査でき、証明書に関連付けられたSANを表示できます。

$  echo | openssl s_client -connect redhat.com:443 2>/dev/null | openssl x509 -noout -ext subjectAltName
X509v3 Subject Alternative Name:
    DNS:*.redhat.com, DNS:redhat.com

別の一般的な拡張機能のセットには、証明書の基本的な制約とキーの使用法が含まれます。具体的には、証明書を認証局として使用できるかどうかを確認することをお勧めします。繰り返しますが、これはSANをチェックするのと同じ方法で行うことができます:

$  openssl x509 -ext basicConstraints,keyUsage -noout -in /usr/share/ca-certificates/mozilla/VeriSign_Universal_Root_Certification_Authority.crt
X509v3 Basic Constraints: critical
    CA:TRUE
X509v3 Key Usage: critical
    Certificate Sign, CRL Sign

非推奨のTLS暗号またはバージョンの確認

Qualys SSL Labなどの優れたWebベースのツールは、TLS構成のセキュリティに関する完全なレポートを提供するために存在します。これには、TLSで保護されたリソースのセキュリティ体制を弱める可能性のある安全でない暗号スイートやその他の構成パラメータの使用について警告することが含まれます。ただし、コマンドラインから簡単なテストを実行したい場合もあります。OpenSSLを使用するとこれが簡単になります。

まず、openssl ciphersを使用して、特定のSSL/TLSバージョンでサポートされている暗号を一覧表示できます。 指図。以下に、TLS1.3でサポートされている暗号をリストアップしたことがわかります。 -s flagは、指定されたTLSバージョン(-tls1_3)でサポートされている暗号のみを出力するようにciphersコマンドに指示します。 ):

$ openssl ciphers -s -tls1_3
TLS_AES_256_GCM_SHA384:TLS_CHACHA20_POLY1305_SHA256:TLS_AES_128_GCM_SHA256

s_client 次に、コマンドを使用して、さまざまなTLSバージョンと暗号スイートをテストできます。 Ciphersuites.info Webサイトは、さまざまな暗号スイートの強度に関する情報の便利なリポジトリです。例として、弱いTLS_PSK_WITH_AES_128_CBC_SHAスイートをサポートしていないサーバーに対して使用しようとすると、エラーが発生します。

openssl s_client -connect redhat.com:443 -cipher PSK-AES128-CBC-SHA -quiet -no_tls1_3
139963477378368:error:141A90B5:SSL routines:ssl_cipher_list_to_bytes:no ciphers available:../ssl/statem/statem_clnt.c:3794:No ciphers enabled for max supported SSL/TLS version

同様に、接続で使用されるTLSプロトコルのバージョンを指定できます。次の例は、TLS1.1がサーバーでサポートされていないことを示しています。オプションの完全なリストを確認するには、必ずマンページを確認してください。

$ openssl s_client -connect redhat.com:443 -tls1_1 -quiet
139890998576448:error:141E70BF:SSL routines:tls_construct_client_hello:no protocols available:../ssl/statem/statem_clnt.c:1112:

証明書の検査

有効期限やX509拡張機能など、証明書の特定の部分について説明しました。特定の証明書に関するすべてを確認したい場合があります。 X509ユーティリティは、-nooutで使用できます。 (エンコードされた証明書の印刷を抑制するため)、-text (証明書に関するテキスト情報を印刷するため)、および-in (入力ファイルを指定するために)特定の証明書について知りたいすべてを印刷するためのフラグ。以下の例では、ローカルシステムの証明書ファイルを使用していますが、openssl s_clientからの出力を同じように簡単にパイプできます。 、前の例で見たように。

$ openssl x509 -text -noout -in /usr/share/ca-certificates/mozilla/VeriSign_Universal_Root_Certification_Authority.crt
Certificate:
    Data:
        Version: 3 (0x2)
        Serial Number:
            40:1a:c4:64:21:b3:13:21:03:0e:bb:e4:12:1a:c5:1d
        Signature Algorithm: sha256WithRSAEncryption
        Issuer: C = US, O = "VeriSign, Inc.", OU = VeriSign Trust Network, OU = "(c) 2008 VeriSign, Inc. - For authorized use only", CN = VeriSign Universal Root Certification Authority
        Validity
            Not Before: Apr  2 00:00:00 2008 GMT
            Not After : Dec  1 23:59:59 2037 GMT
        Subject: C = US, O = "VeriSign, Inc.", OU = VeriSign Trust Network, OU = "(c) 2008 VeriSign, Inc. - For authorized use only", CN = VeriSign Universal Root Certification Authority
        Subject Public Key Info:
            Public Key Algorithm: rsaEncryption
                RSA Public-Key: (2048 bit)
                Modulus:
                    00:c7:61:37:5e:b1:01:34:db:62:d7:15:9b:ff:58:
                    5a:8c:23:23:d6:60:8e:91:d7:90:98:83:7a:e6:58:
                    19:38:8c:c5:f6:e5:64:85:b4:a2:71:fb:ed:bd:b9:
                    da:cd:4d:00:b4:c8:2d:73:a5:c7:69:71:95:1f:39:
                    3c:b2:44:07:9c:e8:0e:fa:4d:4a:c4:21:df:29:61:
                    8f:32:22:61:82:c5:87:1f:6e:8c:7c:5f:16:20:51:
                    44:d1:70:4f:57:ea:e3:1c:e3:cc:79:ee:58:d8:0e:
                    c2:b3:45:93:c0:2c:e7:9a:17:2b:7b:00:37:7a:41:
                    33:78:e1:33:e2:f3:10:1a:7f:87:2c:be:f6:f5:f7:
                    42:e2:e5:bf:87:62:89:5f:00:4b:df:c5:dd:e4:75:
                    44:32:41:3a:1e:71:6e:69:cb:0b:75:46:08:d1:ca:
                    d2:2b:95:d0:cf:fb:b9:40:6b:64:8c:57:4d:fc:13:
                    11:79:84:ed:5e:54:f6:34:9f:08:01:f3:10:25:06:
                    17:4a:da:f1:1d:7a:66:6b:98:60:66:a4:d9:ef:d2:
                    2e:82:f1:f0:ef:09:ea:44:c9:15:6a:e2:03:6e:33:
                    d3:ac:9f:55:00:c7:f6:08:6a:94:b9:5f:dc:e0:33:
                    f1:84:60:f9:5b:27:11:b4:fc:16:f2:bb:56:6a:80:
                    25:8d
                Exponent: 65537 (0x10001)
        X509v3 extensions:
            X509v3 Basic Constraints: critical
                CA:TRUE
            X509v3 Key Usage: critical
                Certificate Sign, CRL Sign
            1.3.6.1.5.5.7.1.12: 
                0_.].[0Y0W0U..image/gif0!0.0...+..............k...j.H.,{..0%.#http://logo.verisign.com/vslogo.gif
            X509v3 Subject Key Identifier: 
                B6:77:FA:69:48:47:9F:53:12:D5:C2:EA:07:32:76:07:D1:97:07:19
    Signature Algorithm: sha256WithRSAEncryption
         4a:f8:f8:b0:03:e6:2c:67:7b:e4:94:77:63:cc:6e:4c:f9:7d:
         0e:0d:dc:c8:b9:35:b9:70:4f:63:fa:24:fa:6c:83:8c:47:9d:
         3b:63:f3:9a:f9:76:32:95:91:b1:77:bc:ac:9a:be:b1:e4:31:
         21:c6:81:95:56:5a:0e:b1:c2:d4:b1:a6:59:ac:f1:63:cb:b8:
         4c:1d:59:90:4a:ef:90:16:28:1f:5a:ae:10:fb:81:50:38:0c:
         6c:cc:f1:3d:c3:f5:63:e3:b3:e3:21:c9:24:39:e9:fd:15:66:
         46:f4:1b:11:d0:4d:73:a3:7d:46:f9:3d:ed:a8:5f:62:d4:f1:
         3f:f8:e0:74:57:2b:18:9d:81:b4:c4:28:da:94:97:a5:70:eb:
         ac:1d:be:07:11:f0:d5:db:dd:e5:8c:f0:d5:32:b0:83:e6:57:
         e2:8f:bf:be:a1:aa:bf:3d:1d:b5:d4:38:ea:d7:b0:5c:3a:4f:
         6a:3f:8f:c0:66:6c:63:aa:e9:d9:a4:16:f4:81:d1:95:14:0e:
         7d:cd:95:34:d9:d2:8f:70:73:81:7b:9c:7e:bd:98:61:d8:45:
         87:98:90:c5:eb:86:30:c6:35:bf:f0:ff:c3:55:88:83:4b:ef:
         05:92:06:71:f2:b8:98:93:b7:ec:cd:82:61:f1:38:e6:4f:97:
         98:2a:5a:8d

ランダムデータの生成

この時点で、サーバーへの接続と証明書の検査に慣れています。最後に、私にとって頻繁に役立つ最後のトリックを1つ紹介します。 openssl rand コマンドを使用して、疑似ランダムバイトを生成できます。 -base64 flagは出力をbase64エンコードし、パスワードとして、またはランダムな文字列を必要とする他のアプリケーションに使用できるランダムな文字列を提供します。パディングを避けるために、バイト数が3で割り切れるのを確認してください。

$  openssl rand -base64 9
Emo+xQINmYoU

[Red Hat and O'Reillyからこの無料の本を入手してください-KubernetesOperators:Automating the ContainerOrchestrationPlatform。 ]

まとめ

この記事では、システム管理者としての日常生活を容易にする基本的なOpenSSLコマンドをいくつか学びました。 OpenSSLは非常に強力なツールスイート(およびソフトウェアライブラリ)であり、この記事ではその機能のほんの一部に触れました。ただし、これらのコマンドは、OpenSSLの知識を深めるための優れた出発点であると同時に、TLSで保護されたサーバーを定期的に使用するシステム管理者のツールボックスにある便利なツールセットでもあります。


Linux
  1. すべての開発者が知っておくべきLinuxコマンドのリスト

  2. 知っておくべき8つの素晴らしいPerlコマンドライン引数

  3. すべてのパワー Linux ユーザーが知っておくべき便利な Linux ターミナル ショートカット

  1. Linuxのサウンドテーマ:すべてのユーザーが知っておくべきこと

  2. すべてのLinuxユーザーが知っておくべき10個のコマンド

  3. 無料コマンドの分析:Linuxシステム管理者が知っておくべきこと

  1. 17すべてのシステム管理者が知っておくべきLinuxコマンド

  2. 20OpenSSLコマンド知っておくべき例

  3. 知っておくべき15のLinux Bash履歴拡張の例