質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
DNS

DNSとは、Domain Name Systemのことで、インターネットなどのTCP/IPネットワーク上でドメイン名やホスト名と、IPアドレスとの対応づけを管理するシステムです。DNSのデータベースは、IPアドレスの4つの数字を通知するDNSサーバーで構築されており、IPアドレスをドメイン名から引き出す機能やドメイン名に関するメールサーバ情報を取り扱っています。

Go

Go(golang)は、Googleで開発されたオープンソースのプログラミング言語です。

SMTP

SMTP(Simple Mail Transfer Protocol)はIPネットワークでemailを伝送する為のプロトコルです。

Q&A

2回答

3718閲覧

プログラムから送信したメールのDKIM認証に失敗する

4mmsod

総合スコア15

DNS

DNSとは、Domain Name Systemのことで、インターネットなどのTCP/IPネットワーク上でドメイン名やホスト名と、IPアドレスとの対応づけを管理するシステムです。DNSのデータベースは、IPアドレスの4つの数字を通知するDNSサーバーで構築されており、IPアドレスをドメイン名から引き出す機能やドメイン名に関するメールサーバ情報を取り扱っています。

Go

Go(golang)は、Googleで開発されたオープンソースのプログラミング言語です。

SMTP

SMTP(Simple Mail Transfer Protocol)はIPネットワークでemailを伝送する為のプロトコルです。

1グッド

0クリップ

投稿2017/02/14 03:01

編集2017/02/14 03:30

環境

Amazon Linux
Golang1.6
パッケージ :
https://golang.org/pkg/net/smtp/
https://godoc.org/github.com/eaigner/dkim
テスト:
port25.comのAuthentication Report

困っていること

Goのプラグラムからsmtpパッケージを用いてメールを送信し、DKIM認証させたいのですが認証に失敗してしまいます。

DNS record

  • ドメイン名はマスクしています。鍵は1024bitsで作成しています。
dev._domainkey.xxxxx.jp. 60 IN TXT "v=DKIM1; k=rsa; t=s; p=MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDvNOCb0UpabliOOBxAmbzceAxrDsikKgCOlnQ9gHrwXloCgTH9dMYK1YBuCsTi0Zvva1h2mKuNbkj2JaGzDWSXNJObrsPwyxfm5eTS/vKrL55+i6C5EN2lfhn4AWZ4F8SvCUkluro7LVpRo99rUyMQSS9HS4Yp0sQW+TA5byLk/wIDAQAB"

DKIM Signature

dkim-signature:v=1; a=rsa-sha256; c=relaxed/relaxed; d=xxxxx.jp; q=dns/txt; s=dev; t=1486696526; bh=<ボディハッシュ>; h=From:Subject:To; b=<ハッシュ>

結果

fail (signature doesn't verify)
"fail" The message was signed and the signature or signatures were acceptable to the verifier, but they failed the verification test(s).

メッセージ

From: "4mmsod" <sample@xxxxx.jp> To: check-auth@verifier.port25.com Subject: test_subject dkim-signature:v=1; a=rsa-sha256; c=relaxed/relaxed; d=xxxxx.jp; q=dns/txt; s=dev; t=1486696526; bh=<ボディハッシュ>; h=From:Subject:To; b=<ハッシュ> Message-ID: <0.0.9.FF.1D2834BECD37FAE.0@verifier.port25.com> test_body

DKIMサイン関数

  • privateKeyは同ファイル内のinitで[]byteで秘密鍵を宣言
func SignDKIM(data []byte) ([]byte, error) { if conf, err := dkim.NewConf("xxxxx.jp", "dev"); err != nil { return nil, err } else { conf[dkim.CanonicalizationKey] = "relaxed/relaxed" conf[dkim.TimestampKey] = fmt.Sprintf("%d", time.Now().Unix()) if d, err := dkim.New(conf, privateKey); err != nil { return nil, err } else { if signed, err := d.Sign(data); err != nil { return nil, err } else { return signed, nil } } } }

よろしくお願いします。不備などございましたら追記いたします。

mtempa👍を押しています

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答2

0

確証はないのですが、DKIM.Sign()のソースを見る限り、署名するメッセージデータでは改行をすべてCRLF ("\r\n") にしておかないといけないように思います。LF ("\n") になっていたりしませんか。

(追記)

これも確証はないのですが、DKIMで署名するメッセージデータは改行 (CRLF) で終わっていなければなりません (本文の最後の行に改行がないものは正しく処理できない、ということです)。念のためですがご確認下さい。

投稿2017/02/14 03:57

編集2017/02/14 09:59
ikedas

総合スコア4317

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

4mmsod

2017/02/14 05:10

ご回答ありがとうございます。 改行コード(と半角スペース)表示したところ ``` from:"4mmsod"'20'<sample@xxxxx.jp>'0D''0A' subject:hello'0D''0A' to:check-auth@verifier.port25.com'0D''0A' dkim-signature:v=1;'20'a=rsa-sha256;'20'c=relaxed/relaxed;'20'd=xxxxx.jp;'20'q=dns/txt;'20's=dev;'20't=1486696526;'20'bh=<ボディハッシュ>;'20'h=From:Subject:To;'20'b=<ハッシュ> ``` となっており0D0AなのでCRLFにはなっていると思います。。。
ikedas

2017/02/14 05:15 編集

いえ、署名ずみのメッセージではなく、署名する前のメッセージデータ (SignDKIM()のdata引数に入れるもの) のことです。改行がCRLFになっているでしょうか。
4mmsod

2017/02/14 06:08

署名前のメッセージを標準出力させてみましたが、CRLFでした。 {"log":"From:sample@xxxxx.jp\r\n","stream":"stdout","time":"2017-02-14T06:02:08.613253179Z"} {"log":"To:sample@xxxxx.jp\r\n","stream":"stdout","time":"2017-02-14T06:02:08.613270191Z"} {"log":"Subject:hello\r\n","stream":"stdout","time":"2017-02-14T06:02:08.613274733Z"} {"log":"\r\n","stream":"stdout","time":"2017-02-14T06:02:08.613278474Z"} {"log":"line 1\r\n","stream":"stdout","time":"2017-02-14T06:02:08.613282006Z"} {"log":"line 2\r\n","stream":"stdout","time":"2017-02-14T06:02:08.613285525Z"} {"log":"line 32017-02-14 15:02:08.632
guest

0

気づいた点です。

DKIM-Signature の
bh<ボディハッシュ> は
bh = <ボディハッシュ> ではないでしょうか?

他にも原因があるかもしれませんが。

投稿2017/02/14 03:23

granfa_yuzo

総合スコア356

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

4mmsod

2017/02/14 03:29

ご指摘ありがとうございます。質問作成時のミスです。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問