問題タブ [dkim]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
email - ドメインに応じて電子メールに署名する
同じサーバーで複数の Web サイトを実行しており、それらすべてに DKIM 署名をセットアップしようとしています。私はこの優れたガイドに従い、最初の試行で PHP から署名済みの電子メールを正常に送信できました。
問題は、すべての送信メールが同じドメインで署名されていることですが、代わりにそれぞれのドメインで署名したいのです。署名テーブルを介して署名する電子メールを選択できますが、ドメイン X からのすべての送信電子メールに署名 Y で署名することを選択できないようです。
これは可能ですか? その場合、どうすればよいですか?
前もって感謝します。
- OS:デビアン
- ウェブサーバー: Nginx + PHP-FPM
- メールサーバー: Postfix
- DKIM:オープンDKIM
dkim - DKIM 署名: 頭痛の種と問題が山積み
ドメインから送信されるニュースレター (メーリング リスト) に DKIM 署名を適用しようとしています。残念ながら、ここでドメインの名前を明らかにすることはできないので、{mydomain}.co.il と呼びます。私のセレクターは「mta1」です。
オンラインの指示に従ってティーを作成しましたが、結果をテストすると、署名のあらゆる面でエラーが発生しました!
http://www.port25.com/support/domainkeysdkim-wizard/を使用して公開鍵と秘密鍵を作成しました。行を含む秘密鍵全体を.pemファイルにコピーしました
ドメインで DKIM 署名を使用するように hMailServer をセットアップし、それを秘密鍵に向けて、SHA1 を使用するように指示しました (これは CPU への負荷が少なく、大量のメーリング リストにより適していると理解しています)。
そしてもちろん、次のように DNS レコードをセットアップします。
最初に、 http://dkimcore.org/tools/dkimrecordcheck.htmlでDNS レコードを確認したところ、次のような愚かさがわかりました。
...しかし、これは port25.com によって生成された公開鍵の正確なコピーです!
次に、次のような実際の DKIM 署名をテストしました。
http://www.appmaildev.com/en/dkim/でDKIM 署名付きメールをテストしたところ、次のエラーが表示されました。
...しかし、これは真実ではありません!
次のエラーも発生しました。
私は何を間違っていますか?これを修正するために私ができることを誰かが知っていますか?
email - Amazon の Route 53 での Mandrill の DKIM
Amazon の Route 53 で DKIM レコードを設定しようとしています。次のような名前の TXT レコードを追加することを選択しました: mandrill._domainkey.domain.com
値は次のとおりです。
"v=DKIM1; k=rsa; p=MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQCrLHiExVd55zd/IQ/J/mRwSRMAocV/hMB3jXwaHH36d9NaVynQFYV8NaWi69c1veUtRzGt7yAioXqLj7Z4TeEUoOLgrKsn8YnckGs9i3B3tVFB+Ch/4mPhXWiNfNdynHWBcPcbJ8kjEQ2U8y78dHZj1YeRXXVvWob2OaKynO8/lQIDAQAB;"
しかし、Route 53 は次のことについて不平を言い続けます。
次の理由により、レコード セットを保存できませんでした: - [値] フィールドに無効な文字が含まれているか、無効な形式です。
zend-mail - DKIM ヘッダーの正規化では、To: ヘッダーの各コンマの後にスペースが挿入されますか?
Zend Framework 1.12、PHP 5.3.1 を使用。Zend_Mail に複数のメール受信者を指定し、Smtp トランスポートを使用すると、"To:" ヘッダーにはコンマで区切られた受信者のリストが含まれます。例えば
To: a@example.com,b@example.com
これは、 RFC 2822によると正しい構文のようです。DKIM 署名 ( https://github.com/louisameline/php-mail-signatureを使用) を追加しました。これは正常に機能し、gmail やその他の検証者が単一の To: 受信者で受け入れた署名を渡します。ただし、受信者が複数の場合、署名は失敗します。
署名付きメールを に送信check-auth@verifier.port25.comすると、さまざまなチェックの結果の中で、計算されたヘッダーと本文の正規化されたバージョンを含む電子メールが Return-path に返されます。To: ヘッダーを正規化するときに、各コンマの後にスペースが追加されていることがわかります (ヘッダーと本文の両方に緩和された正規化を指定しています)。実際、署名生成をハックして、To: ヘッダーを正規化するときにそのスペースを追加しました。これで問題が解決しました。port25.com ベリファイア、gmail などは署名を渡すようになりました。
しかし、 RFC 6376のセクション 3.4 をかなり注意深く読んだことや、上記で参照した github からダウンロードした署名クラスのコードなど、DKIM の緩和された正規化について私が見た説明では、何も追加されていない場所に空白を追加するものは何もありません。オリジナルに存在します。指定された正規化はすべて、既存の空白の変更に関するものです。
したがって、ポート 25 ベリファイアによって行われている正規化は、RFC 6376 と矛盾しているように思えます。ただし、gmail、autorespond+dkim-relaxed@dk.elandsys.com、およびhttp://www.appmaildevなどの他の DKIM ベリファイアは例外です。 com/en/dkim/はすべて最終結果に同意します (port25 のように実行した正規化は表示されませんが、カンマの後のスペースで正規化しないと、署名が拒否されます)。
ここに誰かがこれについて何か洞察を持っていますか? この分野での実践は、2011 年付けの RFC と一貫して異なるように見えるため、RFC を更新するべきではありませんか? もちろん、WSP を単一のスペースに置き換える前に、To: ヘッダー値のすべてのカンマをカンマ スペースに正規化する必要があるかどうか、および他のヘッダーが影響を受けるかどうかという問題もあります。
最終決議の概要
Evan の答えは OP に関して正確でした。私の MTA は、バリデーターの正規化ではなく、スペースを追加していました。実際に受信した To: ヘッダーを十分に注意深く見ていませんでした。
しかし、それを知っていても、正しい署名を生成するという問題を完全に簡単に解決できるわけではありません。「根本的な」問題は、Zend_Mail がヘッダー内のアドレスリストの値を生成する際に、カンマを区切り文字として使用して後続のスペースを使用しないことです。これは完全に有効な構文ですが、MTA がそれぞれの後にスペースを導入することも完全に有効です。また、RFC 6376 で指定され、広く実装されている緩和された正規化は、このような MTA の書き換えに対応していません。Zend_Mail のコードを変更してカンマ スペースを区切り記号として使用するのは簡単なことですが、それはかなり長くて複雑なメソッドの途中で行われるため、オーバーライドするためにコピー アンド ペーストを大量に行う必要があり、間違っていると感じられます。それで、私がやったことは、ヘッダーに署名する前にヘッダーにスペースを入れるプレフィルターを書くことでした。
python - Python で DKIM を使用して電子メールに手動で署名する
私はPythonが初めてで、ソケット通信を介して電子メール送信スクリプトを作成しようとしていますが、dkimpy libで署名できないようです。Web でいくつかの例を試しましたが、dkim.sign を実行するとすべて同じエラーが返されました。
私が知る限り、dkim.sign 関数の最初の変数は文字列でなければならないので、念のため readlines() と .as_string() を試しました。メッセージを確認したところ、RFC822 に準拠しているようです。しかし、誰かがそれが問題かもしれないと思うかどうかを再確認します. dkim.sign がなくても完全に機能します (SPF/DKIM などのセキュリティを除く)
これは私が使用しているコードのスニペットです:
解析されたヘッダーは、ソケット送信スクリプトへの入力としても使用されます。私はテスト目的で dkim キーを持っていますが、その点にさえ達していないと思います。
洞察はありますか?
編集: わかりました、dkimpy lib の dkim.rfc822_parse を使用して文字列を (署名する代わりに) 解析しようとしたところ、次のエラーが発生しました。
私はこの書き込みを読んでいるのですか、それともコードが文字列を期待しているように見えますが、パターンはバイト単位ですか?
修正済み: 奇妙なことに、private_key をチェックしようとは思いませんでした。Win で手動でキーを作成したので、知らないうちに、Windows は vim や nano でさえ見ることができない目に見えない改行文字を追加しました。MCEdit で削除した後、プログラムは問題なく動作しました。助けてくれてありがとう :)
dkim - opendkim でドメイン電子メールに複数の署名ヘッダーを追加する方法
サーバーでopendkimを実行しています。
このサーバーには、次の 2 つのドメインがあります。
- メイン
- 送信メールのゲートウェイ
ここで、署名テーブルに各ドメインごとに署名を追加しますDKIM。
セカンダリ ドメインに 2 つの標識を追加できるかどうかを知りたいです。
私たちのサーバーがメインドメインのIPを使用MAILGUNし、同じことを行い、のDKIM署名をmailgun.org追加し、DKIM署名を追加するときに、受信フォルダーに到達するために、メインドメインの署名とセカンダリドメインの署名をセカンダリドメインのメールyourdomain.orgに追加したいので、これが必要です迷惑メールフォルダではなく、Gmail で。DKIMDKIM
よろしくお願いします。
php - カスタムメールヘッダーを使用した DKIM?
PHPMailer を使用して、自分の Web サイトから SPF/DKIM メールを送信することに成功しています。成功したように、そのスパム評価は事実上ゼロになりました。
ただし、その値の信頼性を確保するために、署名にカスタム メール ヘッダーを追加したいと考えています。
- これはできますか?
- これは PHPMailer で実行できますか?
- はいの場合:どのように?
図:
カスタム フィールドがあるとしますX-app-originalSender。
送信メール メッセージのソースを見ると、
私はこの行に最も興味をそそられh=From:To:Subject;、カスタム フィールドを追加する方法があるに違いないと考えています。
どのように?
DKIM 仕様
http://dkim.org/specs/draft-allman-dkim-base-01.html#rfc.section.3.5から
署名されたヘッダー フィールド (プレーン テキスト、ただし説明を参照してください。必須)。署名アルゴリズムに提示されるヘッダー フィールドを識別するヘッダー フィールド名のコロンで区切られたリスト >。フィールドには、署名アルゴリズムに提示された順序でヘッダー フィールドの完全なリストが含まれている必要があります。フィールドには、署名されたときに存在しないヘッダー フィールドの名前が含まれる場合があります。存在しないヘッダー フィールドは、署名の計算に寄与しません (つまり、ヘッダー フィールド名、区切りコロン、ヘッダー フィールド値、および CRLF ターミネータを含めて null 入力として扱われます)。フィールドは同じように扱わなければなりません。このフィールドには、作成または検証中の DKIM-Signature ヘッダー フィールドを含めてはなりません。フォールディング ホワイト スペース (FWS) は、コロン セパレータのいずれかの側に含めることができます。ヘッダー フィールド名は、大文字と小文字を区別しない方法で実際のヘッダー フィールド名と比較する必要があります。ABNF: sig-h-tag = "h="FWS hdr-name 0 ( *FWS ":" *FWS hdr-name ) hdr-name = フィールド名. ただし、送信者は将来どのヘッダー フィールドが作成される可能性があるかを知ることはできず、一部の MUA はメッセージ内に埋め込まれたヘッダー フィールドを (たとえば、メッセージ/rfc822 コンテンツ タイプとして) 提示する可能性があるため、このソリューションのセキュリティは次のとおりです。合計ではありません。有益な説明: ヘッダー フィールド名とコロン、および存在しないヘッダー フィールドのヘッダー フィールド値を除外することで、攻撃者が null 値を持つ実際のヘッダー フィールドを挿入することを防ぎます。
java - Java: DKIM 秘密鍵を RSA から JavaMail の DER に変換する
DKIM for JavaMailを使用して、 DKIM で送信メールに署名しています。
私のプライベート DKIM キーはopendkim-genkey -s default -d example.com次のように生成されます。
JavaMail ライブラリの DKIM には、readme ファイルに記載されているように、DER 形式の秘密 DKIM キーが必要です。
JavaMail の DKIM には DER 形式の秘密鍵が必要です。openssl を使用して PEM キーを変換できます。
openssl pkcs8 -topk8 -nocrypt -in private.key.pem -out private.key.der -outform der
openssl を使用してキーを DER 形式に変換する必要がないようにする方法を探しています。代わりに、Java で直接変換したいと思います。
さまざまな提案(1、2、3 ) を試しましたが、これまでのところ何も機能していません。
DKIM for Java は、DER ファイルを次のように処理します。
結局、私が必要とするのはRSAPrivateKey.
RSAPrivateKeyJavaMail の DKIM が RSA 秘密鍵から必要とするこれを簡単に生成するにはどうすればよいですか?