{"id":579,"date":"2019-08-09T11:27:41","date_gmt":"2019-08-09T11:27:41","guid":{"rendered":"https:\/\/nmbm.biz\/sitio\/?p=579"},"modified":"2019-08-13T20:49:48","modified_gmt":"2019-08-13T20:49:48","slug":"webservices-at-documentos-transporte-em-ambiente-linux-php","status":"publish","type":"post","link":"https:\/\/blog.webgescom.pt\/blog\/webservices-at-documentos-transporte-em-ambiente-linux-php\/","title":{"rendered":"Webservices AT Documentos Transporte em Ambiente Linux PHP"},"content":{"rendered":"\n<p class=\"wp-block-paragraph\">Resumo das etapas necess\u00e1rias para gera\u00e7\u00e3o do pedido de certificado e ades\u00e3o ao webservice. Este artigo \u00e9 baseado na publica\u00e7\u00e3o de <a href=\"http:\/\/eskiso.net\">eSkiSo<\/a> no <a href=\"https:\/\/www.portugal-a-programar.pt\/forums\/topic\/59517-autoridade-tribut%C3%A1ria-utiliza%C3%A7%C3%A3o-de-webservice-com-ssl\/\">for\u00fam Portugal a Programar<\/a>. O Ambiente de reprodu\u00e7\u00e3o dos exemplos \u00e9 CentOS Linux, vers\u00e3o 7. O comando openssl \u00e9 parte integrante de qualquer distribui\u00e7\u00e3o CentOS. Darei exemplo, somente, dos comandos necess\u00e1rios para criar e manipular os certificados. O c\u00f3digo, em PHP, de eSkiSo, est\u00e1 no for\u00fam Portugal a Programar.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Antes de fazer o pedido de ades\u00e3o no Portal da AT, \u00e9 necess\u00e1rio criar o par chave privada\/pedido de certificado, com o comando:<\/p>\n\n\n\n<pre class=\"wp-block-preformatted\">openssl req -new -subj \"\/C=PT\/ST=Distrito da Sede\/L=Local da Sede\/O=Empresa \/OU=Departamento de Informatica\/CN=555555555\/emailAddress=informatica@empresa.pt\" -newkey rsa:2048 -nodes -out 555555555.csr -keyout 555555555.key<\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Onde, 555555555 pode ser substitu\u00eddo pelo n\u00famero de contribuinte, por exemplo.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Em resposta, a AT envia um ficheiro 555555555.cer que deve ser integrado com a chave privada 555555555.key, criada anteriormente. Vai ser necess\u00e1rio definir uma password. Tomar nota, pois teremos de a utilizar mais adiante e no c\u00f3digo PHP:<\/p>\n\n\n\n<pre class=\"wp-block-preformatted\">openssl pkcs12 -export -in 555555555.cer -inkey 555555555.key -out 555555555.pfx<\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Estas instru\u00e7\u00f5es tamb\u00e9m est\u00e3o <a href=\"http:\/\/info.portaldasfinancas.gov.pt\/pt\/apoio_contribuinte\/Documents\/Comunicacao_Dados_Documentos_Transporte.pdf\">documentadas no Portal da AT<\/a>. A partir deste momento, ficamos com um ficheiro PFX, que \u00e9 necess\u00e1rio tratar para integrar na linguagem PHP e na respectiva extens\u00e3o CURL (o mesmo mecanismo utilizado por eSkiSo). \u00c9 necess\u00e1rio separar o certificado e a chave privada em dois ficheiros no formato PEM. Para extrair o certificado, executar:<\/p>\n\n\n\n<pre class=\"wp-block-preformatted\">openssl pkcs12 -in 555555555.pfx -clcerts -nokeys -out pfxcert.pem<\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Para extrair a chave, do PFX, executar:<\/p>\n\n\n\n<pre class=\"wp-block-preformatted\">openssl pkcs12 -in 555555555.pfx -nocerts -out pfxKey.pem<\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">No entanto, em ambiente CURL + NSS, \u00e9 necess\u00e1rio transformar esta \u00faltima chave gerada, em RSA PRIVATE KEY, com o comando:<\/p>\n\n\n\n<pre class=\"wp-block-preformatted\">openssl rsa -in pfxKey.pem -out newpfxKey.pem<\/pre>\n<div class=\"pvc_clear\"><\/div><p id=\"pvc_stats_579\" class=\"pvc_stats all  \" data-element-id=\"579\" style=\"\"><i class=\"pvc-stats-icon small\" aria-hidden=\"true\"><svg aria-hidden=\"true\" focusable=\"false\" data-prefix=\"far\" data-icon=\"chart-bar\" role=\"img\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\" viewBox=\"0 0 512 512\" class=\"svg-inline--fa fa-chart-bar fa-w-16 fa-2x\"><path fill=\"currentColor\" d=\"M396.8 352h22.4c6.4 0 12.8-6.4 12.8-12.8V108.8c0-6.4-6.4-12.8-12.8-12.8h-22.4c-6.4 0-12.8 6.4-12.8 12.8v230.4c0 6.4 6.4 12.8 12.8 12.8zm-192 0h22.4c6.4 0 12.8-6.4 12.8-12.8V140.8c0-6.4-6.4-12.8-12.8-12.8h-22.4c-6.4 0-12.8 6.4-12.8 12.8v198.4c0 6.4 6.4 12.8 12.8 12.8zm96 0h22.4c6.4 0 12.8-6.4 12.8-12.8V204.8c0-6.4-6.4-12.8-12.8-12.8h-22.4c-6.4 0-12.8 6.4-12.8 12.8v134.4c0 6.4 6.4 12.8 12.8 12.8zM496 400H48V80c0-8.84-7.16-16-16-16H16C7.16 64 0 71.16 0 80v336c0 17.67 14.33 32 32 32h464c8.84 0 16-7.16 16-16v-16c0-8.84-7.16-16-16-16zm-387.2-48h22.4c6.4 0 12.8-6.4 12.8-12.8v-70.4c0-6.4-6.4-12.8-12.8-12.8h-22.4c-6.4 0-12.8 6.4-12.8 12.8v70.4c0 6.4 6.4 12.8 12.8 12.8z\" class=\"\"><\/path><\/svg><\/i> <img loading=\"lazy\" decoding=\"async\" width=\"16\" height=\"16\" alt=\"Loading\" src=\"https:\/\/blog.webgescom.pt\/blog\/wp-content\/plugins\/page-views-count\/ajax-loader-2x.gif\" border=0 \/><\/p><div class=\"pvc_clear\"><\/div>","protected":false},"excerpt":{"rendered":"<p>Resumo das etapas necess\u00e1rias para gera\u00e7\u00e3o do pedido de certificado e ades\u00e3o ao webservice. Este artigo \u00e9 baseado na publica\u00e7\u00e3o de eSkiSo no for\u00fam Portugal a Programar. O Ambiente de reprodu\u00e7\u00e3o dos exemplos \u00e9 CentOS Linux, vers\u00e3o 7. O comando openssl \u00e9 parte integrante de qualquer distribui\u00e7\u00e3o CentOS. Darei exemplo, somente, dos comandos necess\u00e1rios para&hellip;&nbsp;<\/p>\n<div class=\"pvc_clear\"><\/div>\n<p id=\"pvc_stats_579\" class=\"pvc_stats all  \" data-element-id=\"579\" style=\"\"><i class=\"pvc-stats-icon small\" aria-hidden=\"true\"><svg aria-hidden=\"true\" focusable=\"false\" data-prefix=\"far\" data-icon=\"chart-bar\" role=\"img\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\" viewBox=\"0 0 512 512\" class=\"svg-inline--fa fa-chart-bar fa-w-16 fa-2x\"><path fill=\"currentColor\" d=\"M396.8 352h22.4c6.4 0 12.8-6.4 12.8-12.8V108.8c0-6.4-6.4-12.8-12.8-12.8h-22.4c-6.4 0-12.8 6.4-12.8 12.8v230.4c0 6.4 6.4 12.8 12.8 12.8zm-192 0h22.4c6.4 0 12.8-6.4 12.8-12.8V140.8c0-6.4-6.4-12.8-12.8-12.8h-22.4c-6.4 0-12.8 6.4-12.8 12.8v198.4c0 6.4 6.4 12.8 12.8 12.8zm96 0h22.4c6.4 0 12.8-6.4 12.8-12.8V204.8c0-6.4-6.4-12.8-12.8-12.8h-22.4c-6.4 0-12.8 6.4-12.8 12.8v134.4c0 6.4 6.4 12.8 12.8 12.8zM496 400H48V80c0-8.84-7.16-16-16-16H16C7.16 64 0 71.16 0 80v336c0 17.67 14.33 32 32 32h464c8.84 0 16-7.16 16-16v-16c0-8.84-7.16-16-16-16zm-387.2-48h22.4c6.4 0 12.8-6.4 12.8-12.8v-70.4c0-6.4-6.4-12.8-12.8-12.8h-22.4c-6.4 0-12.8 6.4-12.8 12.8v70.4c0 6.4 6.4 12.8 12.8 12.8z\" class=\"\"><\/path><\/svg><\/i> <img loading=\"lazy\" decoding=\"async\" width=\"16\" height=\"16\" alt=\"Loading\" src=\"https:\/\/blog.webgescom.pt\/blog\/wp-content\/plugins\/page-views-count\/ajax-loader-2x.gif\" border=0 \/><\/p>\n<div class=\"pvc_clear\"><\/div>\n","protected":false},"author":1,"featured_media":581,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"neve_meta_sidebar":"","neve_meta_container":"","neve_meta_enable_content_width":"","neve_meta_content_width":0,"neve_meta_title_alignment":"","neve_meta_author_avatar":"","neve_post_elements_order":"","neve_meta_disable_header":"","neve_meta_disable_footer":"","neve_meta_disable_title":"","footnotes":""},"categories":[9,128],"tags":[],"class_list":["post-579","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-linux","category-programacao"],"aioseo_notices":[],"a3_pvc":{"activated":true,"total_views":2359,"today_views":0},"_links":{"self":[{"href":"https:\/\/blog.webgescom.pt\/blog\/wp-json\/wp\/v2\/posts\/579","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/blog.webgescom.pt\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/blog.webgescom.pt\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/blog.webgescom.pt\/blog\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/blog.webgescom.pt\/blog\/wp-json\/wp\/v2\/comments?post=579"}],"version-history":[{"count":3,"href":"https:\/\/blog.webgescom.pt\/blog\/wp-json\/wp\/v2\/posts\/579\/revisions"}],"predecessor-version":[{"id":583,"href":"https:\/\/blog.webgescom.pt\/blog\/wp-json\/wp\/v2\/posts\/579\/revisions\/583"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/blog.webgescom.pt\/blog\/wp-json\/wp\/v2\/media\/581"}],"wp:attachment":[{"href":"https:\/\/blog.webgescom.pt\/blog\/wp-json\/wp\/v2\/media?parent=579"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/blog.webgescom.pt\/blog\/wp-json\/wp\/v2\/categories?post=579"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/blog.webgescom.pt\/blog\/wp-json\/wp\/v2\/tags?post=579"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}