-
Notifications
You must be signed in to change notification settings - Fork 1
/
Copy pathentidad_emisora_certificados.html
250 lines (249 loc) · 13.8 KB
/
entidad_emisora_certificados.html
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
<html>
<head>
<title>Página Personal de Guillem - Entidad Emisora de Certificados Digitales</title>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
</head>
<body bgcolor="#FFFFFF" text="#000000">
<table width="98%" border="0" align="center" bgcolor="#99CCFF">
<tr align="center" valign="middle">
<td width="10%" height="30"><font size="-1"><a href="../../inicio.html">Inicio</a></font></td>
<td width="10%" height="30"><font size="-1"><a href="../../gnulinux/inicio.html">GNU/Linux</a></font></td>
<td width="10%" height="30"><font size="-1"><a href="../../equipos/inicio.html">Equipos</a></font></td>
<td width="10%" height="30"><font size="-1"><a href="../../programas/inicio.html">Programas</a></font></td>
<td width="10%" height="30"><font size="-1"><a href="../../ucontroladores/inicio.html">uControladores</a></font></td>
<td width="10%" height="30"><font size="-1"><a href="../../robotica/inicio.html">Robótica</a></font></td>
<td width="10%" height="30"><font size="-1"><a href="../../enlaces/inicio.html">Enlaces</a></font></td>
<td width="10%" height="30"><font size="-1"><a href="../../sobremi/inicio.html">El
Autor </a></font></td>
</tr>
</table>
<table width="98%" border="0" align="center">
<tr>
<td valign="top">
<p> </p>
<p><font size="+1"><b><u>Entidad Emisora de Certificados Digitales</u></b></font></p>
<p><u><b>Introducción</b></u></p>
<p>El protocolo SSL (Secure Sockets Layer) fue creado por Netscape para
asegurar las comunicaciones entre servidores web y los navegadores. Se
trata de un protocolo estándar, que utiliza cifrado de clave simétrica
y de clave pública con la finalidad de proporcionar una conexión
segura entre un cliente y un servidor. </p>
<p>SSL proporciona tres servicios básicos de seguridad:</p>
<ul>
<li>Privacidad en la comunicación, mediante una combinación
de cifrado mediante clave privada y clave pública. Todo el trñáfico
entre un cliente SSL y un servidor SSL se cifra mediante una clave,
negociando el algoritmo de cifrado en el establecimiento y configuración
de la sesión.
<li>Integridad en la comunicación, para asegurar que la comunicación
no se ve alterada. Para ello se utilizan claves públicas, privadas
y algoritmos hash.
<li>Autentificación mútua entre el cliente y el servidor,
para asegurar que cada uno es quien dice ser. Cliente y servidor se
identifican mediante certificados de clave pública.
</ul>
<p>A continuación se explica como utilizar el protocolo SSL, utilizando
las herramientas proporcionadas por <a href="http://www.openssl.org">OpenSSL</a>.
Se explicará como crear una autoridad cerficadora (CA), como solicitar
certificados a la CA y como obtener información de los certificados.
En ningún momento lo explicado a continuación pretende ser
un manual de como utilizarlo con total garantía. Para ello es necesario
complementarlo con otros documentos en la página web del Proyecto
OpenSSL. </p>
<p><u><b>Configuración de la Entidad Certificadora</b></u></p>
<p>Un entidad emisora de certificados nos permitirá que todos aquellos
clientes que tengan instalado el certificado de la CA, confiarán
automáticamente en los certificados que sean emitidos (firmados)
por la CA. También los certificados que hayan sido invalidados
(revocados) poor la CA dejarán de ser de confianza en los clientes.</p>
<p>Los pasos a seguir para crear una entidad certificadora son:</p>
<p>1.- Creación de la estructura de la estructura de directorios
necesaria, en la ruta donde se desee. En este caso en /etc/sslCA.</p>
<table width="80%" border="0" align="center">
<tr>
<td bgcolor="#CCCCCC">
<p>$ cd /etc/sslCA<br>
$ mkdir certs; mkdir private<br>
$ chmod 700 private<br>
$ echo '01' > serial<br>
$ touch index.txt</p>
</td>
</tr>
</table>
<p>2.- Modificar el <a href="ficheros/openssl/openssl.cnf">archivo de configuración</a>
de openssl según nuestras necesidades.</p>
<p>3.- En el directorio /etc/sslCA/private generamos la clave privada. El
parámetro <i>genrsa</i> indica que deseamos generar una clave privada
RSA, <i>-des3</i> que la clave privada sea cifrada con el algoritmo Triple
DES y que se establezca una contraseña, <i>-out</i> indica el fichero
donde almacenar la clave, y <i><tamaño></i> es el tamaño
de la clave a generar en bits (1024 o 2048 son suficiente en la mayoria
de casos). El fichero generado debe ser de lectura únicamente para
el usuario.</p>
<table width="80%" border="0" align="center">
<tr>
<td bgcolor="#CCCCCC">$ cd /etc/sslCA/private<br>
$ openssl genrsa -des3 -out CA.key <tamaño></td>
</tr>
</table>
<p>4.- Generamos el certificado de la entidad emisora en el directorio /etc/sslCA/certs.
El parámetro <i>req</i> nos permitirá crear (en este caso)
un certificado digital auto firmado, <i>-new</i> crea una nueva petición
de certificado, <i>-key</i> indica el fichero de donde obtener la clave
privada, <i>-x509</i> genera un certificado autofirmado, <i>-days</i>
indica el número de dias de validez del certificado cuando se especifica
la opción <i>-x509</i>, <i>-out</i> fichero de salida de la petición.</p>
<table width="80%" border="0" align="center">
<tr>
<td bgcolor="#CCCCCC">$ openssl req -new -key CA.key -x509 -days 3650
-out ../certs/CA.crt</td>
</tr>
</table>
<p>Los datos que solicitarán son los siguientes:</p>
<ul>
<li>Country Name: 2 letras del pais (ES)
<li>State or Province Name
<li>Locality Name
<li>Organization Name: Ejemplo de Autoridad
<li>Organizational Unit Name: Certificate Authority
<li>Common Name: Ejemplo de Autoridad CA
<li>Email Address: [email protected]
</ul>
<p>En estos momentos tenemos generada la clave privada y el certificado
raiz de la entidad emisora. Después de realizar una copia de seguridad
y poner a salvo la clave privada (en un CD-Rom y utilizarla solamente
cuando se haya de firmar certificados), necesitamos generar la huella
digital de certificado (fingerprint) mediante el siguiente comando:</p>
<table width="80%" border="0" align="center">
<tr>
<td bgcolor="#CCCCCC">$ openssl x509 -fingerprint -md5 -noout -in CA.crt</td>
</tr>
</table>
<p>La opción x509 se utiliza para obtener información del
certificado, -fingerprint genera la huella digital, -md5 genera la huella
en MD5 (se pueden especificar otras opciones como -sha1, -md2, etc...),
-noout evita que se imprima por pantalla el certificado, -in el certificado
del que generar la huella. Hay que tener presente, que Netscape por ejemplo,
valida las huellas en formato MD5, mientras que Internet Explorer las
utiliza con SHA1.</p>
<p><u><b>Crear peticiones para firmar certificados, y firmar certificados
con nuestra Entidad Certificadora</b></u></p>
<p>Se trata como crear claves mediante OpenSSL, generar una petición
de certificado (CSR) y generar un certificado sin alterar los campos de
la CSR. Los certificados creados pueden ser utilizados en servidores de
correo, de web, en clientes de correo electrónico y como método
de validación en otras aplicaciones.</p>
<p>1.- Crear la clave primaria. en este punto se debe decidir si proteger
la clave primaria con una contraseña o no. En el caso de que el
certificado vaya a utilizarse en un servidor Web Apache, si la clave privada
se protege con contraseña, esta se deberà introducir cada
vez que se reinicie el servicio. Se proporcionan los comandos para crear
la clave con contraseña y si ella. Sin contraseña:</p>
<table width="80%" border="0" align="center">
<tr>
<td bgcolor="#CCCCCC">$ openssl genrsa -out /etc/sslCA/private/new.key
<tamaño_clave> </td>
</tr>
</table>
<p>Y con contraseña:</p>
<table width="80%" border="0" align="center">
<tr>
<td bgcolor="#CCCCCC">$ openssl genrsa -des3 -out /etc/sslCA/private/new.key
<tamaño_clave> </td>
</tr>
</table>
<p>2.- Creación de la petición de certificado. En este caso
el usuario que genera la petición debe rellenar los campos anteriores
teniendo presente a que se va a destinar el certificado, por ser necesario
según el campo introducir valores concretos en campos determinados
(bien la dirección URL si se va a destinar a un servidor web, bien
la dirección de correo si se va a utilizar para correo-e en el
campo CN)</p>
<table width="80%" border="0" align="center">
<tr>
<td bgcolor="#CCCCCC">$ openssl req -new -key /etc/sslCA/private/new.key
-out new.csr</td>
</tr>
</table>
<p>El usuario debe hacer llegar la petición CSR, para que pueda ser
firmada después de que nos aseguremos que realmente la petición
que tenemos es válida. La firma se realiza con el siguiente comando,
creando un certificado digital válido para un año:</p>
<table width="80%" border="0" align="center">
<tr>
<td bgcolor="#CCCCCC">$ openssl x509 -req -days 365 -in new.csr -CA
CA.crt -CAkey CA.key -CAcreateserial -out new.crt</td>
</tr>
</table>
<p><u><b>Obtener información de un Certificado</b></u></p>
<p>Se explican las opciones para obtener información diversa de un
certificado digital. La linea de comandos necesaria para la obtención
de información es:</p>
<table width="80%" border="0" align="center">
<tr>
<td bgcolor="#CCCCCC">$ openssl x509 -<opcion> -in certificado.crt
-noout </td>
</tr>
</table>
<p>El parámetro <i>-noout</i> evita que se imprima por pantalla el
certificado. Las Opciones pueden ser:</p>
<ul>
<li>serial: muestra el valor del número de serie
<li>hash: muestra el valor de hash
<li>subject: muestra los valores DN del propietario del certificado
<li>issuer: muestra los valores DN de la Entidad que ha firmado el certificado
<li>email: muestra la dirección de correo electrónico del
propietario del certificado
<li>startdate, enddate, dates: cuando empieza la validez del certificado
y cuando finaliza
<li>purpose: propósitos del certificado
<li>pubkey: imprime la clave pública del certificado
<li>fingerprint: huella digital
<li>alias: alias del certificado
<li>text: imprime todo
</ul>
<p><u><b>Conversion de un Certificado en diferentes formatos</b></u></p>
<p>A partir del par clave privada (.key) y el certificado (.crt), formato
PEM, podemos convertirlo al formato PKCS12, también conocido como
ficheros PFX. Almacena en un formato binario las claves privadas, públicas
y el certificado. La conversión se realiza mediante el comando:</p>
<table width="80%" border="0" align="center">
<tr>
<td bgcolor="#CCCCCC">$ openssl pkcs12 -export -in certs/new.crt -inkey
private/new.key -out new.p12 [-name nombre]</td>
</tr>
</table>
<p>Para convertir de PKCS12 a PEM:</p>
<p>1.- Obtenemos la clave pública del certificado</p>
<table width="80%" border="0" align="center">
<tr>
<td bgcolor="#CCCCCC">$ openssl pkcs12 -export -in new.p12 -clcerts
-nokeys -out certs/out.crt</td>
</tr>
</table>
<p>2.- Obtenemos la clave privada del certificado, utilizando el siguiente
comando para obtener la clave protegida mediante contraseña</p>
<table width="80%" border="0" align="center">
<tr>
<td bgcolor="#CCCCCC">$ openssl pkcs12 -nocerts -in new.p12 -out private/new.key</td>
</tr>
</table>
<p>o utilizando el siguiente comando para obtenerla con contraseña:</p>
<table width="80%" border="0" align="center">
<tr>
<td bgcolor="#CCCCCC">$ openssl pkcs12 -nocerts -in new.p12 -out private/new.key
-nodes </td>
</tr>
</table>
<p> </p>
<p><u><b>Revocar Certificados con la Autoridad Certificadora</b></u></p>
<p>>FIXME></p>
<p> </p>
<p> </p>
<p> </p>
</td>
</tr>
</table>
<p> </p>
</body>
</html>