quinta-feira, 4 de fevereiro de 2016

Como usar Certificado digital A1 com autenticação via suds python

Origem: http://preaks.weebly.com/bloggy/how-to-use-client-certificate-authentication-with-suds

Extraindo a chave do certificado:

openssl pkcs12 -nocerts -in ClientCert.p12 -out key.pem

Extraindo o certificado:

openssl pkcs12 -clcerts -nokeys -in ClientCert.p12 -out cert.pem

Removendo passphrase da chave:


openssl.exe rsa -in key.pem -out key_nopass.pem

 

TestaConexao.py

  import requests                                                      
  from suds.client import Client                                                 
  from suds.transport.http import HttpAuthenticated                              
  from suds.transport import Reply, TransportError                               
                                                                                   
                                                                                   
  class RequestsTransport(HttpAuthenticated):                                    
                                                                                   
      def __init__(self, **kwargs):                                              
          self.cert = kwargs.pop('cert', None)                                   
          HttpAuthenticated.__init__(self, **kwargs)                             
                                                                                  
      def send(self, request):                                                   
          self.addcredentials(request)                                           
          resp = requests.post(                                                  
              request.url,                                                       
              data=request.message,                                              
              headers=request.headers,                                           
              cert=self.cert,                                                    
              verify=True                                                        
          )                                                                      
          result = Reply(resp.status_code, resp.headers, resp.content)           
          return result                                                          
                                                                                  
 t = RequestsTransport(cert=('/opt/certificado/cert.pem',
                                '/opt/certificado/key.pem'))
 headers = {"Content-Type": "text/xml;charset=UTF-8", "SOAPAction": ""}         
 #import pudb;pu.db                                                              
 wsdl_url = 'https://nfe.prefeitura.sp.gov.br/ws/lotenfe.asmx?WSDL'             
 client = Client(wsdl_url, transport=t)


Nenhum comentário:

Postar um comentário