順序を知りたいです。openssl smime 署名消化値を得るために。
以下のようなもの -
MIME-Version: 1.0
Content-Type: multipart/signed;protocol="application/pkcs7-
signature";micalg="sha-256";boundary="707e08bf1d5b44f6b18bc0999df569c8"
This is an S/MIME signed message
--707e08bf1d5b44f6b18bc0999df569c8
<cms>
<file>
<name>index.xml</name>
<digest>4pDBO3/ZNCpaAvxOWbQ0AUnDbT1oAaWMrPIDZz/a1i0=</digest>
<digesttype>sha256</digesttype>
<path>.</path>
</file>
</cms>
--707e08bf1d5b44f6b18bc0999df569c8
Content-Type: application/pkcs7-signature; name="smime.p7s"
Content-Transfer-Encoding: base64
Content-Disposition: attachment; filename="smime.p7s"
MIAGCSqGSIb3DQEHAqCAMIACAQExDzANBglghkgBZQMEAgEFADCABgkqhkiG9w0B
...
生成するコマンドは何ですか?
以下を使用して確認してください -
openssl smime -verify -in sign -CAfile Sign_Key.crt -out xmlwithdigest
openssl dgst -binary -sha256 infile | openssl base64
その後、消化値を比較しますか?
答え1
あなたのEメールは、S / MIMEプレーンテキストで署名された(分離署名とも呼ばれる)Eメールを送信しようとします。rfc5751秒 3.4.3et predは実際には正確ではありませんが、最初の部分はデータエンティティであり、MIMEヘッダーはありません。
OpenSSLを含む一部のソフトウェアはこれらのバイアスを処理できますが、OpenSSL(まだ!)はメッセージのように最新バージョンのサブタイプを使用するのではなく、x-pkcs7-signature
v2サブタイプ(rfc2311)を使用して独立した署名を生成します。pkcs7-signature
これらのS / MIMEメッセージに使用されるPKCS7 / CMS分離署名には、使用または使用されない可能性があるいくつかのオプションのコンポーネントがあります。表示された切り捨てられたデータでは、メッセージがどのオプションを使用しているかはわかりません。
生成するコマンドは何ですか?
OpenSSLを使用して、openssl smime -sign -sha256 -signer $certfile [-inkey $keyfile]
いいえ -nodetach
前のサブタイプとを使用して、上記のものを除き、この形式でメッセージを生成しますx-
。-inkey
秘密鍵が証明書と同じファイルに含まれている場合は、このオプションを省略できます。あなたは選ぶことができます:
署名者の証明書を含めるか除外します。
追加(チェーン)証明書を明示的に含める
システムのマニュアルページに記載されているように、signedAttributesを有効または無効にするまたはオンライン。名前付きファイルで入力と出力を実行したり、stdinとstdoutを使用したり、順番にシェル(またはオペレーティングシステム)によってリダイレクトまたはパイプ処理することができます。
非常に古いOpenSSLバージョン(0.9.8以下)に加えて、実際に次の
openssl cms
親セットであるOpenSSLバージョンを使用することもできます。openssl smime
デフォルトS/MIME 実行 - インポート誰でもopenssl smime
またはopenssl cms
-outform
CMSを実行するには、署名、暗号化、-inform
確認、または復号化を指定する必要があります。
Qのコマンドはsmime verify
S / MIME署名を確認してから(デフォルトで適用可能な証明書チェーンもありますが、スタンドアロン証明書を使用しているようで、実際のチェーンはありません)、それを破棄して署名付きデータのみを出力します。この例ではXMLです。
外部ラベル<cms>
できるこれは、このデータが後続のPKCS7(rfc5652 et pred)の暗号化メッセージ構文を表すためのものですが、このデータの組み合わせはどのCMSメッセージにも対応しないことを意味します。名前は、特定のファイルのハッシュが含まれていることを示します。ファイルの(意図された)コピーがあり、ファイルのハッシュを確認したい場合、OpenSSLはそれを自動的に実行することはできません({md5,sha1,etc}sum -c
単純な一時テキストでも可能です)。通常のUnixコマンドを使用して確認されます)。 2番目のコマンドが正しく開始されたことを手動で確認してXMLからハッシュを抽出するには、次のようにします。
$ grep -Po '<digest>\K[^<]*'
あるいは、PCREのgrepがない場合、ここのsed awk perl
他のQはほぼ確実に同等の項目を扱い、両方のハッシュをshell test "$x" == "$y"
、[ "$x" == "$y" ]
bash、ksh、zsh [[
、またはawk
他と比較します。perl
OTOH、あなたの質問は実際に作るXML本文の場合、OpenSSLは残りの部分に対してハッシュ値のみを実行できるため、標準のテキストツールまたはXMLツールを使用する必要があります。