Exception Unbale使用委托工具包与加拿大边境服务局(CBSA)建立沟通
我们正试图将加密的EDI(电子数据交换)字符串以及SMIME形式的数字签名发送给加拿大边境服务局,但每次尝试不同的方法都会出错。 我们发送的SMIME有效负载请求是:Exception Unbale使用委托工具包与加拿大边境服务局(CBSA)建立沟通,exception,mime,edi,smime,entrust,Exception,Mime,Edi,Smime,Entrust,我们正试图将加密的EDI(电子数据交换)字符串以及SMIME形式的数字签名发送给加拿大边境服务局,但每次尝试不同的方法都会出错。 我们发送的SMIME有效负载请求是: Content-Type: multipart/signed; protocol="application/pkcs7-signature"; micalg=sha1; boundary="----=_Part_0_1964847681.1577187780616" ------=_Part_0_
Content-Type: multipart/signed; protocol="application/pkcs7-signature"; micalg=sha1;
boundary="----=_Part_0_1964847681.1577187780616"
------=_Part_0_1964847681.1577187780616
Content-Type: application/edi-edifact
Content-Length: 881
UNA:+.?'
UNB+UNOA:3+KAGATEWAY:CBSANETWORKID+191017:0930+REF12345'UNG+CUSDEC+ +IIDT+191017:0930+GREF12345+UN+D:13A:IID'
UNH+MREF12345+GOVCBR:D:13A:UN:IID'
BGM+929+119081234567X+9'
DTM+132:CCYYMMDDHHMMZZZ:303'MOA+134:10000:CAD'
RFF+CN:WXYZ12345678987654321'
GOR++5'LOC+23+0809+3470'
NAD+IM+868929415RM0001++ INC+6955 AVE+NEWARK+CA+94560+US'UNS+D'
SEQ+1'NAD+VN+++ZOY HOME FURNISHING CO+BUILDING 2-5:TANGPU INDUSTRIAL PARK+DIPU,ANJI+ZJ+313301+CN'
NAD+UC+868929415RM0001++ CAN+123 +VANCOUVERBC+V5K1A5+CA'LOC+35+CN'
DTM+757:20191001:102'DOC+380+98027209'SEQ+1'DTM+3:20190901:102'MOA+39:10000CAD'MEA+AAE+AAB+KGM:5000'QTY+47:180:H87'LIN+1'NAD+MF+++ZOY HOME CO+BUILDING 2-5: INDUSTRIAL PARK+DIPU,ANJI+ZJ+313301+CN'
LOC+27+CN'PAC+180+3+BX'SEQ+1'GID+1'
IMD++8+:::METAL +AAE+ABS+KGM:4500'MOA+66:10000CAD'TCC+++9401791000:HS'CNT+51:180:EA'SEQ+1'HYN+3'UNS+S'UNT+20+MREF12345'UNE+1+GREF12345'UNZ+1+REF12345'
------=_Part_0_1964847681.1577187780616
Content-Type: application/pkcs7-signature
Content-Transfer-Encoding: base64
Content-Length: 1640
0�� *�H��
���0��1�u0�q0Y0Q1
0 UCA1
0 U
GC10U
cra-arc10
U
Extern10U
EXTTESTCASd=0
*�H��
� {/d�R'^J��o�����.�M5Q:��^��Ў�2�<�)9a �VS�|O�.�P/�(N�"�IJ��0_HH�m!��I.
j3�a �`����g�4|ll.�M��uVW�8��2�y[�$0_���j
���m�2���uul��9ehqS��N�O����������{m'� >�ϻ��cL���9�R�g�͜����{�O
�h-�UJ��(��W�dԼd\
Q7��|��:����P����0� *�H��
0 *�H��}B
0_.h�U�������"�q�����S �C2X������*a�
�eٲQ��>`˨�?�����|i���a��³ev�
��������`�����cY]�����#�Ӡ(n�o��Jm���!�F?J�1� �6]M�l#]��u֡p�;�Fn����
����w8Dz�Q�
����R�����~h�K��E��
�n{ϬA��3LA=����y�!��?7�h`\[%�y>�%10������� s�-��z=E�,�K�������:��9�?�F��
VpT#A�7�[=�� �y2�w�o:[�"�;���ŗp5�C�uk��qf5l�
Ȑ���:��X��Y1�ς�ˆ?P�]���^�����8�m�:3|���#Qm=0\���r �����X�
q�Eڂz�A�a\1l�D�4,x�V�g79c��)>T�ժ���d:��]<�.ri�@vl����C������|T��l��<;�n�,�H�p~D����;��VN�VT�*�o:���y%�jfh4�S���Pf)>Z����5��L�<�
R���������#�3Ҫ��T�a�nMh6q@cێ���eʯ�p$ƅv����� cb�zQc�&�5li���zg!��
E�)�i�$v��%Y'�
o�zX����q���P�)F��c<�`e�B~
&��SL�J��M��������o�M�K�Q{��<m�|��"�yo��(�%�_���g�����$���NiV�z�u����u��T��_#g���b��r�H��̨�'rw���:n[!�e@
o_�� �l2'2�
�T�Q��7�k7�(�4�e���G"����>{'1b�4,?Y���#)
��u(�ч���ܤ6weMLY��b�f�����8}&��v��?�Ti�R:g$�P5��v�Ž~���
܅��q��RK;��
*"N�G�O�[R����>��Cm8o懏�e�T_
------=_Part_0_1964847681.1577187780616--
如果有人曾与CBSA或委托或EDI合作过,请帮助我们解决问题
任何与SMIME中的异常相关的帮助都将非常有用
我使用的代码是:
mbp1.addHeader("Content-Length", String.valueOf(testMessage.length()));
PropUtil.getBooleanSystemProperty("mail.mime.multipart.ignoreexistingboundaryparameter", true);
// contentType = new ContentType("multipart","mixed",pml);
// contentType.setParameter("boundary", getBoundary());
//
// contentType1 = new ContentType("multipart","mixed",pml1);
// contentType1.setParameter("boundary", getBoundary());
//
// contentType2 = new ContentType("multipart","mixed",pml2);
// contentType2.setParameter("boundary", getBoundary());
// contentType = type.toString();
MimeMultipart mimeMultipart = new MyMimEMultipart("signed");
SMimeBodyPart ediEdiPart = new SMimeBodyPart();
ByteArrayOutputStream fout = new ByteArrayOutputStream();
fout.write(testMessage.getBytes());
ByteArrayOutputStream encoded = (ByteArrayOutputStream)MimeUtility.encode(fout, "7bit");
byte[] gg = encoded.toByteArray();
InternetHeaders internetHeaders = new InternetHeaders();
internetHeaders.addHeader("Content-Type", "application/edi-edifact");
internetHeaders.addHeader("Content-Length", String.valueOf(gg.length));
internetHeaders.addHeader("Content-Transfer-Encoding","7-bit");
SMimeBodyPart newthing= new SMimeBodyPart(internetHeaders,gg);
ByteArrayOutputStream consoleStream = new ByteArrayOutputStream();
newthing.writeTo(consoleStream);
// consoleStream.writeTo(System.out);
FileOutputStream f= new FileOutputStream("/Users/lakshyakumarsingh/Documents/kx-github/kn-cbsaproxy/src/main/resources/test1_decode.txt");
f.write(consoleStream.toByteArray());
// System.out.println("this is the input");
// System.out.println(consoleStream.toString("US-ASCII"));
// ediEdiPart.setHeader("Message-ID","29123185.1.1449072497221.JavaMail.axg129@WH12CU10178A");
// ediEdiPart.setHeader("Content-Type", "application/edi-edifact");
// int contentlength = testMessage.length();
ediEdiPart.setDataHandler(dataHandler);
// ediEdiPart.setText(finalString);
// ediEdiPart.setHeader("Content-Transfer-Encoding", "binary");
ediEdiPart.setHeader("Content-Length", String.valueOf(testMessage.length()));
// ediEdiPart.setContent(testMessage, "application/edi-edifact");
// mimeMultipart.setParent(PART.);
// System.out.println("contetnt type is : " + contentType.toString());
mimeMultipart.setSubType("signed");
mimeMultipart.setPreamble(
"Content-Type: multipart/signed; protocol=\"application/pkcs7-signature\"; micalg=sha1; \n" +
"\tboundary=\"----=_Part_0_1964847681.1577187780616\"");
mimeMultipart.addBodyPart(newthing);
SMimeBodyPart mbp2 = new SMimeBodyPart();
mbp2.addHeader("Content-Type", "application/pkcs7-signature");
mbp2.addHeader("Content-Transfer-Encoding", "binary");
// mbp2.addHeader("Content-Description", "S/MIME Cryptographic Signature");
标题中显示的边界似乎不是您实际使用的边界标记。@Iridium是的,它很旧……我的错误……我编辑了它……仍然没有work@Iridium+每个部分标题不应有任何空白/空行,除非(准确地)在其末尾有一行,并且主要内容类型标题应全部为一行(首选)或者连续行(无空行/空行),每一行以空格开头。这些是基本的MIME,与SMIME或CBSA没有任何关系;请参阅RFCs或维基百科。此外,您的签名部分明显错误;没有二进制签名(不推荐使用,这里使用base64更好)恰好是EDI文本——尽管这会/将给出一个完全不同的错误。@dave_thompson_085实际上我已经尝试过你提到的不同缩进和间距,但仍然不起作用。尽管我一直在编码签名部分。你说得对,我必须对签名使用二进制编码。您能建议任何Java库这样做吗(我已经试过Base64了)。我还需要将EDI字符串编码为7位。你能指出任何一个Java库都可以做到这两种功能吗?“尝试不同”是非常模糊的,但是当网站回答“无法解析[作为]多部分”时,你所做的一切都是错误的。rfc3851 3.4.3.3所示格式正确。EDI(通常)是ISO 646,它已经是一个7位代码了,您的示例肯定是这样的。Base64内置于8以上的所有java(se)版本中;请参阅IDE中java.util.Base64的javadoc。但是签名的问题不仅仅是编码问题;正如我所说的,该值显然是错误的(顺便说一句,即使是错误的大小;PKCS7/CMS分离签名也不会是128字节)。
mbp1.addHeader("Content-Length", String.valueOf(testMessage.length()));
PropUtil.getBooleanSystemProperty("mail.mime.multipart.ignoreexistingboundaryparameter", true);
// contentType = new ContentType("multipart","mixed",pml);
// contentType.setParameter("boundary", getBoundary());
//
// contentType1 = new ContentType("multipart","mixed",pml1);
// contentType1.setParameter("boundary", getBoundary());
//
// contentType2 = new ContentType("multipart","mixed",pml2);
// contentType2.setParameter("boundary", getBoundary());
// contentType = type.toString();
MimeMultipart mimeMultipart = new MyMimEMultipart("signed");
SMimeBodyPart ediEdiPart = new SMimeBodyPart();
ByteArrayOutputStream fout = new ByteArrayOutputStream();
fout.write(testMessage.getBytes());
ByteArrayOutputStream encoded = (ByteArrayOutputStream)MimeUtility.encode(fout, "7bit");
byte[] gg = encoded.toByteArray();
InternetHeaders internetHeaders = new InternetHeaders();
internetHeaders.addHeader("Content-Type", "application/edi-edifact");
internetHeaders.addHeader("Content-Length", String.valueOf(gg.length));
internetHeaders.addHeader("Content-Transfer-Encoding","7-bit");
SMimeBodyPart newthing= new SMimeBodyPart(internetHeaders,gg);
ByteArrayOutputStream consoleStream = new ByteArrayOutputStream();
newthing.writeTo(consoleStream);
// consoleStream.writeTo(System.out);
FileOutputStream f= new FileOutputStream("/Users/lakshyakumarsingh/Documents/kx-github/kn-cbsaproxy/src/main/resources/test1_decode.txt");
f.write(consoleStream.toByteArray());
// System.out.println("this is the input");
// System.out.println(consoleStream.toString("US-ASCII"));
// ediEdiPart.setHeader("Message-ID","29123185.1.1449072497221.JavaMail.axg129@WH12CU10178A");
// ediEdiPart.setHeader("Content-Type", "application/edi-edifact");
// int contentlength = testMessage.length();
ediEdiPart.setDataHandler(dataHandler);
// ediEdiPart.setText(finalString);
// ediEdiPart.setHeader("Content-Transfer-Encoding", "binary");
ediEdiPart.setHeader("Content-Length", String.valueOf(testMessage.length()));
// ediEdiPart.setContent(testMessage, "application/edi-edifact");
// mimeMultipart.setParent(PART.);
// System.out.println("contetnt type is : " + contentType.toString());
mimeMultipart.setSubType("signed");
mimeMultipart.setPreamble(
"Content-Type: multipart/signed; protocol=\"application/pkcs7-signature\"; micalg=sha1; \n" +
"\tboundary=\"----=_Part_0_1964847681.1577187780616\"");
mimeMultipart.addBodyPart(newthing);
SMimeBodyPart mbp2 = new SMimeBodyPart();
mbp2.addHeader("Content-Type", "application/pkcs7-signature");
mbp2.addHeader("Content-Transfer-Encoding", "binary");
// mbp2.addHeader("Content-Description", "S/MIME Cryptographic Signature");