「OpenSSL」の版間の差分
Kusanaginoturugi (トーク | 投稿記録) (→証明書署名要求を生成: 記事を追加) |
Kusanaginoturugi (トーク | 投稿記録) (→証明書の形式を変換する: 記事を追加) |
||
105行目: | 105行目: | ||
$ openssl x509 -inform DER < ''myCA''.crt > ''myCA_pem''.crt |
$ openssl x509 -inform DER < ''myCA''.crt > ''myCA_pem''.crt |
||
+ | |||
+ | === Use third-party providers === |
||
+ | |||
+ | OpenSSL 3 introduced providers as a new concept for OpenSSL plugability. It is possible to use algorithms not included in OpenSSL without having to recompile it. For example, to test the [https://csrc.nist.gov/projects/post-quantum-cryptography NIST Post-Quantum Cryptography] algorithms, you can install the [https://openquantumsafe.org/ Open Quantum Safe] provider {{AUR|oqsprovider}}. As an example, you can generate a quantum-safe self-signed certificate with private key using one of the variants of the [https://pq-crystals.org/dilithium/index.shtml Dilithium] signature algorithm: |
||
+ | |||
+ | $ openssl req -provider oqsprovider -x509 -newkey dilithium3 -days ''days'' -keyout ''key'' -out ''cert'' |
||
== トラブルシューティング == |
== トラブルシューティング == |
2023年6月7日 (水) 21:49時点における版
OpenSSL は SSL と TLS プロトコルのオープンソース実装で、可能な限り柔軟になるように設計されています。BSD, Linux, OpenVMS, Solaris, Windows などの様々なプラットフォームをサポートしています。
インストール
openssl は coreutils の依存関係として、デフォルトで Arch Linux にインストールされます。
開発者向けに様々な OpenSSL ライブラリのバインディングが用意されています。
- python-pyopenssl
- perl-net-ssleay
- lua-sec, lua52-sec, lua51-sec
- haskell-hsopenssl
- haskell-openssl-streams
設定
Arch Linux では OPENSSLDIR
は /etc/ssl
です。
OpenSSL 設定ファイルは、慣習的に /etc/ssl/openssl.cnf
に置かれ、最初は複雑に見えるかもしれません。シェルスクリプトの動作と同じように、変数が代入で展開されることがあることを覚えておいてください。設定ファイルの形式についての詳しい説明は、config(5ssl) を参照してください。
req セクション
キー、要求、および自己署名証明書の生成に関連する設定。
req セクションは DN プロンプトを担当する。一般的な誤解として、Common Name (CN) プロンプトがあり、これはユーザーの固有名詞を値として持つべきであると示唆するものです。エンドユーザー証明書は CN として マシンのホスト名 を持つ必要があり、一方 CA は有効な TLD を持つべきではありません。これは、認証されたエンドユーザーの CN と CA 証明書の組み合わせの中で、あるソフトウェアがエンドユーザー証明書は自己署名されていると誤認する可能性のある組み合わせが存在しないようにするためです。CA 証明書の中には、Equifax のように、CN を持たないものもあります。
$ openssl x509 -subject -noout < /etc/ssl/certs/Equifax_Secure_CA.pem
subject= /C=US/O=Equifax/OU=Equifax Secure Certificate Authority
使用方法
この章は、Transport Layer Security#証明書を取得を読んだ事を前提としています。
Curve25519 秘密鍵を生成
$ openssl genpkey -algorithm x25519 -out file
ECDSA 秘密鍵を生成
$ openssl genpkey -algorithm EC -pkeyopt ec_paramgen_curve:P-256 -out file
RSA 秘密鍵を生成
genrsa に取って代わる(openssl(1ssl) によると)、genpkey(1ssl) を使用。
$ openssl genpkey -algorithm RSA -pkeyopt rsa_keygen_bits:keysize -out file
暗号化された鍵が必要な場合は、-aes-256-cbc
オプションを使用します。
証明書署名要求を生成
req(1ssl) を使用。
$ openssl req -new -sha256 -key private_key -out filename
Show a certificate signing request
Certificate signing requests are stored in an encoded format. To view the request in human readable format:
$ openssl req -noout -text -in filename
自己証明証明書を生成
$ openssl req -key private_key -x509 -new -days days -out filename
一つのコマンドで自己証明証明書と秘密鍵を生成
OpenSSL では、上記のコマンドを 1 つにまとめることができるので、場合によっては便利かもしれません。
$ openssl req -x509 -newkey rsa:4096 -days days -keyout key_filename -out cert_filename
Diffie–Hellman パラメーターを生成
詳細については、Diffie–Hellman key exchange を参照してください。
現在のベストプラクティスは、RFC 7919の標準的なDHグループの1つ、例えば ffdhe2048 を使用することです。
あるいは、自分でランダムなグループを生成することもできます。
$ openssl dhparam -out filename 2048
証明書情報を表示
$ openssl x509 -text -in cert_filename
証明書の指紋を表示
$ openssl x509 -noout -in cert_filename -fingerprint -digest
-digest
はオプションで、-md5
、-sha1
、-sha256
または -sha512
のいずれか 1 つです。digest が指定されていない場合については、x509(1ssl) § Input, Output, and General Purpose Options の「-digest」 を参照してください。
証明書の形式を変換する
openssl x509
を使用して、証明書をバイナリ (DER) 形式から PEM 形式 (BEGIN CERTIFICATE
ヘッダを含むテキスト形式) に変換します。
$ openssl x509 -inform DER < myCA.crt > myCA_pem.crt
Use third-party providers
OpenSSL 3 introduced providers as a new concept for OpenSSL plugability. It is possible to use algorithms not included in OpenSSL without having to recompile it. For example, to test the NIST Post-Quantum Cryptography algorithms, you can install the Open Quantum Safe provider oqsproviderAUR. As an example, you can generate a quantum-safe self-signed certificate with private key using one of the variants of the Dilithium signature algorithm:
$ openssl req -provider oqsprovider -x509 -newkey dilithium3 -days days -keyout key -out cert
トラブルシューティング
復号時に "bad decrypt" と表示される
OpenSSL 1.1.0 から dgst と enc コマンドのデフォルトのダイジェストアルゴリズムが MD5 から SHA256 に変更されています [2]。
OpenSSL 1.0.2 以前を使ってファイルを暗号化した場合、復号化しようとすると新しいバージョンでは以下のようにエラーが発生します:
error:06065064:digital envelope routines:EVP_DecryptFinal_ex:bad decrypt:crypto/evp/evp_enc.c:540
-md md5
オプションを指定することで問題は解決します:
$ openssl enc -d -md md5 -in encrypted -out decrypted
Python 3.10 と "ca md too weak" エラー
Python 3.10 のデフォルトでは、許可された OpenSSL 暗号のハードコードされたリストがあります。MD5 のような安全でないものは、OpenSSL のシステム全体の設定を無視して、 ssl
モジュールレベルで無効化されています。その結果、古い証明書や、時には https
接続を確立するときでさえ、奇妙なエラーになることがあります、以下のような:
requests.exceptions.SSLError: HTTPSConnectionPool(host='a.kind.of.example.com', port=443): Max retries exceeded with url: / (Caused by SSLError(SSLError(398, '[SSL: CA_MD_TOO_WEAK] ca md too weak (_ssl.c:3862)')))
Python をシステムの設定に従うようにするには、 --with-ssl-default-suites=openssl
パラメータを ./configure
に追加して再構築する必要があるかもしれません。この問題は FS#73549 としても報告されています。
参照
- Wikipedia の OpenSSL のページ
- OpenSSL プロジェクトページ
- FreeBSD ハンドブック
- 署名済みの SSL 証明書を作成するステップバイステップガイド
- OpenSSL Certificate Authority
- Bulletproof SSL and TLS by Ivan Ristić, a more formal introduction to SSL/TLS