2010. 2.
1. 지침의개요 가. 목적본지침은 ASP/ERP간전자세금계산서유통을위한기준과절차를제공하기위한것으로전자세금계산서시스템개발자들에게전자세금계산서유통시스템개발에필요한세부절차와방법을제공함으로써, 보다효과적인개발을지원하고자한다. 나. 적용범위본지침은전자세금계산서의유통목적으로 ASP/ERP간 e메일을통해세금계산서원본을전송하기위해개발하는전자세금계산서유통시스템에대해적용한다. 다. 구성본지침은 5개의장으로구성되어있다. 2장에서는전자세금계산서유통프로세스에대해기술하고있다. 3장에서는보안에대해기술하고있다. 4장에서는전자세금계산서통신에대해기술하고있다. 5장에서는공개키획득방식에대해기술하고있다. - 2 -
2. 전자세금계산서유통프로세스 사업자간전자세금계산서를유통하기위해서는전송받는사업자의공개키로전자세금계산서를반드시암호화해야하며국세청에등록된전송받는사업자의 email로본지침에서정의한규약대로보내야한다. 단, 전송자는국세청에전송되어정상적으로등록된세금계산서분에한해보내야한다. 2.1 전자세금계산서유통방식전자세금계산서의유통방식은범용적으로사용되는이메일방식을사용한다. 전자세금계산서를이메일로전송하기전에국세청에서규정한암호화알고리즘을사용하여반드시암호화해야한다. 첨부문서첨부문서를 ( 전자세금계산서 ) 공개키로암호화생성 메시지봉투생성 전송 SMTP 수신 메시지추출 첨부문서복호화 첨부문서확인 문서구조오류 복호화오류 [ 그림 ] 전자세금계산서유통프로세스 각단계별로설명하면다음과같다. 송신사업자가전자세금계산서를전송하는단계 - 1단계 : 송신할전자세금계산서를가져오는단계 - 2단계 : 수신받을사업자의공개키로전자세금계산서를암호화하는단계 - 3단계 : 이메일정보 ( 받는사람, 제목, 본문, 암호화문서첨부등 ) 를패키징하는단계 - 4단계 : 전송프로토콜 (SMTP) 규약에따라메시지를전송하는단계 수신사업자가전자세금계산서를처리하는단계 - 1단계 : 이메일수신하는단계 - 2단계 : 본문과첨부문서를추출하는단계 - 3단계 : 첨부문서를복호화하여전자세금계산서를등록또는조회하는단계 - 3 -
2.2 전자세금계산서수신확인이메일전송방식의한계로인해별도로송신한문서에대한수신확인을할수있는방법은제공하지않는다. 다만필요하면사업자시스템에서자체구현할수있다. 2.3 전자세금계산서유효성확인수신받은전자세금계산서의유효성은이세로홈페이지의 제3자전자세금계산서조회 를통해확인할수있다. - 4 -
3. 문서보안 3.1 개요수신사업자에게전자세금계산서는반드시기밀성을확보하여야하며이를위해다음과같은암호화과정을준수해야한다. 암호문은국내외에서각종표준으로이용되는 IETF RFC 3852 CMS(Cryptographic Message Syntax) 에서제시하는 ContentInfo 구조체로표현된 Enveloped-Data Content Type을사용하며자세한사항은표준전자세금계산서 (v3.0) 개발지침 v1.0의 5.3 암호화를참조하며추가및변경사항은아래에정의된규약을준수한다. 3.2 암호화대상데이터암호화대상은전자서명된전자세금계산서인 XML 형태의데이터이며하나의전자세금계산서만포함해야한다. 다음은대상데이터의구성방법이다. 데이터는 ASN.1 Basic Encoding Rules(BER) 을따르며 Distinguished Encoding Rules(DER) 를준수하도록한다. TaxInvoice ::= OCTET STRING TaxInvoice는개별전자세금계산서의 XML 데이터이다. 3.3 EnvelopedData의구성다음은 RFC 3852의 EnvelopedData의구성이다. EnvelopedData ::= SEQUENCE { version CMSversion, originatorinfo [0] IMPLICIT OriginatorInfo OPTIONAL, recipientinfos RecipientInfos, encryptedcontentinfo EncryptedContentInfo, unprotectedattrs [1] IMPLICIT UnprotectedAttributes OPTIONAL } encryptedcontentinfo 에는내부에정의된 Algorithm Identifier 의알고리듬을기반으로암호화한 TaxInvoice 를넣어준다. - 5 -
3.4 EnvelopedData의생성다음은 RFC 3852의 EnvelopedData의생성에있어주요부분에대한설명이다. encryptedcontentinfo의생성 EncryptedContentInfo ::= SEQUENCE { contenttype ContentType, contentencryptionalgorithm ContentEncryptionAlgorithmIdentifier, encryptedcontent [0] IMPLICIT EncryptedContent OPTIONAL } - encryptedcontent의입력은위정의된 TaxInvoice의 DER 인코딩된값을 contentencryptionalgorithm 에정의된알고리듬방식으로암호화한 OCTET STRING(Binary 값 ) 이다. 3.5 사업자공개키획득이세로홈페이지의연계사업자수신함조회메뉴를통하거나웹서비스를통해타사업자공개키를획득할수있다. 공개키획득웹서비스에대해서는 5장참조 - 6 -
4. 전자세금계산서통신 4.1 메시지기본구조 SMTP 규약에따라메시지는아래그림과같이 2개의 Multipart-MIME 형식으로구성되어야한다. Underlying Protocol : SMTP MIME Envelope MIME Part 1 Mail Body Body is not significant : normally HTML or TEXT. MIME Part 2 Payload Encrypted TaxInvoice document [ 그림 ] 이메일메시지기본구조 MIME Envelope 보낸사람, 받는사람, 제목등의헤더정보가있다. 송신자는반드시받는사람의공개키를사용하여첨부문서를암호화해야한다. MIME Part 1 이메일본문메시지로전자세금계산서의간략한정보를보여준다. 본문형식은 HTML 혹은 TEXT 일수있으며이에대한제약은없다. MIME Part 2 암호화된전자세금계산서로 MIME Part2 에대한 Content-Type 은 application/octet-stream 이어야하며 Content-Transfer-Encoding 은 base64 인코딩을따른다. 첨부파일명형식은아래와같다. 전자세금계산서승인번호 +.msg' ex) 20100201410000001000001.msg - 7 -
4.2 메시지예제 Received: from xxx.xxx.xxx.xxx (xxx.xxx.xxx.xxx) at KTMAIL with ESMTP Hanmir by nrmail2;tue, 12 Jan 2010 11:43:07 +0900 Message-ID: <1263264187808918.12.nrmail2@nrmail2> Y-MAIL-CLASS: None Received: from unknown (HELO [xxx.xxx.xxx.xxx]) ([xxx.xxx.xxx.xxx]) by nmailex10.paran.com with SMTP; 12 Jan 2010 11:29:32 +0900 From: "=?euc-kr?b?sbm8vmo7?=" <eseroadmin@esero.go.kr> To: <user@test.com> Reply-to: <eseroadmin@esero.go.kr> Subject: =?euc-kr?b?wko0+l26wm7dtcghkcjb1inf1726xq6+98o8?= =?euc-kr?b?ms0+wko0+l26wm7dtcghkbtuici68bq4?= =?euc-kr?b?vsgpwpza2ry8sd2w6lvqvk3f1726xq7a1ltptnk=?= =?euc-kr?b?lg==?= Date: Tue, 12 Jan 2010 11:43:06 +0900 MIME-Version: 1.0 Content-Type: multipart/mixed; boundary="_nextpart_2010.01.12.11.43.06.1263264186181" This is a multi-part message in MIME format. --_nextpart_2010.01.12.11.43.06.1263264186181 Message-ID: <1263264186181_Ems@116.67.71.17> Content-Type: text/html; charset="euc-kr" Content-Transfer-Encoding: 8bit <html> <head> <title> 전자세금계산서 e세로전자세금계산서를발행하였습니다.</title> <meta http-equiv="content-type" content="text/html; charset=euc-kr" /> </head> <body>... 생략 </body> </html> - 8 -
--_nextpart_2010.01.12.11.43.06.1263264186181 Message-ID: <1263264186181_Ems@116.67.71.17> Content-Type: application/octet-stream; name="=?euc-kr?b?mjaxmdaxmtixmdawmdawmdawmdawmdazlnhtba==?=" Content-Transfer-Encoding: base64 Content-Disposition: attachment; filename="=?euc-kr?b?mjaxmdaxmtixmdawmdawmdawmdawmdazlnhtba==?=" MIIXbw... --_nextpart_2010.01.12.11.43.06.1263264186181-- - 9 -
5. 전자세금계산서유통을위한공개키획득 5.1 개요수신처 (ASP/ERP) 에이메일을통해전자세금계산서를전송하기위해서는반드시수신처의공개키로암호화하여전송하여야한다. 이를위해연계사업자는국세청이세로에 email 및공개키를등록하여야하며, 등록된공개키를이세로에서다운받을수있다. 공개키등록및다운방법은이세로홈페이지공지사항에등록되어있다. 또한국세청은좀더쉽게공개키를배포받을수있도록웹서비스를통한공개키배포를제공하며이를위해다음과같은방식으로공개키배포요청을할수있는서비스를제공한다. 단, 국세청에서서비스부하부담을줄이기위해해당서비스는연계사업자별로일일 10회까지만서비스한다. 5.2 공개키획득웹서비스요청메시지구조표준전자세금계산서개발지침v1.0에정의된요청메시지구조를따르며이문서에서는추가또는변경사항을기술한다. 5.2.1 SOAP Header SOAP Header에는 WS-Addressing, Message Header 부분을제외하고 WS-security 만을적용한다 5.2.2 SOAP Body 사업자가국세청에공개키획득서비스를요청할때 SOAP Body는다음과같이구성되어야한다. 항목명 설명 반복회수 유형 길이 RequestMessage 요청메시지루트 1..1 BusnId 사업자등록번호 1..1 S 10 BusnCrfcNo 연계사업자국세청등록번호 1..1 S 8 FileType 인증서파일종류 1..1 S 1 인증서파일종류는아래와같다 FileType extention 설명 1.zip Deflate 알고리즘을이용한압축 2.jar java archiving unix tar로 archiving 후 gnu zip을이용하 3.tar.gz 여압축사업자의시스템환경에맞게파일타입을선택하여공개키획득가능함 - 10 -
예시는아래와같다. <?xml version="1.0" encoding="utf-8"?> <soapenv:envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:xsd="http://www.w3.org/2001/xmlschema" xmlns:xsi="http://www.w3.org/2001/xmlschema-instance" xmlns:ds="http://www.w3.org/2000/09/xmldsig#" xmlns:wsu="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-utility-1.0.xsd" xmlns:wsse="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-secext-1.0.xsd"> <soapenv:header> <wsse:security>... </wsse:security> </soapenv:header> <soapenv:body> <RequestMessage> <BusnID xsi:type="xsd:string">1234567890</busnid> <BusnCrfcNo xsi:type="xsd:string">41000000</busncrfcno> <FileType xsi:type="xsd:string">1</filetype> </RequestMessage> </soapenv:body> </soapenv:envelope> 5.2.3 endpoint URL 국세청에서서비스되는공개키획득 endpoint URL은아래와같다 http://webservice.esero.go.kr/services/requestcert 5.3 공개키획득웹서비스응답메시지구조 국세청에서공개키획득서비스응답시에 SOAP Body는다음과같이구성된다. 항목명 설명 반복회수 유형 길이 ResponseMessage 응답메시지루트 1..1 FileType 인증서파일종류 1..1 S 1 LastModified 인증서최종수정일 1..1 S 24 공개키응답메시지는아래와같다 <?xml version="1.0" encoding="utf-8"?> <soapenv:envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:xsd="http://www.w3.org/2001/xmlschema" xmlns:xsi="http://www.w3.org/2001/xmlschema-instance" xmlns:ds="http://www.w3.org/2000/09/xmldsig#" xmlns:wsu="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-utility-1.0.xsd" xmlns:wsse="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-secext-1.0.xsd"> - 11 -
<soapenv:header> <wsse:security>...</wsse:security> </soapenv:header> <soapenv:body> <ResponseMessage> <FileType>1</FileType> <LastModified>2010-02-17T11:04:58.894Z</LastModified> </ResponseMessage> </soapenv:body> </soapenv:envelope> [ 공개키첨부 ] 5.4 SOAP Attachment 공개키는 SOAP Attachment 영역을사용하여이세로에등록된모든연계사업자공개키를압축하여전달된다. 각사업자의공개키명은국세청등록번호 + - + 연계사업자 email 주소 +.der" 이며모든사업자의공개키는 RequestMessage의 FileType에따라압축하여전송된다. 단, 국세청의공개키는 40000000-nts@esero.go.kr.der 로첨부된다. 5.5 SOAP Fault 공개키획득서비스에대한에러는다음과같다 UnknownSender - 국세청등록번호가유효하지않은경우 TooManyRequest - 일일서비스요청 10회초과의경우 - 12 -