OpenSSL コマンドラインガイド

最終更新: 2023-07-16 12:40:14 +0800 +0800
原文は英語で書かれています。あなたはAI翻訳版を読んでいます。

OpenSSL は、暗号プリミティブ、プロトコルライブラリ、およびコマンドラインツールを提供します。コマンドは、検査、相互運用性テスト、およびローカル管理に有用です。アプリケーションコードでは、保守されている言語ライブラリとその安全なデフォルトを使用すべきです。

鍵、CSR、および証明書 #

汎用鍵インターフェースを使用して秘密鍵を生成します。

sh
openssl genpkey -algorithm RSA \
  -pkeyopt rsa_keygen_bits:3072 \
  -out private-key.pem
openssl pkey -in private-key.pem -pubout -out public-key.pem

証明書署名要求を作成して検査します。

sh
openssl req -new -key private-key.pem -out request.csr
openssl req -in request.csr -noout -text -verify
openssl x509 -in certificate.pem -noout -text

req -verify は CSR の所有証明を検査します。要求された同一性を検証したり、証明書を発行したりはしません。CSR には公開鍵と要求属性が含まれますが、秘密鍵は含まれません。

明示的なトラストストアに対して証明書パスを検証します。

sh
openssl verify -CAfile roots.pem -untrusted intermediate.pem certificate.pem

PEM は、DER オブジェクトを型マーカー付きの base64 テキストでラップします。オブジェクト型を維持したまま明示的に変換します。

sh
openssl x509 -in certificate.pem -outform DER -out certificate.der
openssl x509 -inform DER -in certificate.der -out certificate.pem
openssl pkey -in private-key.pem -outform DER -out private-key.der

TLS クライアントにはホスト名検証も必要です。診断接続では、期待するサーバー名と検証オプションを渡します。

sh
openssl s_client -connect example.com:443 \
  -servername example.com -verify_hostname example.com

ダイジェストと署名 #

sh
openssl dgst -sha256 artifact.tar
openssl rand -hex 32
openssl dgst -sha256 -sign private-key.pem -out artifact.sig artifact.tar
openssl dgst -sha256 -verify public-key.pem -signature artifact.sig artifact.tar

ダイジェストが偶発的な変更を検出できるのは、期待値が認証済みチャネルを通じて届く場合だけです。署名はダイジェストと対応する秘密鍵の所有の両方を検証しますが、公開鍵への信頼は別のデプロイ上の判断として残ります。

パスワードベースの暗号化 #

sh
openssl enc -aes-256-cbc -pbkdf2 -salt \
  -in plaintext -out ciphertext

openssl enc の従来のインターフェースは、現代的な AEAD モードを提供しません。アプリケーションの暗号化プロトコルを独自に考案するために使用してはなりません。認証付き暗号化を必要とするファイルには、規定された AEAD 形式または専用ツールを使用してください。相互運用性のために enc が必要な場合、デフォルト値は変更される可能性があるため、ダイジェストと反復回数を明示し、CBC 暗号文は認証されないままであることを理解してください。

コマンドがサポートする場合、保護されたファイルまたは記述子を通じて秘密情報を渡します。コマンド引数として書かれたパスワードは、プロセス一覧やシェル履歴に表示される可能性があります。秘密鍵の権限を制限し、ストレージに適した手順だけで一時的な平文を削除してください。

TLS 診断 #

s_client は診断用クライアントであり、完全なポリシーを備えたアプリケーションの代替ではありません。パスまたはハンドシェイクの失敗を調査する際は、-showcerts、-verify_return_error、およびアプリケーションが期待するプロトコルオプションを追加します。

sh
openssl s_client -connect example.com:443 -servername example.com \
  -verify_hostname example.com -verify_return_error -showcerts

新しい自動化では、rsautl などの非推奨コマンドを避けてください。pkeyutl と genpkey は現行のインターフェースを公開します。プロバイダー、アルゴリズム、デフォルト値は OpenSSL のリリースによって異なるため、openssl list -commands と openssl list -providers でローカルにインストールされた文書を確認してください。

コメント

GitHub で閲覧・コメントする(投稿にはログインが必要です)