Ignore:
Timestamp:
09/13/10 15:01:56 (14 years ago)
Author:
rafaelraymundo
Message:

Ticket #1237 - Atualizados componentes de suporte ao uso do Certificado Digital.

Location:
branches/2.2/security/crl_admin
Files:
3 edited

Legend:

Unmodified
Added
Removed
  • branches/2.2/security/crl_admin/crl_admin.conf

    r1174 r3232  
    1 # Lista das urls apontando CRLs, e onde colocar(path) os arquivos obtidos .... 
     1# Lista das urls apontando CRLs .... 
    22# Formato: 
    3 # url;path   ( o path deve terminar com uma / ) 
    4 http://ccd.serpro.gov.br/lcr/serproacfv1.crl;/var/www/expresso/security/crls/ 
    5 http://ccd.serpro.gov.br/lcr/serproacfv2.crl;/var/www/expresso/security/crls/ 
    6 http://ccd.serpro.gov.br/lcr/ACPRv1.crl;/var/www/expresso/security/crls/ 
    7 http://ccd.serpro.gov.br/lcr/ACPRv2.crl;/var/www/expresso/security/crls/ 
    8 http://ccd.serpro.gov.br/lcr/ACSERPRORFB.crl;/var/www/expresso/security/crls/ 
    9 http://acraiz.icpbrasil.gov.br/LCRacraizv1.crl;/var/www/expresso/security/crls/ 
    10 http://acraiz.icpbrasil.gov.br/LCRacraiz.crl;/var/www/expresso/security/crls/ 
    11 http://ccd.serpro.gov.br/lcr/acserpro.crl;/var/www/expresso/security/crls/ 
    12 http://ccd.serpro.gov.br/lcr/acserprojus.crl;/var/www/expresso/security/crls/ 
    13 http://ccd.serpro.gov.br/lcr/acserprorfb.crl;/var/www/expresso/security/crls/ 
    14 http://ccd.serpro.gov.br/lcr/acserprosrf.crl;/var/www/expresso/security/crls/ 
    15 http://icp.caixa.gov.br/repositorio/ACCAIXA1.crl;/var/www/expresso/security/crls/ 
    16 http://icp.caixa.gov.br/repositorio/ACCAIXAPF1.crl;/var/www/expresso/security/crls/ 
    17 http://icp.caixa.gov.br/repositorio/ACCAIXAPJ1.crl;/var/www/expresso/security/crls/ 
    18 http://icp.caixa.gov.br/repositorio/ACCAIXAJUS.crl;/var/www/expresso/security/crls/ 
    19 http://ccdhom.serpro.gov.br/lcr/homacraizv2.crl;/var/www/expresso/security/crls/ 
    20 http://ccdhom.serpro.gov.br/lcr/homserprov2.crl;/var/www/expresso/security/crls/ 
    21 http://ccdhom.serpro.gov.br/lcr/acserprorfbv1.crl;/var/www/expresso/security/crls/ 
     3# url ( url apontando a crl - uma por linha) 
     4http://ccd.serpro.gov.br/lcr/serproacfv1.crl 
     5http://ccd.serpro.gov.br/lcr/serproacfv2.crl 
     6http://ccd.serpro.gov.br/lcr/ACPRv1.crl 
     7http://ccd.serpro.gov.br/lcr/ACPRv2.crl 
     8http://ccd.serpro.gov.br/lcr/acserprorfb.crl 
     9http://acraiz.icpbrasil.gov.br/LCRacraizv1.crl 
     10http://acraiz.icpbrasil.gov.br/LCRacraiz.crl 
     11http://ccd.serpro.gov.br/lcr/acserpro.crl 
     12http://ccd.serpro.gov.br/lcr/acserprojus.crl 
     13http://ccd.serpro.gov.br/lcr/acserprorfb.crl 
     14http://ccd.serpro.gov.br/lcr/acserprosrf.crl 
     15http://icp.caixa.gov.br/repositorio/ACCAIXA1.crl 
     16http://icp.caixa.gov.br/repositorio/ACCAIXAPF1.crl 
     17http://icp.caixa.gov.br/repositorio/ACCAIXAPJ1.crl 
     18http://icp.caixa.gov.br/repositorio/ACCAIXAJUS.crl 
     19http://ccdhom.serpro.gov.br/lcr/homacraizv2.crl 
     20http://ccdhom.serpro.gov.br/lcr/homserprov2.crl 
     21http://ccdhom.serpro.gov.br/lcr/acserprorfbv1.crl 
  • branches/2.2/security/crl_admin/crl_admin.py

    r1174 r3232  
    22# -*- coding: utf-8 -*- 
    33 
    4 import os, popen2, fcntl, select, time 
     4import os, popen2, fcntl, select, time, sys 
    55from string import replace 
     6 
     7# Lista com as urls das CRLs, e onde colocar(path) os arquivos obtidos .... 
     8CRL_urls = [] 
     9Confs = {} 
     10 
     11#Confs['dirtemp']         # path para a pasta temp para conter arquivos auxiliares.... 
     12#Confs['CAfile']          # Arquivo com cadeia dos certificados das CAs, para verificacao das CRLs. 
     13#Confs['CRLs']            # path para a pasta onde as CRLs sao salvas 
     14#Confs['arquivos_crls']   # path para o arquivo de configuracao contendo urls das crls e paths onde serao baixadas... 
     15#Confs['log']             # Arquivo onde sera grada log de execucao da qtualizacao/verificacao das crls. 
     16                          # Deixe 'log' igual a vazio para ver as msgs de execucao no terminal....... 
     17#Confs['lenMax']          # Tamanho maximo do arquivo de log de atualização das crls antes do rotate..... 
     18#Confs['bkpNum']          # Numero de arquivos de log de atualização das crls mantidos pelo rotate.... 
     19 
     20def ler_arquivo_com_configuracao(): 
     21    # Esta funcao le o arquivo com configuracao geral(linguagen php) para tratar certs. 
     22    import os,sys 
     23    BASE = os.path.realpath(__file__).split(os.sep + 'security')[0] # BASE igual a pasta inicial(raiz) do Expresso 
     24    os.chdir(BASE + '/security/classes') 
     25    # Esta funcao le o arquivo com configuracao geral(linguagen php) para tratar certs. 
     26    conf_file = BASE + '/security/classes/Verifica_Certificado_conf.php' 
     27    e = open(conf_file) 
     28    r = e.read() 
     29    aux1 = r.split('\n') 
     30    # primeiro recupera BASE ... 
     31    for linha in aux1: 
     32        linha = linha.strip() 
     33        if linha[0:16] == "$GLOBALS['BASE']": 
     34            Confs['BASE'] = BASE 
     35            break 
     36    # Agora os demais ... 
     37    for linha in aux1: 
     38        linha = linha.strip() 
     39        if linha[0:10] == "$GLOBALS['": 
     40          if linha[0:16] != "$GLOBALS['BASE']": 
     41            aux2 = linha.split(';') 
     42            if aux2[0] != '': 
     43                aux2a = aux2[0].split("'") 
     44                aux3 = aux2[0].split("=") 
     45                Confs[aux2a[1]] = aux3[1].replace(' ','') 
     46    # Finalmente trata as ocorrencias de BASE ... 
     47    for chave in Confs.keys(): 
     48        if chave != 'BASE': 
     49            aux = Confs[chave].replace("$GLOBALS['BASE'].",Confs['BASE']) 
     50            Confs[chave] = aux.replace("'",'') 
     51    return 
     52 
     53def ler_conf(): 
     54    # Esta funcao le o arquivo passado como parametro e gera a lista CRL_urls. 
     55    # O arquivo he esperado no formato: 
     56    # url ( url = aponta onde buscar a crl,  uma por linha. 
     57    e = open(Confs['arquivos_crls']) 
     58    r = e.read() 
     59    aux1 = r.split('\n') 
     60    for linha in aux1: 
     61        if linha[0:1] != '#': 
     62            if linha.strip() != '': 
     63                # Faz split com ';' para manter compatibilidade com arquivos formato antigo ... 
     64                CRL_urls.append([linha.split(';')[0].strip(),Confs['CRLs']]) 
     65    return 
     66 
    667 
    768theOutput = []  
    869 
    9 def fazlog(dados): 
    10         for i in dados: 
    11                 aux = i.split('\n') 
    12                 for x in aux: 
    13                         logging.info(x) 
     70def fazlog(mL,dados): 
     71    for i in dados: 
     72        aux = i.split('\n') 
     73        for x in aux: 
     74            mL.info(x) 
    1475 
    1576def makeNonBlocking(fd):  
    16      fl = fcntl.fcntl(fd, fcntl.F_GETFL)  
    17      try:  
    18         fcntl.fcntl(fd, fcntl.F_SETFL, fl | os.O_NDELAY)  
    19      except AttributeError:  
    20         fcntl.fcntl(fd, fcntl.F_SETFL, fl | fcntl.FNDELAY)  
     77    fl = fcntl.fcntl(fd, fcntl.F_GETFL) 
     78    try: 
     79        fcntl.fcntl(fd, fcntl.F_SETFL, fl | os.O_NDELAY) 
     80    except AttributeError: 
     81        fcntl.fcntl(fd, fcntl.F_SETFL, fl | fcntl.FNDELAY) 
    2182   
    2283def ExeCmd(command):  
     
    55116# a cadeia de certificados para verificar as crls(CAfile). 
    56117# Apos o import, executar a funcao ler_conf() ..... 
    57 from crl_admin_confg import * 
     118#from crl_admin_confg import * 
     119ler_arquivo_com_configuracao() 
     120try: 
     121    ler_arquivo_com_configuracao() 
     122except: 
     123    print 'Erro lendo arquivos de configuracao(ERR-01X)'; 
     124    sys.exit(1); 
    58125 
     126try: 
     127    # A execucao da funcao a seguir carrega a lista das CRLs (CRL_urls) que devem ser processadas... 
     128    ler_conf() 
     129except: 
     130    print 'Erro lendo arquivos de configuracao(ERR-02X)'; 
     131    sys.exit(1); 
     132 
     133CAfile =  Confs['CAs'] 
     134CRLs = Confs['CRLs'] 
     135arquivo = Confs['arquivos_crls'] 
     136log = Confs['log']      # Deixe log = '' para saida da log na console ..... 
     137lenMax = int(Confs['lenMax']) # Tamanho maximo do arquivo de log para iniciar o rotate.... 
     138bkpNum = int(Confs['bkpNum']) # Número de arquivos de log mantidos pelo rotate.... 
    59139import logging 
     140import logging.handlers 
    60141 
    61 # Configura como sera a log ..... 
    62 logging.basicConfig(level=logging.INFO, 
    63                     format='%(asctime)s %(levelname)s %(message)s', 
    64                     filename=log, 
    65                     filemode='a') 
     142# Prepara para fazer a log das atualizações das crls ... 
     143fm = logging.Formatter('%(asctime)s %(levelname)s %(message)s') 
     144mL = logging.getLogger('ML') 
     145mL.setLevel(logging.DEBUG) 
     146hd = logging.handlers.RotatingFileHandler(log, mode='a', maxBytes=lenMax, backupCount=bkpNum) 
     147hd.setFormatter(fm) 
     148mL.addHandler(hd) 
    66149 
    67 # A execucao da funcao a seguir carrega a lista das CRLs (CRL_urls) que devem ser processadas... 
    68 ler_conf() 
     150if len(sys.argv) > 1: 
     151    if os.path.isfile(sys.argv[1]): 
     152        Confs['arquivos_crls'] = sys.argv[1] 
     153    else: 
     154        mL.critical('Erro lendo arquivo de configuracao' + sys.argv[1] + ': Nao localizado.\n') 
     155        sys.exit(2) 
     156 
     157mL.info('Processando arquivo de urls para obter crls: ' +Confs['arquivos_crls'] + ' .') 
    69158 
    70159for crl in CRL_urls: 
    71         arquivo = crl[1] + os.path.split(crl[0])[1] 
    72         url = crl[0]  
    73  
    74         # Obtendo o arquivo com wget ...  
    75         logging.info('Buscando a CRL: ' + url) 
    76         saida_wget = ExeCmd("wget " + url + " -O " + arquivo) 
    77  
    78         # Abaixo estamos comandando a execucao "openssl crl" passando o arquivo crl . 
    79         # O resultado esta em saida. Tem de ser 'verify OK' . 
    80         if os.path.exists(arquivo) and os.path.getsize(arquivo) > 0: 
    81                 logging.info('Verificando ' + arquivo + '(' + str(os.path.getsize(arquivo)) + ' Bytes)') 
    82                 saida = ExeCmd('openssl crl -CAfile ' + CAfile + '  -in ' + arquivo + ' -inform DER -noout') 
    83                 # usa a funcao fazlog porque saida he um array..... 
    84                 fazlog(saida) 
    85                 try: 
    86                         aux1 = replace(saida[1],'\n','') 
    87                         if not aux1 == 'verify OK': 
    88                                 logging.critical('Erro verificando a CRL ' + arquivo + '\n') 
    89                                 try: 
    90                                         os.remove(arquivo) 
    91                                 except: 
    92                                         pass 
    93                                 continue 
    94                         # A crl foi verificada e est OK....  
    95                         # Atuaiza a data do arquivo... 
    96                         saida = ExeCmd('touch ' + arquivo) 
    97                 except: 
    98                         logging.critical('Erro processando o status da verificacao da CRL ' + arquivo + '\n') 
    99                         try: 
    100                                 os.remove(arquivo) 
    101                         except: 
    102                                 pass 
    103                         continue 
    104         else: 
    105                 # usa a funcao fazlog porque saida_wget he um array..... 
    106                 fazlog(saida_wget)  
    107                 logging.critical('Nao foi possivel obter a CRL ' + url + '\n') 
    108                 try: 
    109                         os.remove(arquivo) 
    110                 except: 
    111                         pass 
    112  
     160    arquivo = crl[1].strip() + os.path.split(crl[0])[1].strip() 
     161    url = crl[0].strip() 
     162    # Obtendo o arquivo com wget ... 
     163    mL.info('Buscando a CRL: ' + url) 
     164    saida_wget = ExeCmd("wget --timeout=10 --tries=1 " + url + " -O " + arquivo) 
     165    # Abaixo estamos comandando a execucao "openssl crl" passando o arquivo crl . 
     166    # O resultado esta em saida. Tem de ser 'verify OK' . 
     167    if os.path.exists(arquivo) and os.path.getsize(arquivo) > 0: 
     168        mL.info('Verificando ' + arquivo + '(' + str(os.path.getsize(arquivo)) + ' Bytes)') 
     169        saida = ExeCmd('openssl crl -CAfile ' + CAfile + '  -in ' + arquivo + ' -inform DER -noout') 
     170        # usa a funcao fazlog porque saida he um array..... 
     171        fazlog(mL,saida) 
     172        try: 
     173            aux1 = replace(saida[1],'\n','') 
     174            if not aux1 == 'verify OK': 
     175                mL.critical('Erro verificando a CRL ' + arquivo + '\n') 
     176                try: 
     177                    os.remove(arquivo) 
     178                except: 
     179                    pass 
     180                continue 
     181            # A crl foi verificada e est OK.... 
     182            # Atuaiza a data do arquivo... 
     183            saida = ExeCmd('touch ' + arquivo) 
     184        except: 
     185            mL.critical('Erro processando o status da verificacao da CRL ' + arquivo + '\n') 
     186            try: 
     187                os.remove(arquivo) 
     188            except: 
     189                pass 
     190            continue 
     191    else: 
     192            # usa a funcao fazlog porque saida_wget he um array..... 
     193            fazlog(mL,saida_wget) 
     194            mL.critical('Nao foi possivel obter a CRL ' + url + '\n') 
     195            try: 
     196                os.remove(arquivo) 
     197            except: 
     198                pass 
  • branches/2.2/security/crl_admin/crl_admin_confg.py

    r1174 r3232  
    33# Lista com as urls das CRLs, e onde colocar(path) os arquivos obtidos .... 
    44CRL_urls = [] 
     5Confs = {} 
    56 
    6 # arquivo : path para o arquivo de configuracao contendo urls das crls e paths onde serao baixadas... 
    7 arquivo = '/var/www/expresso/security/crl_admin/crl_admin.conf' 
    8                     
    9 # Arquivo onde sera grada log de execucao da qtualizacao/verificacao das crls. 
    10 log = '/var/www/expresso/logs/arquivo_crls.log' 
    11  
    12 # Deixe 'log' igual a vazio para ver as msgs de execução no terminal....... 
    13 #log = '' 
    14  
    15 # Arquivo com cadeia dos certificados das CAs, para verificacao das CRLs. 
    16 CAfile = '/var/www/expresso/security/cas/todos.cer' 
     7#Confs['dirtemp']         # path para a pasta temp para conter arquivos auxiliares.... 
     8#Confs['CAfile']          # Arquivo com cadeia dos certificados das CAs, para verificacao das CRLs. 
     9#Confs['CRLs']            # path para a pasta onde as CRLs sao salvas 
     10#Confs['arquivos_crls']   # path para o arquivo de configuracao contendo urls das crls e paths onde serao baixadas... 
     11#Confs['log']             # Arquivo onde sera grada log de execucao da qtualizacao/verificacao das crls. 
     12                          # Deixe 'log' igual a vazio para ver as msgs de execucao no terminal....... 
     13def ler_arquivo_com_configuracao(): 
     14    # Esta funcao le o arquivo com configuracao geral(linguagen php) para tratar certs. 
     15    import os,sys 
     16    BASE = os.path.realpath(__file__).split(os.sep + 'security')[0] # BASE igual a pasta inicial(raiz) do Expresso 
     17    os.chdir(BASE + '/security/classes') 
     18    # Esta funcao le o arquivo com configuracao geral(linguagen php) para tratar certs. 
     19    conf_file = BASE + '/security/classes/Verifica_Certificado_conf.php' 
     20    e = open(conf_file) 
     21    r = e.read() 
     22    aux1 = r.split('\n') 
     23    # primeiro recupera BASE ... 
     24    for linha in aux1: 
     25        linha = linha.strip() 
     26        if linha[0:16] == "$GLOBALS['BASE']": 
     27            Confs['BASE'] = BASE 
     28            break 
     29    # Agora os demais ... 
     30    for linha in aux1: 
     31        linha = linha.strip() 
     32        if linha[0:10] == "$GLOBALS['": 
     33          if linha[0:16] != "$GLOBALS['BASE']": 
     34            aux2 = linha.split(';') 
     35            if aux2[0] != '': 
     36                aux2a = aux2[0].split("'") 
     37                aux3 = aux2[0].split("=") 
     38                Confs[aux2a[1]] = aux3[1].replace(' ','') 
     39    # Finalmente trata as ocorrencias de BASE ... 
     40    for chave in Confs.keys(): 
     41        if chave != 'BASE': 
     42            aux = Confs[chave].replace("$GLOBALS['BASE'].",Confs['BASE']) 
     43            Confs[chave] = aux.replace("'",'') 
     44    return 
    1745 
    1846def ler_conf(): 
    19         # Esta funcao le o arquivo passado como parametro e gera a lista CRL_urls. 
    20         # O arquivo he esperado no formato: 
    21         # url;path       ( url = aponta onde buscar a crl,  e path aponta onde salvar a crl obtida.  
    22         e = open(arquivo) 
    23         r = e.read() 
    24         aux1 = r.split('\n') 
    25         for linha in aux1: 
    26                 if linha[0:1] != '#': 
    27                         aux2 = linha.split(';') 
    28                         if aux2[0] != '': 
    29                                 CRL_urls.append(aux2) 
    30         return 
     47    # Esta funcao le o arquivo passado como parametro e gera a lista CRL_urls. 
     48    # O arquivo he esperado no formato: 
     49    # url ( url = aponta onde buscar a crl,  uma por linha. 
     50    ler_arquivo_com_configuracao() 
     51    e = open(Confs['arquivos_crls']) 
     52    r = e.read() 
     53    aux1 = r.split('\n') 
     54    for linha in aux1: 
     55        if linha[0:1] != '#': 
     56            if linha != '': 
     57                # Faz split com ';' para manter compatibilidade com arquivos formato antigo ... 
     58                CRL_urls.append([linha.split(';')[0],Confs['CRLs']]) 
     59    return 
Note: See TracChangeset for help on using the changeset viewer.