了解AS2协议和OpenAS2
AS2协议 设计的目的在于通过Internet安全可靠地传输商业文档。这个协议首先通过证书(Certification)进行数据加密和数字签名生成数据包,然后通过HTTP (或HTTPS)协议传输。
OpenAS2 是用Java实现AS2的开源项目, 基于FreeBSD开源协议,OpenAS2使您能够在交易伙伴之间传送和接收 EDI-X12、EDIFACT、XML 或二进制形式的AS2 消息。
准备
JDK1.8
OpenAS2Server-2.4.3
伙伴A的证书 partner.cer
安装JDK
参考 https://www.cnblogs.com/xuliangxing/p/7066913.html
安装OpenAS2
解压OpenAS2Server-2.4.3.zip至/usr/OpenAS2Server-2.4.3
生成证书
cd /usr/OpenAS2Server-2.4.3/bin
生成本机的cer证书和p12文件。
./gen_p12_key_par.sh mine mine SHA512 "CN=mine, OU=mine_test, O= mine_test, L=Shanghai, S=Shanghai, C=CN, EMAILADDRESS=zhangsan@163.com"
设置密码123456,会生产两个文件,mine.cer 本机的证书,mine.p12文件。
用aaa.p12文件导出密钥mine.key
openssl pkcs12 -in mine.p12 -nocerts -nodes -out mine.key
将自己的证书和伙伴A的证书合并,双方互通证书才能通信
cat mine.cer partner.cer > test.cer
将自己的证书和伙伴A的证书合并生成新的p12文件 test.p12,密码设置为123456。注意设置别名
openssl pkcs12 -export -out test.p12 -in mine.cer -name "mine" -certfile partner.cer -caname "partner" -inkey mine.key
将生成的p12文件拷贝到config目录下
cp test.p12 /usr/OpenAS2Server-2.4.3/config/test.p12
配置config.xml
cd /usr/OpenAS2Server-2.4.3/config
配置证书
<certificates classname="org.openas2.cert.PKCS12CertificateFactory"
filename="%home%/test.p12"
password="123456"
interval="300"/>
配置伙伴目录
多个伙伴可配置多个目录。这里的My_OID 和 PartnerA_OID 要跟partnerships.xml 里的配置要一致。
<module classname="org.openas2.processor.receiver.AS2DirectoryPollingModule"
outboxdir="%home%/../data/toPartnerA/"
errordir="%home%/../data/toPartnerA/error"
interval="5"
defaults="sender.as2_id=My_OID, receiver.as2_id=PartnerA_OID"
sendfilename="true"
mimetype="application/EDI-X12"/>
配置HTTPS
如果是https协议传输,须在接收方配置。
将SSL证书(例ssl_cer.pfx)转换为jks格式(例ssl_cer.jks),密码设置为testas2
keytool -importkeystore -srckeystore ssl_cer.pfx -destkeystore ssl_cer.jks -srcstoretype pkcs12
输入pfx文件的密码,再设置jks文件的密码为testas2,配置如下:
<module classname="org.openas2.processor.receiver.AS2ReceiverModule"
port="10080"
protocol="https"
ssl_protocol="TLS"
ssl_keystore="%home%/ssl_certs.jks"
ssl_keystore_password="testas2"
errordir="%home%/../data/inbox/error"
errorformat="sender.as2_id, receiver.as2_id, headers.message-id"/>
配置mdn目录及文件接收目录
mdn目录:消息处理通知文件
inbox目录:接收的文件,如果只保留源文件名,可将 -$mdn.msg.headers.message-id$
去掉
msgheaders目录:通信Headers信息文件
<module classname="org.openas2.processor.storage.MDNFileModule"
filename="%home%/../data/$mdn.msg.sender.as2_id$-$mdn.msg.receiver.as2_id$/mdn/$date.yyyy-MM-dd$/$mdn.msg.content-disposition.filename$-$mdn.msg.headers.message-id$"
protocol="as2"
tempdir="%home%/../data/temp"/>
<module classname="org.openas2.processor.storage.MessageFileModule"
filename="%home%/../data/$msg.sender.as2_id$-$msg.receiver.as2_id$/inbox/$msg.content-disposition.filename$-$msg.headers.message-id$"
header="%home%/../data/$msg.sender.as2_id$-$msg.receiver.as2_id$/msgheaders/$date.yyyy-MM-dd$/$msg.content-disposition.filename$-$msg.headers.message-id$"
protocol="as2"
tempdir="%home%/../data/temp"/>
配置partnerships.xml
-
Partner标签:
- name 与下面partnership中的sender/receiver一致
- as2_id 与config.xml配置的as2_id一致。并且要与伙伴服务器的as_id配置一致
- x509_alias 与p12文件中保存的证书别名(alias)一致
- email config.xml中logger日志文件配置时用到 partnership标签:
- sender/receiver 与Partner标签的name一致
- as2_url 伙伴A的接收地址和端口号
- as2_receipt_option 伙伴A的异步接收地址和端口号
<partnerships>
<partner name="My"
as2_id="My_OID"
x509_alias="mine"
email="xxx@xxx.com"/>
<partner name="PartnerA"
as2_id="PartnerA_OID"
x509_alias="partner"
email="xxx@xxx.com"/>
<partnership name="my-to-partnerA">
<sender name="My"/>
<receiver name="PartnerA"/>
<attribute name="protocol" value="as2"/>
<attribute name="content_transfer_encoding" value="binary"/>
<attribute name="subject" value="From My to PartnerA"/>
<attribute name="as2_url" value="http://xx.xx.xx.xx:10080"/>
<attribute name="as2_mdn_to" value="edi@openas2b.org"/>
<attribute name="as2_mdn_to" value="http://xx.xx.xx.xx:10081"/>
<attribute name="as2_mdn_options" value="signed-receipt-protocol=optional, pkcs7-signature; signed-receipt-micalg=optional, SHA1"/>
<attribute name="encrypt" value="3DES"/>
<attribute name="sign" value="SHA1"/>
<attribute name="resend_max_retries" value="3"/>
</partnership>
<partnership name="partnerA-to-my">
<sender name="PartnerA"/>
<receiver name="My"/>
</partnership>
</partnerships>
启动服务
cd /usr/OpenAS2Server-2.4.3/bin
执行start-openas2.sh,开启服务。在/usr/OpenAS2Server-2.4.3/data目录下会生成toPartnerA文件夹(config.xml配置的),程序会自动扫描该文件夹下的文件,如扫描到,会发送给伙伴A。伙伴A的服务也需要开启,如果提示” Message sent and MDN received successfully”,则发送成功。