Linuxでopensslを使ってSSL証明書の詳細を確認する方法 - TechRepublic

Linuxでopensslを使ってSSL証明書の詳細を確認する方法 - TechRepublic

画像: Getty Images/iStockphoto

SSL証明書の管理は、特に更新や交換の時期になると、非常に面倒な作業になりがちです。SSL証明書の有効期限切れは、ブラウザのエラーメッセージの表示から運用システムの完全な停止まで、技術運用に壊滅的な影響を与える可能性があります。そのため、SSL証明書の有効期限切れを常に監視する(ネットワークスキャン、あるいは少なくとも証明書の有効期限を追跡するログは必須です)だけでなく、証明書の更新/交換が確実に完了したことを確認することが重要です。

参照:使用すべき 5 つの Linux サーバー ディストリビューション(TechRepublic Premium)

Linuxの証明書ファイルは通常、/etc/pki/tls/certsフォルダ内にあります。Apacheの場合は/etc/httpdフォルダなど、アプリケーション固有のフォルダ内にある場合もあります(アプリケーションを設定/構築した人やベンダーの都合によります)。これらのファイルは通常、.pemまたは.crt拡張子が使用され、ファイル名は「(ホスト名).pem」「(ホスト名).crt」といった形式になることが多いですが、一般的な「server」というファイル名が使用される場合もあります。

opensslコマンドは、証明書の管理に使える万能ツールです。特定の証明書の詳細を表示するには、次のコマンドを実行します。

openssl x509 -in (path to certificate and certificate filename) -text -noout

以下のような出力が表示されます。「発行者」、「件名」、「Not Before/Note After」、「件名別名」の各フィールドに、最も役立つ情報が表示されます。

証明書:
データ:
バージョン: 3 (0x2)
シリアル番号:
11:00:00:05:16:07:eb:1b:1d:9f:88:81:98:00:00:00:00:05:16
署名アルゴリズム: sha256WithRSAEncryption
発行者: DC=int、DC=dev、CN=dev 発行 low 01
有効期限
: Mar 19 15:32:02 2021 GMT
有効期限: Mar 19 15:42:02 2022 GMT
件名: C=US、ST=MA、L=Boston、O=Contoso、OU=Systems、CN=test.contoso.com
件名の公開鍵情報:
公開鍵アルゴリズム: rsaEncryption
公開鍵: (2048 ビット)
係数:
00:e9:0d:7a:8c:55:54:4f:ef:67:a7:a0:54:de:8f:
bd:6c:cd:fe:e5:01:22:40:90:df:39:97:5a:f6:76:
c1:d9:00:d7:88:7e:7b:63:65:99:59:be:08:4a:3c:
2b:63:13:0d:42:3e:95:9d:cf:2f:2e:48:35:0e:9c:
6c:3f:b5:fd:75:4f:7c:86:34:80:c1:86:be:bf:0e:
0a:da:a7:eb:8b:97:9f:29:34:1b:fa:c8:b4:f5:57:
ec:98:a9:d1:d4:dc:07:6e:e0:14:51:a3:7a:5e:1c:
b4:e6:a1:14:01:59:a3:a3:04:f0:75:0c:2e:6f:34:
2c:72:a8:51:09:0d:ad:53:f4:34:58:ab:23:01:b8:
51:1a:2c:c3:3f:e2:75:4e:8d:55:9a:2b:60:c4:60:
67:7e:e9:82:78:73:fe:fc:38:a3:1f:1b:30:f7:46:
95:4f:88:b1:97:e1:6d:f6:85:3c:79:37:f5:47:44:
66:16:ad:3a:f2:fc:ce:db:a4:0c:2d:6d:1e:9e:20:
b9:b5:eb:ba:de:93:3a:02:a7:80:3f:f5:ca:21:d2:
b1:34:56:ba:95:df:0f:3a:f5:fa:83:96:fe:aa:51:
20:9d:20:d5:b2:85:24:90:ea:c7:cd:5d:a2:e7:a5:
ff:c3:d2:23:f9:ba:8c:ad:37:8b:8f:84:ad:22:04:
fc:2d
指数: 65537 (0x10001)
X509v3 拡張:
X509v3 キー使用法: クリティカル
デジタル署名、キー暗号化
X509v3 拡張キー使用法:
TLS Web サーバー認証
X509v3 サブジェクト別名:
DNS:test.contoso.com、DNS:testhost.contoso.com
X509v3 サブジェクト キー識別子:
93:F0:A5:5F:72:91:05:67:84:42:D2:0B:A1:48:54:8E:4E:BB:E0:A0
X509v3 認証局キー識別子:
keyid:7D:F8:78:35:EE:A6:43:93:EF:E6:92:79:C9:15:49:12:51:77:EB:BB

X509v3 CRL配布ポイント:

フルネーム:
URI:ldap:///CN=dev%20issuing%20low%2001,CN=ca1,CN=CDP,CN=Public%20Key%20Services,CN=Services,CN=Configuration,DC=dev,DC=int?certificateRevocationList?base?objectClass=cRLDistributionPoint

機関情報アクセス:
CA 発行者 – URI:ldap:///CN=dev%20issuing%20low%2001,CN=AIA,CN=Public%20Key%20Services,CN=Services,CN=Configuration,DC=dev,DC=int?cACertificate?base?objectClass=certificationAuthority

1.3.6.1.4.1.311.20.2:
…Webサーバー
署名アルゴリズム: sha256WithRSAEncryption
76:d6:6e:35:53:71:3b:1b:f6:12:23:b5:14:e2:73:c9:e7:d0:
68:e7:37:ab:35:bc:fc:e5:41:75:f1:84:11:20:ce:84:94:dc:
86:1d:11:7a:bd:a0:5a:8a:3b:ac:fc:f1:4d:5f:3a:3f:88:a8:
ff:ad:2e:2a:3f:91:a3:d5:28:f2:84:87:b6:17:62:a6:d2:d2:
25:34:e3:6d:c0:3b:93:f1:a2:22:8e:80:a1:fe:54:65:d6:10:
da:78:4b:0a:f7:eb:75:d5:9d:17:0b:87:8f:5c:2d:39:49:59:
b7:e6:b1:4a:c2:f0:de:68:6a:36:56:85:16:a4:01:46:21:b6:
49:33:0b:4a:ec:c5:69:6b:fa:ea:d7:d4:95:e1:f4:2d:17:c5:
ad:bd:1f:b6:73:cd:6c:ae:5d:ad:ed:0f:82:ed:43:1c:0e:ed:
54:93:83:d8:76:45:d6:45:3d:10:17:f4:eb:8a:84:e8:9a:9c:
c6:5c:92:df:2e:c0:64:6d:03:78:cd:59:dd:f3:e6:bb:5c:ac:
c0:9b:55:3f:a5:b6:12:90:0c:ea:e1:05:37:6b:19:86:53:f1:
83:d7:0b:23:6d:fe:5b:c8:2f:22:e3:b5:6a:bf:cd:45:27:62:
d8:1b:1c:a9:be:be:71:0c:07:bd:d3:c2:a4:63:1e:eb:7f:22: 31:
3a:8b:25

SSL証明書に関連付けられたポート(例:Webサーバーの場合は443)のチェックも同様に便利です。このコマンドを実行すると、証明書の有効期限を確認できます。SSL証明書の置き換えまたは更新の前後にこのコマンドを実行して、成功を確認することを強くお勧めします。アプリケーション関連の証明書(Apacheなど)を置き換える場合は、新しい証明書を反映させるために、アプリケーションを再起動する必要がある可能性がありますのでご注意ください。

このコマンドをホスト システム自体で使用するか、そのシステムに対してリモートで実行し、「localhost」をチェックするホストの完全修飾ドメイン名 (FQDN) に置き換え、必要に応じてポート 443 を SSL 証明書に関連付けられた開いているポートと一致するように変更します。

openssl s_client -connect localhost:443 2>/dev/null | openssl x509 -noout -dates

次のような出力が表示されます。

2021年3月19日 15:32:02 GMT以前
2022年3月19日 15:42:02 GMT以降

以下のスクリプトは、証明書に関するさらに詳しい情報を推測するためにも使用でき、上記のようにローカルまたはリモートで使用できます。

私はこれを ssl_validate.sh と呼んでいますが、内容を任意の名前の新しいスクリプト ファイルにコピーし、chmod +x を使用して実行可能にしてから、次の構文で使用できます。

. /ssl_validate.sh (または選択したスクリプト名) server.company.com:443。ここで、「server.company.com」はチェックするホストの完全修飾ドメイン名 (FQDN) であり、443 は SSL 証明書に関連付けられたリッスンしているポートです。

承認されたファイアウォール エントリなどを通じて、そのサーバーとポートへのパスがあることを確認する必要があります。

スクリプトは次のような出力を返し、SSL 証明書の最も重要な詳細を表示します。

server.company.com:443; SSL; CN: (SSL 証明書の CN); Subject (SSL 証明書の件名); Issuer: (SSL 証明書の発行者); notBefore: (SSL 証明書の作成日); notAfter: (SSL 証明書の有効期限); DaysUntilExpiration: (SSL 証明書の有効期限までの残り日数); Errors: (SSL 証明書に関連するエラー)

スクリプトは以下から始まります:

デリミット=” ; ”

エクスポートデリミット

サーバーポート=${1}

サーバーポートをエクスポートする

echo “#${serverport}”

date_today=$(日付 +%F)

日付差分() {

d1=$(日付 -d “$1” +%s)

d2=$(日付 -d “$2” +%s)

echo $(( (d1 – d2) / 86400 )) 日

}

エクスポート -f datediff

sslscan() {

ローカル sp=${1}

tls_content=$(echo “Q” | openssl s_client -showcerts -connect ${serverport} 2>&1)

[[ “$?” == 0 ]]の場合;

tls_errors=$(echo “${tls_content}” | grep -i error )

tls_cert_subject=$(echo “${tls_content}” | openssl x509 -noout -subject )

tls_cert_issuer=$(echo “${tls_content}” | openssl x509 -noout -issuer )

tls_cert_cn=$(echo “${tls_content}” | openssl x509 -noout -subject | sed -e “s/.*CN=([^/]*).*/1/” )

tls_cert_dates=$(echo “${tls_content}” | openssl x509 -noout -dates )

tls_cert_notafter_date=$(echo “${tls_cert_dates}” | grep notAfter |sed -e “s/notAfter=//” | tr -d '
')

tls_cert_notbefore_date=$(echo “${tls_cert_dates}” | grep notBefore |sed -e “s/notBefore=//” | tr -d '
')

tls_cert_datediff=$(datediff “${tls_cert_notafter_date}” “${date_today}”)

echo -n “${サーバーポート} ${delim} SSL”

echo -n ” ${delim} CN:”

echo -n ” ${tls_cert_cn}”

echo -n ” ${delim} 件名:”

echo -n ” ${tls_cert_subject}”

echo -n ” ${delim} 発行者:”

echo -n ” ${tls_cert_issuer}”

echo -n ” ${delim} notBefore:”

echo -n ” ${tls_cert_notbefore_date}”

echo -n ” ${delim} notAfter:”

echo -n ” ${tls_cert_notafter_date}”

echo -n ” ${delim} 有効期限までの日数:”

echo -n ” ${tls_cert_datediff}”

echo -n ” ${delim} エラー:”

echo -n ” ${tls_errors}”

エコー

それ以外

tls_errors=$(echo “${tls_content}” | tr '
' '/' | tr ' ' '_' )

ステータス=”エラー: ${tls_errors}”

echo -n “${serverport} ${delim} ${status}”

エコー

フィ

}

エクスポート -f sslscan

タイムアウト 3 bash -c “sslscan ${serverport}”

[[ $? != 0 ]]の場合

echo -n “${serverport} ${delim} エラー: CONNECTION_TIMED_OUT”

エコー

フィ

Tagged: