Problema de SSL ao transmitir para sefaz de SC
jeanCarloMachado opened this issue · comments
Segue o erro
PHPUnit 5.2.12 by Sebastian Bergmann and contributors.
* Trying 200.233.4.140...
* Connected to nfe-homologacao.svrs.rs.gov.br (200.233.4.140) port 443 (#0)
* ALPN, offering http/1.1
* Cipher selection: ALL:!EXPORT:!EXPORT40:!EXPORT56:!aNULL:!LOW:!RC4:@STRENGTH
* successfully set certificate verify locations:
* CAfile: /etc/ssl/certs/ca-certificates.crt
CApath: none
* SSL connection using TLSv1.0 / AES128-SHA
* ALPN, server did not agree to a protocol
* Server certificate:
* subject: C=BR; O=ICP-Brasil; OU=Secretaria da Receita Federal do Brasil - RFB; OU=ARSERPRO; OU=RFB e-Servidor A1; CN=*.svrs.rs.gov.br
* start date: Nov 3 12:39:42 2015 GMT
* expire date: Nov 2 12:39:42 2016 GMT
* subjectAltName does not match nfe-homologacao.svrs.rs.gov.br
* SSL: no alternative certificate subject name matches target host name 'nfe-homologacao.svrs.rs.gov.br'
* Closing connection 0
E 1 / 1 (100%)
Time: 810 ms, Memory: 18.00Mb
There was 1 error:
1) FiscalTest\Service\NFE\TransmitterTest::testTransmit
NFePHP\Common\Exception\RuntimeException: Não houve retorno do Curl.
SSL: no alternative certificate subject name matches target host name 'nfe-homologacao.svrs.rs.gov.br'
/home/jean/projects/compufacil/Backend/vendor/nfephp-org/nfephp/libs/Common/Soap/CurlSoap.php:180
/home/jean/projects/compufacil/Backend/vendor/nfephp-org/nfephp/libs/NFe/ToolsNFe.php:698
/home/jean/projects/compufacil/Backend/module/Fiscal/src/Fiscal/Service/NFE/Transmitter.php:31
/home/jean/projects/compufacil/Backend/module/Fiscal/tests/src/FiscalTest/Service/NFE/TransmitterTest.php:40
/home/jean/.composer/vendor/phpunit/phpunit/src/TextUI/Command.php:162
/home/jean/.composer/vendor/phpunit/phpunit/src/TextUI/Command.php:113
ERRORS!
Tests: 1, Assertions: 0, Errors: 1.
cgexec -g memory:development phpunit -c /home/jean/projects/compufacil/Backend/phpunit.xml.dist --filter testTransmit /home/jean/projects/compufacil/Backend/module/Fiscal/tests/src/FiscalTest/Service/NFE/TransmitterTest.php
Consigo contornar o problema se eu trocar as linhas 290 e 291 do arquivo vendor/nfephp-org/nfephp/libs/Common/Soap/CurlSoap.php
de:
curl_setopt($oCurl, CURLOPT_SSL_VERIFYHOST, 2);
curl_setopt($oCurl, CURLOPT_SSL_VERIFYPEER, 0);
por:
curl_setopt($oCurl, CURLOPT_SSL_VERIFYHOST, false);
curl_setopt($oCurl, CURLOPT_SSL_VERIFYPEER, false);
Mas acho que trocar essa configuração poderia causar problemas para outros usuários, certo?
Posso tornar isso uma configuração setada no arquivo de config, só preciso do "aval" de vocês se esse é o jeito correto de proceder ou se estou esquecendo algo.
As opções de configuração do cURL estão corretas, o problema aparentemente está na sua versão do cURL ou na versão do PHP que você está usando. Mas não dá para saber ao certo sem fazer outras avaliações comparando versões e realizando testes em linha de comando. Pode até ser um problema causado pela própria configuração da SEFAZ, mas não consigo reproduzir o problema aqui. Nos meus sistemas não ocorre essa negação !
Mas sua solução não está "ERRADA" apenas reduz a segurança da conexão, o mais correto seria montar toda a cadeia de certificados e usar esse CACert para validar os certificados dos webservices, de forma a evitar problemas com "envenenamento de cache dos DNS" um problema que no Brasil é até comum. Essa é uma solução que está em analise, mas terá também uma série de inconvenientes, devido a necessidade de atualizar constantemente esse CACert sob pena de um bloqueio total.
Eu recomendo e em breve não será mais uma recomendação mas sim um REQUISITO o uso do PHP 5.6 ou 7.0.