web-dev-qa-db-ja.com

PEMへの秘密鍵

私はセキュリティに不慣れで、マシンとサーバー間のSSL暗号化通信をデコードしようとしています。秘密鍵がこれであると理解している限り、私はなんとか秘密鍵と公開鍵を取得できました。

-----BEGIN RSA PRIVATE KEY----- 

[private key content]

-----END RSA PRIVATE KEY-----

ただし、Wiresharkは通信をデコードするためにキーを.pem形式にする必要があります。どうにかしてキーをこの形式に変換できますか?いいえの場合、それらのパッケージを使用するアプリケーションはそれらをどのようにデコードしますか?

7
blaz11

「.PEM形式」は、実際には標準として存在しません。これは、「OpenSSLの機能」です。

PEMは Privacy Enhanced Mail の古い失敗した標準に由来します(それが頭字語の意味です)。最近、「PEM」は本当に意味します:次のようなテキスト:

-----BEGIN XXX-----
[some Base64 stuff here]
-----END XXX-----

つまり-----で始まり、データのタイプの指定(「RSA PRIVATE KEY」など)を含むヘッダー行。同様のトレーラーライン;そして、これらの2行の間に、 Base64 でエンコードされたバイナリオブジェクト。

RSA秘密鍵の場合、主に2種類のPEMエンコード形式に遭遇します。ヘッダーに「BEGIN RSA PRIVATE KEY」が含まれている場合、これは PKCS#1 で記述された形式のRSA秘密鍵です。ヘッダーに「BEGIN PRIVATE KEY」(「RSA」なし)と表示されている場合、 PKCS#8 を使用します。これは、鍵タイプ(「RSA」)と秘密鍵の指定を含むラッパー形式です自体。

あなたの場合、PEMのように見え、-----BEGIN RSA PRIVATE KEY-----で始まるものが表示された場合、それはisPEMです。それをテキストファイルに入れて、何らかの名前(たとえば「serverkey.pem」)で保存し、そのファイルをサーバーキーとして使用するようにWiresharkを構成します。これは Wiresharkのドキュメント で説明されています。

ただし、いくつかの詳細に注意してください。

  • ファイルがUTF-16でエンコードされている場合、Wiresharkはおそらくファイルを読み取ることができません(Windowsが "Unicode"と誤って呼ぶもの)。 UTF-16では、各文字が2バイト(または Pahawh Hmong などの一部の文字の場合は4バイト)にエンコードされます。 Windowsのメモ帳を使用している場合は、ファイルを保存するときに、「ANSI」または「UTF-8」エンコーディングを選択します。

  • クライアントとサーバーが「DHE」または「ECDHE」暗号スイートを使用している場合、サーバーの秘密鍵を知るだけではデータを復号化できません。クライアントとサーバーがそのような暗号スイートを使用することに同意し、それでもデータをインターセプトしたい場合は、active攻撃(a- Man-in-the-Middle )クライアントと通信するときにサーバーを偽装し、サーバーと通信するときにクライアントを偽装します。これははるかに多くの作業であり、Wiresharkはそこではあまり役に立ちません。

7
Tom Leek

拡張子が「.pem」のファイルを作成して、使用してみてください。

これによると ページ で、秘密鍵はあなたが説明したようにPEMファイルに保存されます:

-----BEGIN RSA PRIVATE KEY----- 

[code in whatever format it may be]

-----END RSA PRIVATE KEY-----
2
feral_fenrir