none
Autenticação via certificado digital RRS feed

  • Pergunta

  • Boa tarde Senhores,

    Venho aqui solicitar a ajuda de vocês pois estou com um problema onde nem sei por onde começar essa bucha cai no meu colo(rs).

    A segurança do portal é baseada em SSL/TLS, sendo obrigatória a utilização de certificados digitais. Ao acionar o serviço de autenticação, será preciso realizar o processo de handshake SSL entre a aplicação cliente e o portal, apresentando um certificado digital válido e reconhecido pelo SERPRO. Após a validação do certificado, o portal consultará a base autorizativa a fim de identificar o perfil do usuário proprietário do certificado digital. O serviço suporta certificados A1 e A3, do padrão ICP-Brasil.

    As plataformas de desenvolvimento atuais já implementam o fluxo de Handshake SSL/TLS. Em geral, basta configurar algumas variáveis de ambiente e a API se encarrega de executar o protocolo. Em resumo, o processo acontece da seguinte forma:

    1. O cliente inicia o pedido de conexão com o serviço;

    2. O serviço retorna o seu certificado assinado para que seja verificado pelo cliente;

    3. O cliente verifica a sequência de cadeias de autoridades certificadoras presentes no certificado e compara com as cadeias presentes na TrustStore local. 

    4. O cliente envia o seu certificado encapsulado em uma Keystore para que seja reconhecido pelo servidor;

    5. O servidor valida o certificado do cliente;

    6. O processo de handshake é finalizado e o cliente pode realizar a requisição ao serviço.

    Além da Keystore, também deverá ser enviado o parâmetro **Role-Type** no cabeçalho da requisição, conforme detalhado abaixo:

    Endpoint:
    POST https://<url>/portal/api/autenticar

    Atributos:
    Nome Descrição Tipo do dado Tipo do Parâmetro
    Role-Type Perfil para o qual se deseja efetuar a autenticação. string, obrigatório header

    Poderiam me ajudar nessa questão?

    Desde já muito obrigado.


    sexta-feira, 19 de janeiro de 2018 17:52

Respostas

  • Boa tarde Roberto,

    Consegui resolver meu problema assim.

    client.Headers.Add("Role-Type", "IMPEXP");
                   
    string result = client.UploadString("https://val.portalunico.siscomex.gov.br/portal/api/autenticar","POST");

    Removi a variável JSON_ENTRADA e adicionei Headers com os parâmetros necessários.

    Muito obrigado pelo retorno.

    • Marcado como Resposta Marcio Camargo terça-feira, 30 de janeiro de 2018 12:06
    terça-feira, 30 de janeiro de 2018 12:06

Todas as Respostas

  • Bom dia a todos,

    Final de semana pesquisei bastante e avancei muito.

    Consegui selecionar o certificado e enviar informações para o cliente, mais a Api do cliente está me retornando um erro descrito na documentação dele que está relacionado com o cabeçalho que estou enviando alguém poderia me ajudar.

    O fluxo de autenticação está descrito acima, estou colocando o método post que estou fazendo.

      string JSON_ENTRADA = "{'Role-Type':'IMPEXP','Set-Token': '" + oCertificado.HasPrivateKey + "','X-CSRF-Token':'" + oCertificado.NotAfter + "',X-CSRF-Expiration: '" + oCertificado.NotAfter + "'}";
                    
                    string result = client.UploadString("https://val.portalunico.siscomex.gov.br/portal/api/autenticar","POST", JSON_ENTRADA);
    Desde já muito obrigado!

    segunda-feira, 22 de janeiro de 2018 11:15
  • Boa tarde, Marcio Camargo.

    Conseguiu algum avanço no teu caso? Se ainda não, o que precisa?

    Atenciosamente,

    Filipe B de Castro

    Esse conteúdo é fornecido sem garantias de qualquer tipo, seja expressa ou implícita

    MSDN Community Support

    Por favor, lembre-se de Marcar como Resposta as postagens que resolveram o seu problema. Essa é uma maneira comum de reconhecer aqueles que o ajudaram e fazer com que seja mais fácil para os outros visitantes encontrarem a resolução mais tarde.

    sexta-feira, 26 de janeiro de 2018 12:44
    Moderador
  • Boa tarde Marcio Camargo,

    Posta o erro.


    Att., Roberto Alves

    Por favor, lembre-se de Marcar como Resposta as postagens que resolveram o seu problema. Essa é uma maneira comum de reconhecer aqueles que o ajudaram e fazer com que seja mais fácil para os outros visitantes encontrarem a resolução mais tarde.

    segunda-feira, 29 de janeiro de 2018 17:27
  • Boa tarde Roberto,

    Consegui resolver meu problema assim.

    client.Headers.Add("Role-Type", "IMPEXP");
                   
    string result = client.UploadString("https://val.portalunico.siscomex.gov.br/portal/api/autenticar","POST");

    Removi a variável JSON_ENTRADA e adicionei Headers com os parâmetros necessários.

    Muito obrigado pelo retorno.

    • Marcado como Resposta Marcio Camargo terça-feira, 30 de janeiro de 2018 12:06
    terça-feira, 30 de janeiro de 2018 12:06
  • Bom dia, Márcio,

    Estou iniciando o desenvolvimento dessa mesma integração com o Portal Siscomex. Como você já está integrando com esse portal, você poderia disponibilizar o código-fonte completo desse seu processo? Não estou conseguindo me autenticar lá e, com isso, não consigo evoluir.

    Obrigado.

    quarta-feira, 3 de julho de 2019 13:26
  • Boa tarde, Giuliano,

    Só vi sua mensagem hj, se você estiver com problema te ajudo sim!

    Avisa se precisar!

    Att, 

    Márcio

    sexta-feira, 5 de julho de 2019 18:17
  • Boa tarde, Marcos!

    Estou no início do desenvolvimento. Na verdade, empacado no início, pois não consigo evoluir, tendo em vista que somente conseguimos consumir os serviços do Siscomex se conseguiremos autenticar.

    De início, tenho uma dúvida simples: Você sabe me dizer se é possível autenticar com o certificado da empresa, sendo um Importador/Exportador ou precisa que seja um certifica E-CPF?

    Meu código para tentar autenticar está assim:

    using System;  
    using System;
    using System.Collections.Generic;
    using System.IO;
    using System.Linq;
    using System.Net;
    using System.Security.Cryptography.X509Certificates;
    using System.Text;
    using System.Threading.Tasks;

    namespace TesteExcluir
    {
        class Program
        {
            static void Main(string[] args)
            {
                string destinationUrl = "https://val.portalunico.siscomex.gov.br/portal/api/autenticar";

                HttpWebRequest request = (HttpWebRequest)WebRequest.Create(destinationUrl);

                X509Certificate2 oCertificado;
                var oX509Cert = new X509Certificate2();
                var store = new X509Store("MY", StoreLocation.CurrentUser);
                store.Open(OpenFlags.ReadOnly | OpenFlags.OpenExistingOnly);
                var collection = store.Certificates;

                oX509Cert = collection[0];
                oCertificado = oX509Cert;

                request.ContentType = "application/json";
                request.Headers.Add("Role-Type", "IMPEXP");
                request.Method = "POST";

                foreach (var item in collection)
                {
                    if (item.SerialNumber == "XPTO")
                    {
                        request.ClientCertificates.Add(item);
                    }
                }

                //Seta a parte de segurança.
                ServicePointManager.Expect100Continue = true;
                ServicePointManager.SecurityProtocol = SecurityProtocolType.Tls12 | SecurityProtocolType.Ssl3;

                var response = (HttpWebResponse)request.GetResponse();

                if (response.StatusCode == HttpStatusCode.OK)
                {
                    var responseStream = response.GetResponseStream();

                    var tokenResponse = response.Headers["Set-Token"];
                    var csrfTokenResponse = response.Headers["X-CSRF-Token"];
                    var csrfExpirionResponse = response.Headers["X-CSRF-Expiration"];

                    string responseStr = new StreamReader(responseStream).ReadToEnd();
                }

                Console.ReadKey();
            }
        }
    }

    O serviço do Siscomex sempre me retorna erro 422 - Erro de negócio. Destaco que estou tentando autenticar com um certificado digital válido, porém criado em nome da empresa (é o mesmo que usamos para emissão de NF-e).

    Ficarei extremamente grato caso consiga me ajudar.

    Obrigado e um abraço!

    sexta-feira, 5 de julho de 2019 18:58
  • Boa tarde Giuliano,

    Aqui utilizamos o certificado do tipo A1, outra coisa que passei sufoco foi ao implantar, o mesmo não reconhecia o certifica do iis mais direto do projeto sim.

    Pelo que pesquisei o certificado só é reconhecido pelo navegador via scripts.

    Me add no skype ai trocamos uma ideia melhor.

    marcio_camargo.mcs@hotmail.com

    quarta-feira, 10 de julho de 2019 18:03
  • Bom dia

    O siscomex exportação não autentica com E-CNPJ somente com E-CPF.

    sábado, 11 de setembro de 2021 12:17