2017-08-04 10 views
0

OpenSSL以外で暗号化されたPEMエンコードRSAプライベートキーがあります。私はそれにCSRに署名したいと思います。しかし、これは私に最初に解読する必要があります。ただし、 "openssl x509 -req"の-signkey引数がファイルを受け取るため、暗号化されたキーを最初に復号化する必要があります。代替暗号化キーによるCSRへの署名

解読されたキーを最初にディスクに書き込まないようにする方法はありますか?私はできないだろう。

+0

あなたは 'openssl req -new -passin pass:yourpassword -passout pass:yourpassword -key/path/to/your/key_file -out/path/to/your/csr_file -days 365'を試したことがありますか? –

+0

これは、OpenSSLがそれを暗号化している場合にのみ機能します。この場合、他の何かがそれを暗号化しています... –

+0

唯一の方法は、ヘッダを追加することで暗号化されたRSAキーファイルを変更することです(----- BEGIN RSA PRIVATE KEY ----- 、Proc-Type:4、ENCRYPTED、DEK-Info:DES-EDE3-CBC、5B01E932988DC66B)、opensslは暗号化アルゴリズムを認識して鍵を解読できます。そのためにスクリプトを使用することができます。 –

答えて

1

はい、UNIX/LinuxまたはWindows(cygwin)では(例えばzshまたはbash)のシェルを使用する必要があります。のプロセス置換を利用する必要があります。こうしたシェルと

、あなたが通常のファイル名である必要があり、いくつかの引数には、次の構文を使用することができます。

<(my_program_or_shell_command) 

この方法では、シェルは、名前付きパイプを作成して引数を置き換えますこのパイプのファイル名。この疑似ファイルの内容は、my_program_or_shell_commandの出力から読み取られます。

たとえば、現在の日付をこの方法で表示することができます(この回答のすべての例は、cygwinを使用したWindows用です - 同じ構文で同じ方法でUnix/Linuxでも実行できますが、 )同じ形式で:

% cat <(date) 
sam. 5 août 2017 01:33:06 

、それがどのように動作するかを理解し、コマンドラインパラメータを表示するためにechoを使用するには:

% echo <(date) 
/dev/fd/63 

あなたが見ることができるように、コマンドechoは、最初のパラメータとしてファイル名が表示されます。しかし、これは実際のファイルではありません。だから、これは名前付きパイプである

% ls -l <(date) 
lrwxrwxrwx 1 fenyo None 0 5 août 01:34 /dev/fd/63 -> pipe:[400] 

:私たちは、ファイルタイプを表示するlsの代わりechoを使用しています。

したがって、我々は今、あなたの質問に答えることができます。

は、最初のディスクに復号化された鍵を書き込まないようにする方法はありますか?

はい。さんがいるとしましょう:PEMは一度暗号化され、秘密鍵をエンコード

  • 、このプログラムまたはコマンドラインでの復号化されたコンテンツを書き込み、このファイルを復号化することができるプログラムまたはコマンドラインがmy_personal_decrypt_program -myoption private-key.pem.crypt
  • あるprivate-key.pem.crypt
  • 命名されましたその標準出力

あなたが今起動することができます。

openssl req -new [...] -signkey <(my_personal_decrypt_program -myoption private-key.pem.crypt) 

この方法では、-signkeyの直後にファイル名が表示されますが、実際のファイルではありません。内容は出力でmy_personal_decrypt_program -myoption valueです。したがって、ディスクに基づくファイルシステムのように、永続ストレージには何も書き込まれません。すべてがメモリ(カーネルメモリとユーザランドメモリ)で行われます。

最後に、永続的なストレージ上のファイルに秘密がなくても、opensslプロセス(ユーザーのメモリに秘密鍵を格納してCSRを計算できる)スワップパーティション上でスワップされます。例えば、このようにして、メモリ不足の場合には、秘密鍵をスワップに書き込むことができる。したがって、本当に高いレベルのセキュリティが必要な場合は、任意の種類のページングまたはスワップデバイスを使用しないでください。

スワップ可能なカーネルを持つシステムでは、パイプコンテンツ(カーネルメモリ内に一時的に保存される)と同じセキュリティー欠陥が発生する可能性があります(Linuxおよび* BSDカーネルはスワップ可能でないため、これらのオペレーティングシステムに問題があります)。これは、カーネルのメモリスワップを避けるもう一つの理由です(例えばWindowsの場合、カーネルの一部をページファイル=>この機能を無効にしてシステムの信頼性を高めます)。

関連する問題