私の目標は、秘密鍵を作成し、それを強力な暗号で暗号化することでした。そのキーは、内部の証明機関のルート証明書として使用されます。
ただし、opensslはAES 128 GCMをサポートしていますが、この暗号化アルゴリズムを使用してキーを生成および暗号化することはできません。 OpenSSLはerror writing key
を報告します。 AES 128/256 GCMは両方とも失敗しましたが、AES 128 CBCは機能しました。 何が問題なのですか?GCMを使用するときに追加のパラメーターが必要ですか?
コマンドは次のとおりです。
$ openssl genpkey -out ca.key.pem -aes-128-gcm -algorithm rsa -pkeyopt rsa_keygen_bits:4096
出力は次のとおりです。
.........................................................................+++
............................+++
Enter PEM pass phrase:
Verifying - Enter PEM pass phrase:
Error writing key
:error:23077006:PKCS12 routines:PKCS12_pbe_crypt:EVP lib:p12_decr.c:96:
:error:2306C067:PKCS12 routines:PKCS12_item_i2d_encrypt:encrypt error:p12_decr.c:175:
:error:2307D067:PKCS12 routines:PKCS8_encrypt:encrypt error:p12_p8e.c:88:
注:ほとんどのオンラインリソースは古くなっており(脚注1)、置き換えられたgenrsaまたは-nodes/-desフラグを使用しています。したがって、私はこれらのオンラインリソースを基礎として使用し、さらにopensslの(かなり古くなった)manページとさまざまなopensslコマンドの「-help」フラグを使用して、上記のIMHOの最新のコマンドを作成しています
上記のコマンドで、私は-aes-128-gcm
を次のものに置き換えようとしました:
-aes-256-gcm
-aes-128-xts
-aes-256-xts
そして、すべてが失敗しました。 XTSは次のエラーで失敗しました:
:error:0D0A706C:asn1 encoding routines:PKCS5_pbe2_set_iv:cipher has no object identifier:p5_pbev2.c:103:
:error:2307D00D:PKCS12 routines:PKCS8_encrypt:ASN1 lib:p12_p8e.c:79:
使用:
-aes-128-cbc (like in an example in the man page from genpkey)
-aes128
-aes256
すべてうまくいきました。
奇妙なことに、上記の暗号はすべて、私が使用しているopensslのバージョンでサポートされています。
$ openssl enc -help 2>&1 | grep aes | egrep "128|256"
-aes-128-cbc -aes-128-cfb -aes-128-cfb1
-aes-128-cfb8 -aes-128-ctr -aes-128-ecb
-aes-128-gcm -aes-128-ofb -aes-128-xts
-aes-192-gcm -aes-192-ofb -aes-256-cbc
-aes-256-cfb -aes-256-cfb1 -aes-256-cfb8
-aes-256-ctr -aes-256-ecb -aes-256-gcm
-aes-256-ofb -aes-256-xts -aes128
-aes192 -aes256
注:Ubuntu 14.04.2、Debian 7.8、CentOS 7でテストされています。すべて同じ動作を示しました。
footnote-1:グーグル " openssl generate self signed root certificate "の場合、最初の5つの結果はどれもルートプライベート証明書をトリプルDESよりも良いもので暗号化します!?! 5つの第1リンクの1つのリンクは4096ビットを推奨し、もう1つのリンクは2048または1024を提供します!?!ほとんどは暗号フラグを提供しないため、キーは暗号化されません。実際、 7番目のリンク だけが、何をどのように行うかを説明するのにまともな仕事をします。
更新20161218:openssl 1.0.2gを搭載したUbuntu 16.04 LTSで再度テストされ、成功しませんでした。
更新された回答:
によると: https://groups.google.com/forum/#!msg/mailing.openssl.users/hGggWxfrZbA/unBfGlsfXyoJ gcmサポートは現在v1.0.1fで壊れています使用)。バージョンv1.0.1.gのパッチが存在し、実行可能なGCMモードになるはずです。ただし、現在のところ、キーラッピングはopenssl genrsa
およびopenssl genpkey
から完全にサポートされているため、CBCモードをそのまま使用します。
古い答え:
文書によると: https://www.openssl.org/docs/apps/ciphers.html
[〜#〜] aesgcm [〜#〜]ガロアカウンターモード(GCM)のAES:これらの暗号スイートのみがサポートされますTLS v1.2
以前のバージョンのUbuntu状態のopensslの変更ログ:openssl(1.0.1e-4ubuntu2)trusty; urgency = low * TLSv1.2の完全なサポートを再度有効にする(LP:#1257877)-debian/patches/tls12_workarounds.patch:TLSv1.2の完全なサポートを再度有効にするパッチを無効にします。現在、問題のあるサイトのほとんどが修正されており、LTSで適切なTLSv1.2サポートが本当に必要です。現在、1.0.1f-1ubuntu9.1をインストールしているので、少なくとも理論的には動作するはずです。しかし、私はあなたを保証することができます、それはしません。モードはまだ壊れていると考えられているかもしれませんが、私は仮定しているだけです。