segunda-feira, 20 de junho de 2016

Curso WinDev - Certificado - 004 - CertificateLoad - Chamar pfx/arquivo









Video Youtube


Nessa aula vou ensinar como chamar um certificado por arquivo pfx

This class will teach how to call a certificate for pfx file

Cette classe vous apprendra comment appeler un certificat pour le fichier .pfx

doc.windev.com/en-US/?1000020851&name=CertificateLoad
doc.pcsoft.fr/fr-FR/?1000020851&name=certificatcharge_fonction

Blog - WinDev - Curso Certificado - 001/... - Seleciona Certificado - Certificate Select 
Blog - WinDev - Curso Certificado - 002/... - Certificate Type - Pegar Dados Certificado
Blog - WinDev - Curso Certificado - 003/... - Ver se Certificado é Válido
Blog - WinDev - Curso Certificado - 004/... - CertificateLoad - Chamar pfx/arquivo
Blog - WinDev - Curso Certificado - 005/... - Assinatura Digital Nfe - Parte 1/...
Blog - WinDev - Curso Certificado - 006/... - Assinatura nfe - Parte 2/... - System.xml.xmlDocument
Blog - WinDev - Curso Certificado - 007/... - Assinatura nfe - Parte 3/... - Assinar Documento
Blog - Windev - Curso Certificado - 008/... HttpListCertificate
Blog - WinDev - Curso Soap - 009/... Consulta Cadastro Sefaz - WebService
Blog - WinDev - Curso Soap - 010 - Status Nfe Sefaz - WebService



//Em Ingles
//Selecionar o Certificado //Select the certificate //Spelectionnez le certificat
//Pegados Dados Do Certificado //taking certificate dice //Prenant certificat dice

_certificado is Certificate // certificate // certificat //
IF EDT_certificado_digitado="" THEN
    //Vai procurar certificado no Windows
    //Will seek certificate in Windows    
    //Cherchera certificat dans Windows
    _certificado = CertificateSelect()    
ELSE
    //Vai buscar o arqivo certificado pfx    
    //Go get the certificate file pfx
    //Allez chercher le fichier de certificat .pfx
    arr_certificado is array of Certificates
    arr_certificado = CertificateLoad(EDT_certificado_digitado,EDT_SenhaCertificado)
    _certificado=arr_certificado[1]
END

s_retorno_certificado is string="" // s_retorno certificate // certificat s_retorn

verifica_certificado() // check certificate // chèque certificat
IF s_retorno_certificado="Certificado Valido" THEN
    dados_certificado()    // certificate data //données de certificat
END

    INTERNAL PROCEDURE verifica_certificado()
      IF _certificado..Name="" THEN
            s_retorno_certificado="Erro"
            Info(s_retorno_certificado)
            RETURN
      END
      IF _certificado..ValidForSignature=False THEN
          s_retorno_certificado="O Certificado selecionado não pode ser utilizado para gerar uma assinatura"
        Info(s_retorno_certificado)
        RETURN
      END
      SWITCH _certificado..Reliability
          CASE certificateOk:
              s_retorno_certificado="Certificado Valido"
          CASE certificateInvalid:
            s_retorno_certificado="Certificado invalidido"
        CASE certificateUntrusted:
            s_retorno_certificado="Certificado Nao Confiavel"
        CASE certificateExpired:
            s_retorno_certificado="Expirado Certificado"
      END   
       Info(s_retorno_certificado)         
         
    END

    INTERNAL PROCEDURE dados_certificado()
    EDT_DadosDoCertificado="" // Limpando edt do certificado // cleaning edt certificate // certificat edt nettoyage
    EDT_DadosDoCertificado+="=====NOVOS WINDEV 21 ===============" //Novos Windev 21//new windev 21//
    EDT_DadosDoCertificado+=CR+"Nome Completo Emissor [ "+_certificado.FullIssuer+" ] "
    EDT_DadosDoCertificado+=CR+"Numero Associado ["+_certificado.Empreinte+" ]" // Em Frances // Em Ingles (Fingerprint)
    EDT_DadosDoCertificado+=CR+"-Objeto   [ "+_certificado.objet+" ]"  // Em Frances // Em Ingles (  object )
    EDT_DadosDoCertificado+=CR+"===== Já tinha Windev 20  ==============="
    EDT_DadosDoCertificado+=CR+"Nome Resumido  [ "+_certificado.Name+" ]"
    EDT_DadosDoCertificado+=CR+"Inicio Validade  [ "+_certificado.StartValidityDate+" ]"
    EDT_DadosDoCertificado+=CR+"Final Validade  [ "+_certificado.EndValidityDate+" ]"
    EDT_DadosDoCertificado+=CR+"Issuer- Emissora  [ "+_certificado.Issuer+" ]"
    EDT_DadosDoCertificado+=CR+"Reliability-Confianca  [ "+_certificado.Reliability+" ]"
    EDT_DadosDoCertificado+=CR+"Serial Numero  [ "+_certificado.SerialNumber+" ]"
    EDT_DadosDoCertificado+=CR+"Certificado Valido  [ "+_certificado.ValidForSignature+" ]"
    EDT_DadosDoCertificado+=CR+"Subject   [ "+_certificado.Subject+" ]"
    EDT_DadosDoCertificado+=CR+"Thumprint - Impressão Digital  [ "+_certificado.ThumbPrint+" ]"
    EDT_DadosDoCertificado+=CR+"======================================"
   
    END

//Blog com Video e Exemplo
//youtube






//Em Frances

//Selecionar o Certificado //Select the certificate //Spelectionnez le certificat
//Pegados Dados Do Certificado //taking certificate dice //Prenant certificat dice

_certificado est un Certificat // certificate // certificat //
SI EDT_certificado_digitado="" ALORS
    //Vai procurar certificado no Windows
    //Will seek certificate in Windows    
    //Cherchera certificat dans Windows
    _certificado = CertificatSélecteur()    
SINON
    //Vai buscar o arqivo certificado pfx    
    //Go get the certificate file pfx
    //Allez chercher le fichier de certificat .pfx
    arr_certificado est tableau de Certificat
    arr_certificado = CertificatCharge(EDT_certificado_digitado,EDT_SenhaCertificado)
    _certificado=arr_certificado[1]
FIN

s_retorno_certificado est chaîne="" // s_retorno certificate // certificat s_retorn

verifica_certificado() // check certificate // chèque certificat
SI s_retorno_certificado="Certificado Valido" ALORS
    dados_certificado()    // certificate data //données de certificat
FIN

    PROCEDURE INTERNE verifica_certificado()
      SI _certificado..Nom="" ALORS
            s_retorno_certificado="Erro"
            Info(s_retorno_certificado)
            RETOUR
      FIN
      SI _certificado..ValidePourSignature=Faux ALORS
          s_retorno_certificado="O Certificado selecionado não pode ser utilizado para gerar uma assinatura"
        Info(s_retorno_certificado)
        RETOUR
      FIN
      SELON _certificado..Fiabilité
          CAS certificatOk:
              s_retorno_certificado="Certificado Valido"
          CAS certificatInvalide:
            s_retorno_certificado="Certificado invalidido"
        CAS certificatNonFiable:
            s_retorno_certificado="Certificado Nao Confiavel"
        CAS certificatExpiré:
            s_retorno_certificado="Expirado Certificado"
      FIN   
       Info(s_retorno_certificado)         
         
    FIN

    PROCEDURE INTERNE dados_certificado()
    EDT_DadosDoCertificado="" // Limpando edt do certificado // cleaning edt certificate // certificat edt nettoyage
    EDT_DadosDoCertificado+="=====NOVOS WINDEV 21 ===============" //Novos Windev 21//new windev 21//
    EDT_DadosDoCertificado+=RC+"Nome Completo Emissor [ "+_certificado.EmetteurComplet+" ] "
    EDT_DadosDoCertificado+=RC+"Numero Associado ["+_certificado.Empreinte+" ]" // Em Frances // Em Ingles (Fingerprint)
    EDT_DadosDoCertificado+=RC+"-Objeto   [ "+_certificado.objet+" ]"  // Em Frances // Em Ingles (  object )
    EDT_DadosDoCertificado+=RC+"===== Já tinha Windev 20  ==============="
    EDT_DadosDoCertificado+=RC+"Nome Resumido  [ "+_certificado.Nom+" ]"
    EDT_DadosDoCertificado+=RC+"Inicio Validade  [ "+_certificado.DateValiditéDébut+" ]"
    EDT_DadosDoCertificado+=RC+"Final Validade  [ "+_certificado.DateValiditéFin+" ]"
    EDT_DadosDoCertificado+=RC+"Issuer- Emissora  [ "+_certificado.Emetteur+" ]"
    EDT_DadosDoCertificado+=RC+"Reliability-Confianca  [ "+_certificado.Fiabilité+" ]"
    EDT_DadosDoCertificado+=RC+"Serial Numero  [ "+_certificado.NuméroSérie+" ]"
    EDT_DadosDoCertificado+=RC+"Certificado Valido  [ "+_certificado.ValidePourSignature+" ]"
    EDT_DadosDoCertificado+=RC+"Subject   [ "+_certificado.objet+" ]"
    EDT_DadosDoCertificado+=RC+"Thumprint - Impressão Digital  [ "+_certificado.Empreinte+" ]"
    EDT_DadosDoCertificado+=RC+"======================================"
   
    FIN

//Blog com Video e Exemplo//youtube
























sexta-feira, 17 de junho de 2016

Curso WinDev - Certificado - 003 - Ver se Certificado é Válido



Video Youtube


Nessa aula vou mostrar como verificar se certificado é válido

In this lecture I will show how to check if certificate is valid'll call procedure

Dans cette conférence, je vais vous montrer comment vérifier si le certificat est valid'll procédure d'appel
 

doc.windev.com/en-US/?1000019307&name=Certificate_constants
http://doc.pcsoft.fr/fr-FR/?1000019307&name=constantes_gestion_des_certificats

Blog - WinDev - Curso Certificado - 001/... - Seleciona Certificado - Certificate Select 
Blog - WinDev - Curso Certificado - 002/... - Certificate Type - Pegar Dados Certificado
Blog - WinDev - Curso Certificado - 003/... - Ver se Certificado é Válido
Blog - WinDev - Curso Certificado - 004/... - CertificateLoad - Chamar pfx/arquivo
Blog - WinDev - Curso Certificado - 005/... - Assinatura Digital Nfe - Parte 1/...
Blog - WinDev - Curso Certificado - 006/... - Assinatura nfe - Parte 2/... - System.xml.xmlDocument
Blog - WinDev - Curso Certificado - 007/... - Assinatura nfe - Parte 3/... - Assinar Documento
Blog - Windev - Curso Certificado - 008/... HttpListCertificate
Blog - WinDev - Curso Soap - 009/... Consulta Cadastro Sefaz - WebService
Blog - WinDev - Curso Soap - 010 - Status Nfe Sefaz - WebService

Exemplo Se certificado é válido

//Exemplo Se certificado é válido
//Example If the certificate is valid
//Exemple Si le certificat est valide

x//Ingles

_certificado is Certificate
_certificado = CertificateSelect()

s_retorno_certificado is string="" // s_retorno certificate // certificat s_retorn
verifica_certificado()  // check certificate // chèque certificat
IF s_retorno_certificado="Certificado Valido" THEN
    dados_certificado()    // certificate data //données de certificat
END


    INTERNAL PROCEDURE verifica_certificado()
      IF _certificado..Name="" THEN
            s_retorno_certificado="Erro"
            Info(s_retorno_certificado)
            RETURN
      END
      IF _certificado..ValidForSignature=False THEN
          s_retorno_certificado="O Certificado selecionado não pode ser utilizado para gerar uma assinatura"
        Info(s_retorno_certificado)
        RETURN
      END
      SWITCH _certificado..Reliability
          CASE certificateOk:
              s_retorno_certificado="Certificado Valido"
          CASE certificateInvalid:
            s_retorno_certificado="Certificado invalidido"
        CASE certificateUntrusted:
            s_retorno_certificado="Certificado Nao Confiavel"
        CASE certificateExpired:
            s_retorno_certificado="Expirado Certificado"
      END   
       Info(s_retorno_certificado)         
         
    END

    INTERNAL PROCEDURE dados_certificado()
    EDT_DadosDoCertificado="" // Limpando edt do certificado // cleaning edt certificate // certificat edt nettoyage
    EDT_DadosDoCertificado+="=====NOVOS WINDEV 21 ===============" //Novos Windev 21//new windev 21//
    EDT_DadosDoCertificado+=CR+"Nome Completo Emissor [ "+_certificado.FullIssuer+" ] "
    EDT_DadosDoCertificado+=CR+"Numero Associado ["+_certificado.Empreinte+" ]" // Em Frances // Em Ingles (Fingerprint)
    EDT_DadosDoCertificado+=CR+"-Objeto   [ "+_certificado.objet+" ]"  // Em Frances // Em Ingles (  object )
    EDT_DadosDoCertificado+=CR+"===== Já tinha Windev 20  ==============="
    EDT_DadosDoCertificado+=CR+"Nome Resumido  [ "+_certificado.Name+" ]"
    EDT_DadosDoCertificado+=CR+"Inicio Validade  [ "+_certificado.StartValidityDate+" ]"
    EDT_DadosDoCertificado+=CR+"Final Validade  [ "+_certificado.EndValidityDate+" ]"
    EDT_DadosDoCertificado+=CR+"Issuer- Emissora  [ "+_certificado.Issuer+" ]"
    EDT_DadosDoCertificado+=CR+"Reliability-Confianca  [ "+_certificado.Reliability+" ]"
    EDT_DadosDoCertificado+=CR+"Serial Numero  [ "+_certificado.SerialNumber+" ]"
    EDT_DadosDoCertificado+=CR+"Certificado Valido  [ "+_certificado.ValidForSignature+" ]"
    EDT_DadosDoCertificado+=CR+"Subject   [ "+_certificado.Subject+" ]"
    EDT_DadosDoCertificado+=CR+"Thumprint - Impressão Digital  [ "+_certificado.ThumbPrint+" ]"
    EDT_DadosDoCertificado+=CR+"======================================"
   
    END
    
x

y//Frances
//Selecionar o Certificado //Select the certificate //Spelectionnez le certificat
//Pegados Dados Do Certificado //taking certificate dice //Prenant certificat dice

_certificado est un Certificat
_certificado = CertificatSélecteur()

s_retorno_certificado est chaîne="" // s_retorno certificate // certificat s_retorno

verifica_certificado() // check certificate // chèque certificat
SI s_retorno_certificado="Certificado Valido" ALORS
    dados_certificado()     // certificate data //données de certificat
FIN


    PROCEDURE INTERNE verifica_certificado()
      SI _certificado..Nom="" ALORS
            s_retorno_certificado="Erro"
            Info(s_retorno_certificado)
            RETOUR
      FIN
      SI _certificado..ValidePourSignature=Faux ALORS
          s_retorno_certificado="O Certificado selecionado não pode ser utilizado para gerar uma assinatura"
        Info(s_retorno_certificado)
        RETOUR
      FIN
      SELON _certificado..Fiabilité
          CAS certificatOk:
              s_retorno_certificado="Certificado Valido"
          CAS certificatInvalide:
            s_retorno_certificado="Certificado invalidido"
        CAS certificatNonFiable:
            s_retorno_certificado="Certificado Nao Confiavel"
        CAS certificatExpiré:
            s_retorno_certificado="Expirado Certificado"
      FIN   
       Info(s_retorno_certificado)         
         
    FIN

    PROCEDURE INTERNE dados_certificado()
    EDT_DadosDoCertificado="" // Limpando edt do certificado // cleaning edt certificate // certificat edt nettoyage
    EDT_DadosDoCertificado+="=====NOVOS WINDEV 21 ===============" //Novos Windev 21//new windev 21//
    EDT_DadosDoCertificado+=RC+"Nome Completo Emissor [ "+_certificado.EmetteurComplet+" ] "
    EDT_DadosDoCertificado+=RC+"Numero Associado ["+_certificado.Empreinte+" ]" // Em Frances // Em Ingles (Fingerprint)
    EDT_DadosDoCertificado+=RC+"-Objeto   [ "+_certificado.objet+" ]"  // Em Frances // Em Ingles (  object )
    EDT_DadosDoCertificado+=RC+"===== Já tinha Windev 20  ==============="
    EDT_DadosDoCertificado+=RC+"Nome Resumido  [ "+_certificado.Nom+" ]"
    EDT_DadosDoCertificado+=RC+"Inicio Validade  [ "+_certificado.DateValiditéDébut+" ]"
    EDT_DadosDoCertificado+=RC+"Final Validade  [ "+_certificado.DateValiditéFin+" ]"
    EDT_DadosDoCertificado+=RC+"Issuer- Emissora  [ "+_certificado.Emetteur+" ]"
    EDT_DadosDoCertificado+=RC+"Reliability-Confianca  [ "+_certificado.Fiabilité+" ]"
    EDT_DadosDoCertificado+=RC+"Serial Numero  [ "+_certificado.NuméroSérie+" ]"
    EDT_DadosDoCertificado+=RC+"Certificado Valido  [ "+_certificado.ValidePourSignature+" ]"
    EDT_DadosDoCertificado+=RC+"Subject   [ "+_certificado.objet+" ]"
    EDT_DadosDoCertificado+=RC+"Thumprint - Impressão Digital  [ "+_certificado.Empreinte+" ]"
    EDT_DadosDoCertificado+=RC+"======================================"
   
    FIN


y
//Blog com Video e Exemplo
http://windevdesenvolvimento.blogspot.com.br/2016/06/curso-windev-certificado-003-ver-se.html
https://www.youtube.com/watch?v=kE0T04bbxz4   


/Selecionar o Certificado //Select the certificate //Spelectionnez le certificat
//Pegados Dados Do Certificado //taking certificate dice //Prenant certificat dice

_certificado is Certificate
_certificado = CertificateSelect()

s_retorno_certificado is string=""

verifica_certificado()
IF s_retorno_certificado="Certificado Valido" THEN
    dados_certificado()   
END




    INTERNAL PROCEDURE verifica_certificado()
      IF _certificado..Name="" THEN
            s_retorno_certificado="Erro"
            Info(s_retorno_certificado)
            RETURN
      END
      IF _certificado..ValidForSignature=False THEN
          s_retorno_certificado="O Certificado selecionado não pode ser utilizado para gerar uma assinatura"
        Info(s_retorno_certificado)
        RETURN
      END
      SWITCH _certificado..Reliability
          CASE certificateOk:
              s_retorno_certificado="Certificado Valido"
          CASE certificateInvalid:
            s_retorno_certificado="Certificado invalidido"
        CASE certificateUntrusted:
            s_retorno_certificado="Certificado Nao Confiavel"
        CASE certificateExpired:
            s_retorno_certificado="Expirado Certificado"
      END   
       Info(s_retorno_certificado)         
         
    END




    INTERNAL PROCEDURE dados_certificado()
    EDT_DadosDoCertificado="" // Limpando edt do certificado // cleaning edt certificate // certificat edt nettoyage
    EDT_DadosDoCertificado+="=====NOVOS WINDEV 21 ===============" //Novos Windev 21//new windev 21//
    EDT_DadosDoCertificado+=CR+"Nome Completo Emissor [ "+_certificado.FullIssuer+" ] "
    EDT_DadosDoCertificado+=CR+"Numero Associado ["+_certificado.Empreinte+" ]" // Em Frances // Em Ingles (Fingerprint)
    EDT_DadosDoCertificado+=CR+"-Objeto   [ "+_certificado.objet+" ]"  // Em Frances // Em Ingles (  object )
    EDT_DadosDoCertificado+=CR+"===== Já tinha Windev 20  ==============="
    EDT_DadosDoCertificado+=CR+"Nome Resumido  [ "+_certificado.Name+" ]"
    EDT_DadosDoCertificado+=CR+"Inicio Validade  [ "+_certificado.StartValidityDate+" ]"
    EDT_DadosDoCertificado+=CR+"Final Validade  [ "+_certificado.EndValidityDate+" ]"
    EDT_DadosDoCertificado+=CR+"Issuer- Emissora  [ "+_certificado.Issuer+" ]"
    EDT_DadosDoCertificado+=CR+"Reliability-Confianca  [ "+_certificado.Reliability+" ]"
    EDT_DadosDoCertificado+=CR+"Serial Numero  [ "+_certificado.SerialNumber+" ]"
    EDT_DadosDoCertificado+=CR+"Certificado Valido  [ "+_certificado.ValidForSignature+" ]"
    EDT_DadosDoCertificado+=CR+"Subject   [ "+_certificado.Subject+" ]"
    EDT_DadosDoCertificado+=CR+"Thumprint - Impressão Digital  [ "+_certificado.ThumbPrint+" ]"
    EDT_DadosDoCertificado+=CR+"======================================"
   
    END






















quinta-feira, 16 de junho de 2016

Assinar XML com certificado Digital



Forum.pcsoft.fr/fr-FR/pcsoft.br.windev/1253-assinar-xml-com-certificado-digital/read.awp



Aqui deixo para voces usando como assinar um xml usando certificado digital. em base ao exemplo do Vilani. 

Agradecimentos a @JorgeMatos - PT e @mpDani - MX

Codigo do botao

sXmlstring , sMlfirmado is string
sXmlstring = fLoadText(fExeDir()+"\arquivo.xml",foUnicode)
sMlfirmado = AssinarXML(sXmlstring)

fSaveText(fExeDir()+"\arquivoAssinado.xml",sMlfirmado)



Procedure

Procedure AssinarXML(xmlString is string)
s_IssuerName, s_SerialNumber are strings

X509Cert is X509Certificate2("certificado.pfx","SenhaCertificado")

// Cria um novo XML.
Doc is System.Xml.XmlDocument;

Doc.LoadXml(xmlString)

// cria um objeto xml assinado
VrSignedXml is SignedXml(Doc) //= SignedXml(doc);

// adiciona a chave do certificado 
VrSignedXml.SigningKey = X509Cert.PrivateKey

//Criar um Referenceobjeto que descreve o que assinar.Para assinar o documento inteiro, defina aUripropriedade"".
Reference is Reference();
Reference.set_Uri("");
//Reference.set_Uri("Soap Body");


// Adicione umXmlDsigEnvelopedSignatureTransformdo objeto para oReferenceobjeto.Uma transformação permite que o 
// verificador representar os dados XML da maneira idênticas que o signatário usado.Dados XML podem ser representados 
// de diversas maneiras, essa etapa é vital para verificação.
Env is XmlDsigEnvelopedSignatureTransform();
Reference.AddTransform(Env);

// adiciona a referencia no xml assinado
VrSignedXml.AddReference(Reference)

// Cria a chave
VrkeyInfo is KeyInfo 
// carrega o certificado em um keyinfox509 e adiciona ao keyinfo
VrkeyInfo.AddClause(new KeyInfoX509Data(X509Cert))

// Obter IssuerName e SerialNumber
kdata is KeyInfoX509Data(X509Cert)
s_IssuerName = X509Cert.IssuerName.ToString()
s_SerialNumber = X509Cert.SerialNumber
kdata.AddIssuerSerial(s_IssuerName, s_SerialNumber)
VrkeyInfo.AddClause(kdata)

// adiciona o keyinfo ao xml assinado
VrSignedXml.keyInfo = VrkeyInfo

VrSignedXml.ComputeSignature()

// busca a representacao XML da assinatura e salva no XML
xmlDigitalSignature is System.Xml.XmlElement dynamic = VrSignedXml.GetXml()

// adiciona a assinatura no documento
Doc.DocumentElement.AppendChild(Doc.ImportNode(xmlDigitalSignature, True))


//devolve o documento assinado
RESULT Doc.get_InnerXml()










Teste

Teste
teste