分类: IT业界
2011-02-20 11:51:38
MDN是由发送方指定,要求接收方回应MDN,并且可以指定MDN回应方式,即回应同步或者异步的MDN.
接收方要发送一个MDN的地址放置在发送方发过来的AS2消息的如下头字段中,
MDN-request-header = "Disposition-notification-to"
":" mail-address
例如:Disposition-notification-to:
MDN使用SMTP传输的用法是遗留的语法。因为这个规范在从SMTP到HTTP协议是被修正过。
这个地址不用来标识MDN要返回的位置。接收应用程序必须忽略这个值,并且不能校验这个地址的语法。
当请求一个基于MDN的收据时,消息创建方在消息体之前提供附加的头信息。这个头的标记如下:
一个Message-ID被增加用来支持消息的顺序,所以一个Original-Message-Id可以作为MDN的一部分被返回。
其他头,尤其是"Subject" 和 "Date"应该被提供,这些头的值经常在人工读取MDN是用到,用来帮助识别原始信息。
当请求时,除非要求一个异步消息否则MDN将会在HTTP响应中返回。
为了请求一个异步的MDN如下的头必须防止在发送的信息中:
Receipt-Delivery-Option: return-URL
例如: Receipt-Delivery-Option:
"receipt-delivery-option: return-url"字符串标志MDN使用的URL,如果收据是同步的则这个头不是会出现。
email值在receipt-delivery-option中是不会出现的因为这个是一个限制地址(参见RFC 2822 )。
receipt-delivery-option的值必须是一个URL;
例如:
Receipt-delivery-option:
Receipt-delivery-option:
Disposition-notification-options头标志了MDN的特性。在这些选项中最重要是的是MDN的签名选项标志。
如下例:
Disposition-notification-options:
signed-receipt-protocol=optional,pkcs7-signature;
signed-receipt-micalg=optional,sha1,md5
实际样式:disposition-notification-options = signed-receipt-protocol=optional, pkcs7-signature; signed-receipt-micalg=optional, sha1, md5
如下:Disposition-notification-options =
"Disposition-Notification-Options" ":"
disposition-notification-parameters
disposition-notification-parameters部分的语法如下:
disposition-notification-parameters =
parameter *(";" parameter)
parameter的语法如下:
parameter = attribute "=" importance ", " 1#value"
importance的语法如下:
importance = "required" | "optional"
所以Disposition-notification-options 部分值形式如下所示:
signed-receipt-protocol=optional,
signed-receipt-micalg=optional,
通常情况下:对于S/MIME分离签名的格式情况
MIC
算法名 值
SHA-1 sha1
MD5 md5
MDN一般格式,AS2-MDN的规范定义如下("|"标志或的关系),AS2-MDN的格式如下:
AS2-MDN=AS2-sync-MDN | AS2-async-http-MDN | AS2-async-smtp-MDN
AS2-sync-MDN =
Status-Line
*(( general-header | response-header | entity-header )
CRLF )
CRLF
AS2-MDN-body
AS2-async-http-MDN =
Request-Line
*(( general-header | request-header | entity-header )
CRLF )
CRLF
AS2-MDN-body
AS2-MDN-body =
AS2-signed-MDN-body | AS2-unsigned-MDN-body
AS2-MDN-body是一个带有“disposition-notification”报告类型为multipart/report的MIME 。
当消息是不签名时AS2-MDN包含指定为"multipart/report"类型的。
第一部分是可以人工读取的部分,包含了部署信息的普通描述。
第二部分是机器可以读取的部分,它的定义如下:
AS2-disposition-notification-content =
[ reporting-ua-field CRLF ]
[ mdn-gateway-field CRLF ]
final-recipient-field CRLF
[ original-message-id-field CRLF ]
AS2-disposition-field CRLF
*( failure-field CRLF )
*( error-field CRLF )
*( warning-field CRLF )
*( extension-field CRLF )
[ AS2-received-content-MIC-field CRLF ]
实际报文样式
AS2-disposition-field =
"Disposition" ":" disposition-mode ";"
AS2-disposition-type [ '/' AS2-disposition-modifier ]
disposition-mode =
action-mode "/" sending-mode
action-mode =
"manual-action" | "automatic-action“
sending-mode =
"MDN-sent-manually" | "MDN-sent-automatically"
AS2-disposition-type =
"processed" | "failed"
AS2-disposition-modifier =
( "error" | "warning" ) | AS2-disposition-modifier-extension
AS2-disposition-modifier-extension =
"error: authentication-failed" |
"error: decompression-failed" |
"error: decryption-failed" |
"error: insufficient-message-security" |
"error: integrity-check-failed" |
"error: unexpected-processing-error" |
"warning: " AS2-MDN-warning-description |
"failure: " AS2-MDN-failure-description
AS2-MDN-warning-description = *( TEXT )
AS2-MDN-failure-description = *( TEXT )
AS2-received-content-MIC-field =
"Received-content-MIC" ":" encoded-message-digest ","
digest-alg-id CRLF
encoded-message-digest =
1*( 'A'-Z' | 'a'-'z' | '0'-'9' | '/' | '+' | '=' ) (
i.e. base64( message-digest ) )
digest-alg-id = "sha1" | "md5"
开源的OPENAS2,提供了基本的AS2协议交换和实现方式。
MENDELSON OPENSOURCE AS2,提供了很好的测试工具,可以验证自己系统的功能,是否符合标准的协议。
以上的协议内容主要来自rfc4130。