@@ -9,42 +9,36 @@ Al no tener un servicio público de verificación, el SAT comparte sus certifica
9
9
Para ello necesitaremos de ` openssl ` . El procedimiento general consiste en:
10
10
11
11
1 . Descargar los certificados raíz de producción
12
- 1 . Convertir los certificados DER en PEM
13
- 1 . Adaptar la carpeta para reconocerla como un directorio de Certificate Authority (CA)
14
- 1 . Comparar el certificado PEM contra los certificados raíz.
12
+ 2 . Convertir los certificados DER en PEM
13
+ 3 . Adaptar la carpeta para reconocerla como un directorio de Certificate Authority (CA)
14
+ 4 . Comparar el certificado PEM contra los certificados raíz.
15
15
16
16
Lo mejor sería que el SAT tuviera un servicio público de consulta de certificados, incluso saber si un
17
17
certificado ha sido revocado, el problema es que sí tienen el servicio, pero está restringido a agencias
18
18
gubernamentales < https://www.gob.mx/cms/uploads/attachment/file/36607/ANEXO-UNICO_Req-de-uso-de-OCSP.pdf >
19
19
20
- ## Verificación de certificado
20
+ ## Verificación local de certificado
21
21
22
22
Con el siguiente comando se hace la verificación de un certificado
23
23
24
24
``` shell
25
- openssl verify -no_check_time -CApath sat_ca_prod - mi_certificado.pem
25
+ openssl verify -no_check_time -CApath sat_ca_prod mi_certificado.pem
26
26
```
27
27
28
28
Donde:
29
29
30
30
- ` -no_check_time ` : No verificar que los certificados raíz sean válidos en el tiempo.
31
31
- ` -CAPath sat_ca_prod ` : Lugar en donde están los certificados raíz ya procesados.
32
- - ` - mi_certificado.pem` : Certificado en formato PEM a validar
32
+ - ` mi_certificado.pem ` : Certificado en formato PEM a validar
33
33
34
34
## Creación de la carpeta de certificados raíz
35
35
36
36
Una vez que tengas los archivos raíz descomprimidos puedes ejecutar estos comandos para que la carpeta sea
37
- usable para el comando ` openssl verify ` .
37
+ usable para el comando ` openssl verify ` o ` openssl ocsp ` .
38
38
39
39
* Exportar en formato PEM los certificados que no están como tal:
40
40
41
- Para cada archivo ` .cer ` en el directorio ` sat_ca_prod ` ejecuta ` openssl ` para exportar de formato PEM a DER.
42
-
43
- ``` shell
44
- find sat_ca_prod/ -type f -maxdepth 0 -name " *.cer" -exec \
45
- openssl x509 -inform DER -outform PEM -in " {}" -out " {}.pem" \
46
- \;
47
- ```
41
+ Para cada archivo ` .cer ` o ` .crt ` en el directorio ` sat_ca_prod ` ejecuta ` openssl ` para exportar de formato DER a PEM.
48
42
49
43
* Crear enlaces simbólicos a los archivos por el número de hash
50
44
@@ -55,36 +49,120 @@ los archivos por número de hash, si no están así entonces no se tomarán en c
55
49
openssl rehash sat_ca_prod
56
50
```
57
51
58
- ## Script para crear toda la estructura de producción y pruebas
52
+ ### Script para crear toda la estructura de producción y pruebas
59
53
60
54
El siguiente script básico de bash ejecuta todos los comandos que se requieren para descargar, exportar y poder
61
55
utilizar como ` CApath ` los certificados raíz ofrecidos por el SAT:
62
56
63
57
``` bash
64
58
#! /bin/bash -e
65
59
66
- CA_PROD_SOURCE=" https ://omawww.sat.gob.mx/tramitesyservicios/Paginas/documentos/Cert_Prod.zip"
60
+ CA_PROD_SOURCE=" http ://omawww.sat.gob.mx/tramitesyservicios/Paginas/documentos/Cert_Prod.zip"
67
61
CA_PROD_DEST=" ca_production"
68
- CA_TEST_SOURCE=" https ://omawww.sat.gob.mx/tramitesyservicios/Paginas/documentos/Certificados_P.zip"
62
+ CA_TEST_SOURCE=" http ://omawww.sat.gob.mx/tramitesyservicios/Paginas/documentos/Certificados_P.zip"
69
63
CA_TEST_DEST=" ca_testing"
70
64
71
- function extract () {
65
+ function extract_certificates () {
72
66
local url=" $1 "
73
67
local source=" $( basename " $url " ) "
68
+ local extractto=" ${source% .* } "
74
69
local ca_folder=" $2 "
75
70
rm -f " $source "
76
71
wget " $url " -O " $source "
77
- rm -rf $ca_folder
78
- mkdir -p " $ca_folder "
79
- unzip " $source " -d " $ca_folder "
80
- find . -type f -name " *.cer" -exec openssl x509 -inform DER -outform PEM -in " {}" -out " {}.pem" \;
81
- find " $ca_folder " -type d -exec openssl rehash " {}" \;
72
+ rm -rf " $ca_folder " " $extractto "
73
+ mkdir -p " $ca_folder " " $extractto "
74
+ unzip " $source " -d " $extractto "
75
+
76
+ find " $extractto " -type f \( -name " *.cer" -o -name " *.crt" \) | while read certificate; do
77
+ rename_or_convert_certificate " $certificate " " $ca_folder "
78
+ done
79
+ rm -rf " $extractto "
80
+
81
+ openssl rehash " $ca_folder "
82
+ }
83
+
84
+ function rename_or_convert_certificate {
85
+ local source=" $1 "
86
+ local sourcebasename=" $( basename " $source " ) "
87
+ local destination=" $2 /${sourcebasename% .* } .pem"
88
+ if [ " text/plain" == " $( file " $source " -b --mime-type) " ]; then
89
+ echo " Copy $source -> $destination "
90
+ cp " $source " " $destination "
91
+ return ;
92
+ fi
93
+ echo " Convert $source -> $destination "
94
+ openssl x509 -inform DER -outform PEM -in " $source " -out " $destination "
82
95
}
83
96
84
- extract " $CA_PROD_SOURCE " " $CA_PROD_DEST "
85
- extract " $CA_TEST_SOURCE " " $CA_TEST_DEST "
97
+ extract_certificates " $CA_PROD_SOURCE " " $CA_PROD_DEST "
98
+ extract_certificates " $CA_TEST_SOURCE " " $CA_TEST_DEST "
99
+ ```
100
+
101
+ ## Verificación a través de OCSP
102
+
103
+ A pesar de que el SAT anuncia que su servicio OCSP es privado, en realidad sí se encuentra públicamente disponible.
104
+
105
+ El siguiente comando sirve para verificar un certificado (FIEL o CSD) emitido por el SAT.
106
+
107
+ ``` shell
108
+ OPENSSL_CONF=/etc/ssl/openssl_custom.cnf \
109
+ openssl ocsp -issuer ca_production/AC4_SAT.cer.pem -cert certificate.cer \
110
+ -text -CApath ca_production -url https://cfdi.sat.gob.mx/edofiel
111
+ ```
112
+
113
+ Y entrega una respuesta como:
114
+
115
+ ``` text
116
+ Response verify OK
117
+ certificate.cer: revoked
118
+ This Update: May 23 14:44:07 2023 GMT
119
+ Next Update: May 23 14:45:07 2023 GMT
120
+ Reason: unspecified
121
+ Revocation Time: May 18 19:02:47 2023 GMT
122
+ ```
123
+
124
+ ### ` OPENSSL_CONF=/etc/ssl/openssl_custom.cnf `
125
+
126
+ El sitio del SAT no tiene la seguridad adecuada y las nuevas versiones de OpenSSL 3.x no permiten hacer la consulta.
127
+
128
+ En 2023-05-23 se encontró que utilizaba ` TLSv1.2, Cipher is DHE-RSA-AES256-GCM-SHA384 ... Server Temp Key: DH, 1024 bits `
129
+ y no es considerado seguro en el nivel 2 de OpenSSL:
130
+ * RSA, DSA and DH keys shorter than 2048 bits and ECC keys shorter than 224 bits are prohibited* .
131
+
132
+ Por lo que hay que degradar la configuración a ` SECLEVEL=1 ` , generalmente agregando la siguiente información:
133
+
134
+ ``` ini
135
+ [openssl_init]
136
+ ssl_conf = ssl_sect
137
+
138
+ [ssl_sect]
139
+ system_default = system_default_sect
140
+
141
+ [system_default_sect]
142
+ CipherString = DEFAULT@SECLEVEL =1
143
+ ```
144
+
145
+ ### ` -issuer ca_production/AC4_SAT.cer.pem `
146
+
147
+ El certificado padre del SAT, si se está usando el certificado incorrecto el comando fallará y
148
+ mostrará un mensaje de error como este:
149
+
150
+ ``` text
151
+ Responder Error: trylater (3)
86
152
```
87
153
154
+ ### ` -cert certificate.cer `
155
+
156
+ El certificado que se desea revisar, no es necesario convertirlo a formato PEM.
157
+
158
+ ### ` -url https://cfdi.sat.gob.mx/edofiel `
159
+
160
+ Dirección del servicio OSCP del SAT.
161
+
162
+ ### ` -CApath ca_production `
163
+
164
+ Dirección donde están los certificados de confianza del SAT.
165
+
88
166
## Verificación de certificados a través de la página del Gobierno de Colima
89
167
90
168
El Gobierno de Colima expone una API JSON en < https://apisnet.col.gob.mx/wsSignGob > que sirve para el propósito
0 commit comments