「OpenSSL」の版間の差分

提供: ArchWiki
ナビゲーションに移動 検索に移動
 
(同じ利用者による、間の10版が非表示)
1行目: 1行目:
[[Category:Transport Layer Security]]
+
[[Category:トランスポート層セキュリティ]]
 
[[en:OpenSSL]]
 
[[en:OpenSSL]]
 
{{Related articles start}}
 
{{Related articles start}}
6行目: 6行目:
   
 
[http://www.openssl.org OpenSSL] は SSL と TLS プロトコルのオープンソース実装で、可能な限り柔軟になるように設計されています。BSD, Linux, OpenVMS, Solaris, Windows などの様々なプラットフォームをサポートしています。
 
[http://www.openssl.org OpenSSL] は SSL と TLS プロトコルのオープンソース実装で、可能な限り柔軟になるように設計されています。BSD, Linux, OpenVMS, Solaris, Windows などの様々なプラットフォームをサポートしています。
 
{{Warning|2015年5月に公開された、OpenSSL のプロトコルの利用に関する共同研究によって、SSL 接続に "Logjam" 攻撃と呼ばれる、さらなる危険が存在することが判明しました。結果については https://weakdh.org/ を、推奨されるサーバー側の設定の変更については https://weakdh.org/sysadmin.html を見て下さい。}}
 
   
 
== インストール ==
 
== インストール ==
43行目: 41行目:
 
=== Curve25519 秘密鍵を生成 ===
 
=== Curve25519 秘密鍵を生成 ===
   
$ openssl genpkey -algorithm x25519 -out ''file''
+
$ openssl genpkey -algorithm x25519 -out ''filename''
   
 
=== ECDSA 秘密鍵を生成 ===
 
=== ECDSA 秘密鍵を生成 ===
   
$ openssl genpkey -algorithm EC -pkeyopt ec_paramgen_curve:P-256 -out ''file''
+
$ openssl genpkey -algorithm EC -pkeyopt ec_paramgen_curve:P-256 -out ''filename''
   
 
=== RSA 秘密鍵を生成 ===
 
=== RSA 秘密鍵を生成 ===
53行目: 51行目:
 
''genrsa'' に取って代わる({{man|1ssl|openssl}} によると)、{{man|1ssl|genpkey}} を使用。
 
''genrsa'' に取って代わる({{man|1ssl|openssl}} によると)、{{man|1ssl|genpkey}} を使用。
   
$ openssl genpkey -algorithm RSA -pkeyopt rsa_keygen_bits:''keysize'' -out ''file''
+
$ openssl genpkey -algorithm RSA -pkeyopt rsa_keygen_bits:''keysize'' -out ''filename''
   
 
暗号化された鍵が必要な場合は、{{ic|-aes-256-cbc}} オプションを使用します。
 
暗号化された鍵が必要な場合は、{{ic|-aes-256-cbc}} オプションを使用します。
63行目: 61行目:
 
$ openssl req -new -sha256 -key ''private_key'' -out ''filename''
 
$ 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 -noout -text -in ''filename''
79行目: 77行目:
 
$ openssl req -x509 -newkey rsa:4096 -days ''days'' -keyout ''key_filename'' -out ''cert_filename''
 
$ openssl req -x509 -newkey rsa:4096 -days ''days'' -keyout ''key_filename'' -out ''cert_filename''
   
  +
=== CA 証明書による証明書署名要求への署名 ===
=== Diffie–Hellman パラメーターを生成 ===
 
   
  +
$ openssl x509 -req -in ''cert_req_filename'' -days ''days'' -CA ''CA_cert'' -CAkey ''CA_cert_private_key'' -CAserial ''CA_cert_serial_file'' -out ''cert_out''
詳細については、[[Wikipedia:Diffie–Hellman key exchange|Diffie–Hellman key exchange]] を参照してください。
 
  +
  +
=== ディフィー・ヘルマン パラメーターを生成 ===
  +
  +
詳細については、[[Wikipedia:ja:ディフィー・ヘルマン鍵共有|ディフィー・ヘルマン鍵共有]]を参照してください。
   
 
現在の[[MozillaWiki:Security/Server Side TLS|ベストプラクティス]]は、RFC 7919の標準的なDHグループの1つ、例えば [https://ssl-config.mozilla.org/ffdhe2048.txt ffdhe2048] を使用することです。
 
現在の[[MozillaWiki:Security/Server Side TLS|ベストプラクティス]]は、RFC 7919の標準的なDHグループの1つ、例えば [https://ssl-config.mozilla.org/ffdhe2048.txt ffdhe2048] を使用することです。
90行目: 92行目:
   
 
{{Tip|特にハイエンドのハードウェアでない場合、生成を高速化するには、{{ic|-dsaparam}} オプションを追加します[https://security.stackexchange.com/questions/95178/diffie-hellman-parameters-still-calculating-after-24-hours/95184#95184]。}}
 
{{Tip|特にハイエンドのハードウェアでない場合、生成を高速化するには、{{ic|-dsaparam}} オプションを追加します[https://security.stackexchange.com/questions/95178/diffie-hellman-parameters-still-calculating-after-24-hours/95184#95184]。}}
  +
 
=== 証明書情報を表示 ===
 
=== 証明書情報を表示 ===
   
106行目: 109行目:
 
$ 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 3 では、OpenSSL プラグ可能性の新しい概念としてプロバイダーが導入されました。 OpenSSL に含まれていないアルゴリズムを再コンパイルすることなく使用できます。たとえば、[https://csrc.nist.gov/projects/post-quantum-cryptography NIST ポスト量子暗号] アルゴリズムをテストするには、[https://openquantumsafe.org/ Open Quantum Safe] プロバイダー {{AUR|oqsprovider}} をインストールできます。例として、[https://pq-crystals.org/dilithium/index.shtml Dilithium] 署名アルゴリズムのバリアントの 1 つを使用して、秘密キーを含む量子安全な自己署名証明書を生成できます。
   
 
$ openssl req -provider oqsprovider -x509 -newkey dilithium3 -days ''days'' -keyout ''key'' -out ''cert''
 
$ openssl req -provider oqsprovider -x509 -newkey dilithium3 -days ''days'' -keyout ''key'' -out ''cert''
133行目: 136行目:
   
 
Python をシステムの設定に従うようにするには、 {{ic|1=--with-ssl-default-suites=openssl}} パラメータを {{ic|./configure}} に追加して再構築する必要があるかもしれません。この問題は {{Bug|73549}} としても報告されています。
 
Python をシステムの設定に従うようにするには、 {{ic|1=--with-ssl-default-suites=openssl}} パラメータを {{ic|./configure}} に追加して再構築する必要があるかもしれません。この問題は {{Bug|73549}} としても報告されています。
  +
  +
=== Error setting cipher XXX ===
  +
  +
「廃止された」暗号を使用しようとすると、次のようなエラーが発生します:
  +
  +
$ openssl bf -d -in cipher_file -K passphrase
  +
Error setting cipher BF-CBC
  +
4087A97A8A7F0000:error:0308010C:digital envelope routines:inner_evp_generic_fetch:unsupported:crypto/evp/evp_fetch.c:341:Global default library context, Algorithm (BF-CBC : 12)
  +
  +
OpenSSL 3.0 以降、暗号化アルゴリズムは「プロバイダー」を通じて提供されます。最も古いまたはあまり使用されないアルゴリズムは、レガシープロバイダーに属します。[https://www.openssl.org/docs/man3.0/man7/OSSL_PROVIDER-legacy.html]
  +
  +
DES、RC4、Blowfish などの廃止されたアルゴリズムを使用する必要がある場合は、コマンドラインに {{ic|-provider legacy}} オプションを追加する必要があります。
  +
  +
Blowfish 暗号をデコードするための完全な例を以下に示します。
  +
$ openssl bf -d -in cipher_file -provider legacy -provider default -K passphrase
   
 
==参照==
 
==参照==
139行目: 157行目:
 
* [https://www.freebsd.org/doc/ja/books/handbook/openssl.html FreeBSD ハンドブック]
 
* [https://www.freebsd.org/doc/ja/books/handbook/openssl.html FreeBSD ハンドブック]
 
* [http://www.akadia.com/services/ssh_test_certificate.html 署名済みの SSL 証明書を作成するステップバイステップガイド]
 
* [http://www.akadia.com/services/ssh_test_certificate.html 署名済みの SSL 証明書を作成するステップバイステップガイド]
* [https://jamielinux.com/docs/openssl-certificate-authority/ OpenSSL Certificate Authority]
+
* [https://jamielinux.com/docs/openssl-certificate-authority/ OpenSSL Certificate Authority]: 独自の認証局として機能する方法を説明するガイド。
* [https://www.feistyduck.com/books/bulletproof-ssl-and-tls/bulletproof-ssl-and-tls-introduction.pdf Bulletproof SSL and TLS] by Ivan Ristić, a more formal introduction to SSL/TLS
+
* [https://www.feistyduck.com/books/bulletproof-ssl-and-tls/bulletproof-ssl-and-tls-introduction.pdf Bulletproof SSL and TLS by Ivan Ristić], SSL/TLS のより正式な入門書
  +
  +
{{TranslationStatus|OpenSSL|2024-08-28|806140}}

2024年8月28日 (水) 20:17時点における最新版

関連記事

OpenSSL は SSL と TLS プロトコルのオープンソース実装で、可能な限り柔軟になるように設計されています。BSD, Linux, OpenVMS, Solaris, Windows などの様々なプラットフォームをサポートしています。

インストール

opensslcoreutils の依存関係として、デフォルトで Arch Linux にインストールされます。

開発者向けに様々な OpenSSL ライブラリのバインディングが用意されています。

設定

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 filename

ECDSA 秘密鍵を生成

$ openssl genpkey -algorithm EC -pkeyopt ec_paramgen_curve:P-256 -out filename

RSA 秘密鍵を生成

genrsa に取って代わる(openssl(1ssl) によると)、genpkey(1ssl) を使用。

$ openssl genpkey -algorithm RSA -pkeyopt rsa_keygen_bits:keysize -out filename

暗号化された鍵が必要な場合は、-aes-256-cbc オプションを使用します。

証明書署名要求を生成

req(1ssl) を使用。

$ openssl req -new -sha256 -key private_key -out filename

証明書署名リクエストを表示

証明書署名リクエストはエンコードされた形式で保存されます。リクエストを人間が読める形式で表示するには:

$ 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

CA 証明書による証明書署名要求への署名

$ openssl x509 -req -in cert_req_filename -days days -CA CA_cert -CAkey CA_cert_private_key -CAserial CA_cert_serial_file -out cert_out

ディフィー・ヘルマン パラメーターを生成

詳細については、ディフィー・ヘルマン鍵共有を参照してください。

現在のベストプラクティスは、RFC 7919の標準的なDHグループの1つ、例えば ffdhe2048 を使用することです。

あるいは、自分でランダムなグループを生成することもできます。

$ openssl dhparam -out filename 2048
ヒント: 特にハイエンドのハードウェアでない場合、生成を高速化するには、-dsaparam オプションを追加します[1]

証明書情報を表示

$ 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

サードパーティプロバイダーを使用する

OpenSSL 3 では、OpenSSL プラグ可能性の新しい概念としてプロバイダーが導入されました。 OpenSSL に含まれていないアルゴリズムを再コンパイルすることなく使用できます。たとえば、NIST ポスト量子暗号 アルゴリズムをテストするには、Open Quantum Safe プロバイダー oqsproviderAUR をインストールできます。例として、Dilithium 署名アルゴリズムのバリアントの 1 つを使用して、秘密キーを含む量子安全な自己署名証明書を生成できます。

$ 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 としても報告されています。

Error setting cipher XXX

「廃止された」暗号を使用しようとすると、次のようなエラーが発生します:

$ openssl bf -d -in cipher_file -K passphrase
Error setting cipher BF-CBC
4087A97A8A7F0000:error:0308010C:digital envelope routines:inner_evp_generic_fetch:unsupported:crypto/evp/evp_fetch.c:341:Global default library context, Algorithm (BF-CBC : 12)

OpenSSL 3.0 以降、暗号化アルゴリズムは「プロバイダー」を通じて提供されます。最も古いまたはあまり使用されないアルゴリズムは、レガシープロバイダーに属します。[3]

DES、RC4、Blowfish などの廃止されたアルゴリズムを使用する必要がある場合は、コマンドラインに -provider legacy オプションを追加する必要があります。

Blowfish 暗号をデコードするための完全な例を以下に示します。

$ openssl bf -d -in cipher_file -provider legacy -provider default -K passphrase

参照

翻訳ステータス: このページは en:OpenSSL の翻訳バージョンです。最後の翻訳日は 2024-08-28 です。もし英語版に 変更 があれば、翻訳の同期を手伝うことができます。