Jump to content

Segurança Social Direta - Webservice de Comunicar Vínculo Trabalhador


xyluiscosta

Recommended Posts

Boa dia,

Alguém está a implementar o novo WebService da Segurnaça Social, de Comunicar Vínculo Trabalhador?

http://www.plataformaservicos.seg-social.pt/files/plataforma_servicos_especificacoes_tecnicas.pdf

http://www.plataformaservicos.seg-social.pt/files/plataforma_servicos_apresentacao.pdf

Após ler as especificações técnica e realizar as alterações necessárias para o novo webservice de teste “https://preapp.seg-social.pt/ws/contrato/v1/registarVinculoTrabalhador“

Tenho os dados de acesso ao ambiente de teste, á vários dias que estou a tentar testar e dá sempre este erro

ERRO: “A ligação subjacente foi fechada: Não foi possível estabelecer uma relação de confiança para o canal seguro SSL/TLS.”

Não sei se alguém pode ajudar, mas desde já obrigado.

Link to comment
Share on other sites

Já tentaste fazer debug?  Não tens excepção/erro com mais detalhes?

Isso há partida é um erro de TLS, mas não conheço a mensagem de erro para perceber a causa, e há muito por onde o TLS pode falhar.  Podes começar por fazer uns pedidos com o cURL ou HTTPie para despistar erros do servidor ou do SO.

Link to comment
Share on other sites

Há uns dias não estava a conseguir aceder ao site de todo, e hoje lembrei-me que devia ser por causa do IP.

Depois de testar novamente o acesso com o Chrome, já deu para ver que o problema é o certificado root não ser conhecido pelo o SO.  Ou seja, há partida vais ter que instalar o certificado root manualmente na aplicação.  De referir que o host app.seg-social.pt já tem um certificado válido.

Link to comment
Share on other sites

  • 4 weeks later...
Em 19/08/2022 às 11:39, xyluiscosta disse:

ERRO: “A ligação subjacente foi fechada: Não foi possível estabelecer uma relação de confiança para o canal seguro SSL/TLS.”

Olá,

Descobri como ultrapassar esse erro, envio o código em baixo em VB.NET. Contudo, ao instanciar o client diz que não tem endpoint, defeni o endpoint igual ao endereço do wsdl, ams não autentica.

Podem partilhar o seu código de criação do client para comparar?

 

System.Net.ServicePointManager.ServerCertificateValidationCallback = Function()
  																		Return True
                                                                     End Function

 

Obrigado.

Link to comment
Share on other sites

        Dim requestsrt = buildxml()
        Dim header As New Authentification

         System.Net.ServicePointManager.SecurityProtocol = System.Net.SecurityProtocolType.Ssl3 Or SecurityProtocolType.Tls12 Or SecurityProtocolType.Tls11 Or SecurityProtocolType.Tls
            System.Net.ServicePointManager.ServerCertificateValidationCallback = New System.Net.Security.RemoteCertificateValidationCallback(AddressOf AcceptAllCertifications)
            Dim myUri As Uri = New Uri(CParas.GetString("url_ssdireta"))
            Dim request As System.Net.HttpWebRequest = CType(HttpWebRequest.Create(url_ssdireta), HttpWebRequest)

            request.Method = "POST"
            request.ContentType = "text/xml"
            Dim myNetworkCredential As NetworkCredential = New NetworkCredential(header.Utilizador, header.Password)
            Dim myCredentialCache As CredentialCache = New CredentialCache From {
                                                                                 {url_ssdireta, "Basic", myNetworkCredential}
                                                                              }
            request.PreAuthenticate = True
            request.Credentials = myCredentialCache

            Dim utfEncoder As System.Text.UTF8Encoding = New UTF8Encoding()
            Dim requestBytes As Byte() = utfEncoder.GetBytes(requestsrt)
            request.ContentLength = requestBytes.Length
            Dim theStream As Stream = request.GetRequestStream()
            theStream.Write(requestBytes, 0, requestBytes.Length)
            theStream.Close()

            Using Response As HttpWebResponse = CType(request.GetResponse(), HttpWebResponse)
                Dim encode As Encoding = System.Text.Encoding.GetEncoding("utf-8")
                Dim readStream As New StreamReader(Response.GetResponseStream(), encode)
                Dim results As String = readStream.ReadToEnd()
                Response.Close()

                trataResposta(results)
            End Using

    Private Shared Function AcceptAllCertifications(ByVal sender As Object, ByVal certification As System.Security.Cryptography.X509Certificates.X509Certificate, ByVal chain As System.Security.Cryptography.X509Certificates.X509Chain, ByVal sslPolicyErrors As System.Net.Security.SslPolicyErrors) As Boolean
        Return True
    End Function

Desta forma consegui ultrapassar os problema de ligação a wsdl da Segurança social direta

Link to comment
Share on other sites

Em 14/09/2022 às 15:24, Luís Figueira disse:

Olá,

Descobri como ultrapassar esse erro, envio o código em baixo em VB.NET. Contudo, ao instanciar o client diz que não tem endpoint, defeni o endpoint igual ao endereço do wsdl, ams não autentica.

Podem partilhar o seu código de criação do client para comparar?

 

System.Net.ServicePointManager.ServerCertificateValidationCallback = Function()
  																		Return True
                                                                     End Function

 

Obrigado.

Eu fiz testes com o curl no terminal e com o Chrome.  Não percebo de VB, mas isso parece-me que tira toda a segurança do TLS.  Recomendava-te que no máximo usasses isso no ambiente de testes, mas nunca em produção.

Link to comment
Share on other sites

Em 15/09/2022 às 18:50, Rui Carlos disse:

Eu fiz testes com o curl no terminal e com o Chrome.  Não percebo de VB, mas isso parece-me que tira toda a segurança do TLS.  Recomendava-te que no máximo usasses isso no ambiente de testes, mas nunca em produção.

O certificado do endpoint não é reconhecido, por isso a única forma de avançar é esta. 

Em 14/09/2022 às 17:39, xyluiscosta disse:
        Dim requestsrt = buildxml()
        Dim header As New Authentification

         System.Net.ServicePointManager.SecurityProtocol = System.Net.SecurityProtocolType.Ssl3 Or SecurityProtocolType.Tls12 Or SecurityProtocolType.Tls11 Or SecurityProtocolType.Tls
            System.Net.ServicePointManager.ServerCertificateValidationCallback = New System.Net.Security.RemoteCertificateValidationCallback(AddressOf AcceptAllCertifications)
            Dim myUri As Uri = New Uri(CParas.GetString("url_ssdireta"))
            Dim request As System.Net.HttpWebRequest = CType(HttpWebRequest.Create(url_ssdireta), HttpWebRequest)

            request.Method = "POST"
            request.ContentType = "text/xml"
            Dim myNetworkCredential As NetworkCredential = New NetworkCredential(header.Utilizador, header.Password)
            Dim myCredentialCache As CredentialCache = New CredentialCache From {
                                                                                 {url_ssdireta, "Basic", myNetworkCredential}
                                                                              }
            request.PreAuthenticate = True
            request.Credentials = myCredentialCache

            Dim utfEncoder As System.Text.UTF8Encoding = New UTF8Encoding()
            Dim requestBytes As Byte() = utfEncoder.GetBytes(requestsrt)
            request.ContentLength = requestBytes.Length
            Dim theStream As Stream = request.GetRequestStream()
            theStream.Write(requestBytes, 0, requestBytes.Length)
            theStream.Close()

            Using Response As HttpWebResponse = CType(request.GetResponse(), HttpWebResponse)
                Dim encode As Encoding = System.Text.Encoding.GetEncoding("utf-8")
                Dim readStream As New StreamReader(Response.GetResponseStream(), encode)
                Dim results As String = readStream.ReadToEnd()
                Response.Close()

                trataResposta(results)
            End Using

    Private Shared Function AcceptAllCertifications(ByVal sender As Object, ByVal certification As System.Security.Cryptography.X509Certificates.X509Certificate, ByVal chain As System.Security.Cryptography.X509Certificates.X509Chain, ByVal sslPolicyErrors As System.Net.Security.SslPolicyErrors) As Boolean
        Return True
    End Function

Desta forma consegui ultrapassar os problema de ligação a wsdl da Segurança social direta

Olá, pode também facultar a função buildxml?

Link to comment
Share on other sites

Em 14/09/2022 às 17:39, xyluiscosta disse:
        Dim requestsrt = buildxml()
        Dim header As New Authentification

         System.Net.ServicePointManager.SecurityProtocol = System.Net.SecurityProtocolType.Ssl3 Or SecurityProtocolType.Tls12 Or SecurityProtocolType.Tls11 Or SecurityProtocolType.Tls
            System.Net.ServicePointManager.ServerCertificateValidationCallback = New System.Net.Security.RemoteCertificateValidationCallback(AddressOf AcceptAllCertifications)
            Dim myUri As Uri = New Uri(CParas.GetString("url_ssdireta"))
            Dim request As System.Net.HttpWebRequest = CType(HttpWebRequest.Create(url_ssdireta), HttpWebRequest)

            request.Method = "POST"
            request.ContentType = "text/xml"
            Dim myNetworkCredential As NetworkCredential = New NetworkCredential(header.Utilizador, header.Password)
            Dim myCredentialCache As CredentialCache = New CredentialCache From {
                                                                                 {url_ssdireta, "Basic", myNetworkCredential}
                                                                              }
            request.PreAuthenticate = True
            request.Credentials = myCredentialCache

            Dim utfEncoder As System.Text.UTF8Encoding = New UTF8Encoding()
            Dim requestBytes As Byte() = utfEncoder.GetBytes(requestsrt)
            request.ContentLength = requestBytes.Length
            Dim theStream As Stream = request.GetRequestStream()
            theStream.Write(requestBytes, 0, requestBytes.Length)
            theStream.Close()

            Using Response As HttpWebResponse = CType(request.GetResponse(), HttpWebResponse)
                Dim encode As Encoding = System.Text.Encoding.GetEncoding("utf-8")
                Dim readStream As New StreamReader(Response.GetResponseStream(), encode)
                Dim results As String = readStream.ReadToEnd()
                Response.Close()

                trataResposta(results)
            End Using

    Private Shared Function AcceptAllCertifications(ByVal sender As Object, ByVal certification As System.Security.Cryptography.X509Certificates.X509Certificate, ByVal chain As System.Security.Cryptography.X509Certificates.X509Chain, ByVal sslPolicyErrors As System.Net.Security.SslPolicyErrors) As Boolean
        Return True
    End Function

Desta forma consegui ultrapassar os problema de ligação a wsdl da Segurança social direta

Boas, estou a tentar usar estes web-services da segurança social em VB.NET. Já tentei com as classes geradas automaticamente pelo VS e não cheguei a lado nenhum.

Agora gostava de tentar com este código partilhado pelo xyluiscosta, mas também precisava de saber o que está na função buildxml().

Já agora, uma questão para o xyluiscosta: se usas VB.NET, por que motivo não aproveitaste as classes do Visual Studio para isto?

Link to comment
Share on other sites

  • 1 month later...
Em 23/09/2022 às 17:51, Pelikan disse:

Finalmente isto funcionou-me.

xyluiscosta, obrigado MESMO.

Boa tarde Pelikan,

utilizei o mesmo codigo acima com o exemplo que eles colocam no manual e não estou a conseguir comunicar nem a conseguir perceber o problema.

Consegue dizer-me se neste momento consegue fazer o teste e se os serviços estão a funcionar sem problema?

Estou a utilizar o codigo abaixo em C#:


            var requestsrt = buildxml();

            string servicePath = "https://preapp.seg-social.pt/ws/contrato/v1/obterComunicacoes";

            ServicePointManager.SecurityProtocol = SecurityProtocolType.Ssl3 | SecurityProtocolType.Tls12 | SecurityProtocolType.Tls11 | SecurityProtocolType.Tls;
            ServicePointManager.ServerCertificateValidationCallback += (sender, cert, chain, sslPolicyErrors) => true;


            var myUri = new Uri(servicePath);
            var request = (HttpWebRequest)WebRequest.Create(servicePath);
            request.Method = "POST";
            request.ContentType = "text/xml";

            var myNetworkCredential = new NetworkCredential("234234234", "234234234");

            var myCredentialCache = new CredentialCache();
            myCredentialCache.Add(myUri, "Basic", myNetworkCredential);

            request.PreAuthenticate = true;
            request.Credentials = myCredentialCache;

            var utfEncoder = new UTF8Encoding();
            var requestBytes = utfEncoder.GetBytes(requestsrt);
            request.ContentLength = requestBytes.Length;

            Stream theStream = request.GetRequestStream();

            theStream.Write(requestBytes, 0, requestBytes.Length);
            theStream.Close();

            try
            {
                using (HttpWebResponse Response = (HttpWebResponse)request.GetResponse())
                {
                    var encode = System.Text.Encoding.GetEncoding("utf-8");
                    var readStream = new StreamReader(Response.GetResponseStream(), encode);
                    var results = readStream.ReadToEnd();
                    Response.Close();

                    trataResposta(results);
                }
            }
            catch (WebException ex)
            {
                throw ex;
            }

 

Link to comment
Share on other sites

  • 3 weeks later...
  • 3 months later...
Em 14/09/2022 às 17:39, xyluiscosta disse:
        Dim requestsrt = buildxml()
        Dim header As New Authentification

         System.Net.ServicePointManager.SecurityProtocol = System.Net.SecurityProtocolType.Ssl3 Or SecurityProtocolType.Tls12 Or SecurityProtocolType.Tls11 Or SecurityProtocolType.Tls
            System.Net.ServicePointManager.ServerCertificateValidationCallback = New System.Net.Security.RemoteCertificateValidationCallback(AddressOf AcceptAllCertifications)
            Dim myUri As Uri = New Uri(CParas.GetString("url_ssdireta"))
            Dim request As System.Net.HttpWebRequest = CType(HttpWebRequest.Create(url_ssdireta), HttpWebRequest)

            request.Method = "POST"
            request.ContentType = "text/xml"
            Dim myNetworkCredential As NetworkCredential = New NetworkCredential(header.Utilizador, header.Password)
            Dim myCredentialCache As CredentialCache = New CredentialCache From {
                                                                                 {url_ssdireta, "Basic", myNetworkCredential}
                                                                              }
            request.PreAuthenticate = True
            request.Credentials = myCredentialCache

            Dim utfEncoder As System.Text.UTF8Encoding = New UTF8Encoding()
            Dim requestBytes As Byte() = utfEncoder.GetBytes(requestsrt)
            request.ContentLength = requestBytes.Length
            Dim theStream As Stream = request.GetRequestStream()
            theStream.Write(requestBytes, 0, requestBytes.Length)
            theStream.Close()

            Using Response As HttpWebResponse = CType(request.GetResponse(), HttpWebResponse)
                Dim encode As Encoding = System.Text.Encoding.GetEncoding("utf-8")
                Dim readStream As New StreamReader(Response.GetResponseStream(), encode)
                Dim results As String = readStream.ReadToEnd()
                Response.Close()

                trataResposta(results)
            End Using

    Private Shared Function AcceptAllCertifications(ByVal sender As Object, ByVal certification As System.Security.Cryptography.X509Certificates.X509Certificate, ByVal chain As System.Security.Cryptography.X509Certificates.X509Chain, ByVal sslPolicyErrors As System.Net.Security.SslPolicyErrors) As Boolean
        Return True
    End Function

Desta forma consegui ultrapassar os problema de ligação a wsdl da Segurança social direta

Boa tarde,
usei o seu código e estou a sempre a obter a resposta "O servidor remoto devolveu um erro: (404) Não encontrado."

Qual o url_ssdireta que seve ser usado?

 

Obrigado desde já

Link to comment
Share on other sites

Boas, os url's são os publicados na documentação:

Para registar trabalhador:

em testes: https://preapp.seg-social.pt/ws/contrato/v1/registarVinculoTrabalhador?wsdl=

em real: https://app.seg-social.pt/ws/contrato/v1/registarVinculoTrabalhador?wsdl

em testes, o acesso tem que ser com a chave fornecida por eles, e só com os IP's designados.

se isto estiver certo, o problema deve ser outro.

  • Vote 1
Link to comment
Share on other sites

Em 14/03/2023 às 11:46, Pelikan disse:

Boas, os url's são os publicados na documentação:

Para registar trabalhador:

em testes: https://preapp.seg-social.pt/ws/contrato/v1/registarVinculoTrabalhador?wsdl=

em real: https://app.seg-social.pt/ws/contrato/v1/registarVinculoTrabalhador?wsdl

em testes, o acesso tem que ser com a chave fornecida por eles, e só com os IP's designados.

se isto estiver certo, o problema deve ser outro.

Muito  obrigado
Está resolvido

Link to comment
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
×
×
  • Create New...

Important Information

By using this site you accept our Terms of Use and Privacy Policy. We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.