IMPORTANT: Per accedir als fitxer de subversion: http://acacha.org/svn (sense password). Poc a poc s'aniran migrant els enllaços. Encara però funciona el subversion de la farga però no se sap fins quan... (usuari: prova i la paraula de pas 123456)

OpenSSL

De SergiTurWiki
Share/Save/Bookmark
Dreceres ràpides: navegació, cerca
Alert.png Aquesta wiki forma part dels materials d'un curs
Curs: SambasobreLDAP, LinuxAdministracioAvancada, SeguretatXarxesInformàtiques
Fitxers: TecniquesCriptografiques.pdf (TecniquesCriptografiques.odp),AutenticacioiAutoritzacionsLinux.pdf
Repositori SVN: https://anonymous@svn.projectes.lafarga.cat/svn/iceupc/SambaSobreLDAP
Usuari: anonymous
Paraula de pas: sense paraula de pas
Autors: Sergi Tur Badenas
https://www.ssllabs.com

Contingut

Instal·lació

$ sudo apt-get install openssl

Comandes:

$ dpkg -L openssl | grep bin
/usr/bin
/usr/bin/openssl


Fitxers de configuració:

$ dpkg -L openssl | grep etc
/etc
/etc/ssl
/etc/ssl/certs
/etc/ssl/private
/etc/ssl/openssl.cnf

Fitxers de documentació:

$ dpkg -L openssl | grep doc
/usr/share/doc
/usr/share/doc/openssl
/usr/share/doc/openssl/README.gz
/usr/share/doc/openssl/NEWS.gz
/usr/share/doc/openssl/README.optimization
/usr/share/doc/openssl/README.Debian
/usr/share/doc/openssl/CHANGES.SSLeay.gz
/usr/share/doc/openssl/copyright
/usr/share/doc/openssl/changelog.gz
/usr/share/doc/openssl/changelog.Debian.gz

Certificats i criptografia pública

Els certificats estan relacionats amb la criptografia de clau pública per què contenen una clau pública. Per ser útils, els certificats han de tenir una clau privada, parella de la clau pública que conté el certificat.

IMPORTANT: La clau privada és manté en secret, en canvi el certificat (i la clau pública que conté) són públics

Amb OpenSSL les claus públiques s'obtenen fàcilment a partir de les claus privades, per aquesta raó, abans de crear un certificat és necessari crear una clau privada. Les claus privades es poden crear amb RSA o DSA:

openssl genrsa
openssl gendsa

Exemples d'ús

A la pàgina oficial d'openssl podeu trobar a l'apartat docs un HOWTO:

http://www.openssl.org/docs/HOWTO/

Hi han 3 fitxers HOWTO:

  • certificates.txt: Com crear certificats
  • keys.txt: Com crear claus
  • proxy_certificates.txt:

Criptogràfia de clau pública (asimètrica)

Creació d'una clau RSA de 1024 bits amb DES

$ openssl genrsa -des -out key.pem 1024
Generating RSA private key, 1024 bit long modulus
.....................................................++++++
..................++++++
e is 65537 (0x10001)

Us demanarà una paraula de pas per tal d'utilitzar la clau:

Enter pass phrase for key.pem:
Verifying - Enter pass phrase for key.pem:

La clau es guarda en format ASCII:

$ file key.pem
key.txt: ASCII text

al fitxer key.pem:

$ cat key.pem 
-----BEGIN RSA PRIVATE KEY-----
Proc-Type: 4,ENCRYPTED
DEK-Info: DES-CBC,3685A1B034850FF2

U6a/q+UWHDvCwEsTFCmksqSj57AEYnLoTQklaGo6FwpZ9+L/iTfXJa75W6k3GS6r
cLiEyfcPliQdBbdnjVX/ke2l7W93Eka2sEfkfVS+ngHLZJKHclceQLk3j3yQLPpK
QvApSl5Xd3ET0fGBdw40N/BZavZsf8h6OGWk0ebUeVe120yTRE5kbAnqUzdwB2Qh
ojLRa3FQ0q/wRg/fd8QaVhpN7GyErH2fJKQ14hrSWyqis7u6/Cj8FuWBLxYHNmV2
CFsWCvIvX6BVckNS20HqGmFHU8D6llSW30Q2tkUV4OsqxJDzzIbSlpbHyWntDya1
ZG8Zv4pw+/8sPjR0NI+woF4521ykQr1iy8Ftpm0rSnwpj85lnL2ECcpSvQjbCagc
K6h3MAIX7tche1mQXj/TswbUuhytOPfvb9yK7tPyYMAva0/wg44O+Gt81r0RW7Az
aMQxm75uOntx4Mrk/mkzkURjBUWzxOaxYf4Z4ML8du15oha71jXXl2ZvZfGdWnqo
/FILJyI6rv51p305I/lBipWbL0IBJmg31n8m8qr3BhuMStuhTZSq+6HddU6A/eXQ
l0xMWZupKpJNg1vjH7C4LX76MRaveq6n3Le3ieQX8WBsGtHeqlGN5PW2ODBPv0oG
DMew5vBFD1b3BQQOtOW1DGTz6qeLPgAcU/9fHRflEkkLaIk7zK6OPxpvGdSdkZfR
y9wQlCitogSdDYveAKX06iujVCLyUlRDj0D6VirszUTpKQa8+eAFni0nBge5iF2S
m6SPGp9cePCLmBkblifxf8CyU/kuteXz50l95Y7bbp8f1mf2ltpsig==
-----END RSA PRIVATE KEY-----

Aquest fitxer conté tant la clau pública com la privada. Consulteu l'apartat Obtenir la clau pública des d'una clau privada per tal de saber com extreure la clau pública

Recursos:

Obtenir la clau pública des d'una clau privada

$ openssl rsa -in key.pem -out key_public.pem -outform PEM -pubout 

Us demanara la paraula de pas per accedir a la clau privada i crearà el fitxer key_public.pem:

$ cat key_public.pem 
-----BEGIN PUBLIC KEY-----
MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDELfAjyZpi2bvayR8QJm11xeUg
Kq0WigN+Lr5QPRiT6VsKg+5yzMms4D+xrqWHAecdSnhIC+IZ8hDjIv9f8yk0fZrG
7M736eH4974PITbFy8MNozbX+xHb+arFm9RJP8vLBNR4PxNcZNMzwrp+9kt+vaNN
KrNc6OOnDbzme+s3uwIDAQAB
-----END PUBLIC KEY-----

Creació d'una clau DSA de 1024 bits amb DES

$ openssl gendsa -des -out privkey.pem dsaparam.pem

Sense DES

$ openssl dsaparam -out dsaparam.pem 1024

Recursos:

Generar un parell de claus RSA de 1024 bits i el corresponent certificat X.509

$  openssl req -new -x509 -out certificat.pem 
Generating a 1024 bit RSA private key
...................++++++
..++++++
writing new private key to 'privkey.pem'
Enter PEM pass phrase:
Verifying - Enter PEM pass phrase:
-----
You are about to be asked to enter information that will be incorporated
into your certificate request.
What you are about to enter is what is called a Distinguished Name or a DN.
There are quite a few fields but you can leave some blank
For some fields there will be a default value,
If you enter '.', the field will be left blank.
-----
Country Name (2 letter code) [AU]:ES
State or Province Name (full name) [Some-State]:Barcelona
Locality Name (eg, city) []:Barcelona 
Organization Name (eg, company) [Internet Widgits Pty Ltd]:UOC
Organizational Unit Name (eg, section) []:Informatica            
Common Name (eg, YOUR name) []:Sergi Tur Badenas
Email Address []:sergi.tur@upc.edu

Per generar la clau pública:

$ openssl rsa -in privkey.pem -out key.pem -outform PEM -pubout

El resultat són els següents fitxers:

$ ls -l
total 8
-rw-r--r-- 1 sergi sergi 1338 2008-11-30 13:04 certificat.pem
-rw-r--r-- 1 sergi sergi    0 2008-11-30 12:52 key.pem
-rw-r--r-- 1 sergi sergi  963 2008-11-30 13:04 privkey.pem

Altres opcions:

$ sudo openssl req -new -x509 -nodes -out certificat.pem -keyout certificat.pem -days 365

Exemples DES. Criptografia simètrica

Xifrar un fitxer de text amb DES

Creeu un fitxer:

$ joe test.txt

I escriviu un text. Per exemple:

hola!

Ara podeu utilitzar openssl per xifrar el text:

$ openssl des -in test.txt -out testcodificat.txt

Us demanarà una clau.

El resultat és un fitxer binari codificat en format binari:

$ file testcodificat.txt
testcodificat.txt: data

El podeu passar a format text (base64) amb la comanda:

$ openssl base64 -in testcodificat.txt -out testcodificatbase64.txt

Ara el podeu llegir, executant:

$ cat testcodificatbase64.txt
U2FsdGVkX1/DHwVqA1KQJtv3fRu8gnG1oXB47u4Uk40kAyuqGDQtBCl68BmGmelQ
abjnHuJEom0=

Tingueu en compte que cada cop que es xifra amb DES el resultat del xifratge es diferent per que s'utilitza SALT. Si consulteu

$ man enc
 -salt
          use a salt in the key derivation routines. This option should ALWAYS be used unless compatibility with previous versions of OpenSSL or SSLeay
          is required. This option is only present on OpenSSL versions 0.9.5 or above.

A les NOTES posa:

The -salt option should ALWAYS be used if the key is being derived from a password unless you want compatibility with previous versions of OpenSSL
and SSLeay.

Without the -salt option it is possible to perform efficient dictionary attacks on the password and to attack stream cipher encrypted data. The
reason for this is that without the salt the same password always generates the same encryption key. When the salt is being used the first eight
bytes of the encrypted data are reserved for the salt: it is generated at random when encrypting a file and read from the encrypted file when it
is decrypted.

Si tornem a xifrar el mateix text:

$ openssl des -in test.txt -out testcodificat.txt

I aquest cop guardem la versió de text (base64) en un altre fitxer:

$ openssl base64 -in testcodificat.txt -out testcodificat2base64.txt

El resultat és una clau diferent:

$ testcodificat2base64.txt
U2FsdGVkX193v1dfUBz4bEitCksb7GM8HbrxN+oLPBl+jCNcRbaWHXbbBd9NfZuL
ETdDEPHtpg0=

Podeu veure si dos fitxers són diferents amb la comanda diff:

$ diff testcodificatbase64.txt testcodificat2base64.txt 
1,2c1,2
< U2FsdGVkX1/DHwVqA1KQJtv3fRu8gnG1oXB47u4Uk40kAyuqGDQtBCl68BmGmelQ
< abjnHuJEom0=
---
> U2FsdGVkX193v1dfUBz4bEitCksb7GM8HbrxN+oLPBl+jCNcRbaWHXbbBd9NfZuL
> ETdDEPHtpg0=

Vegeu que la primera part

U2FsdGVkX1

és comuna. La resta varia. Això permet fer el xifratge més segur contra atacs de diccionari.

Tots dos es poden desxifrar obtenint el mateix resultat:

$ openssl base64 -d -in testcodificatbase64 | openssl des -d -k paraula_de_pas
hola!
$ openssl base64 -d -in testcodificat2base64 | openssl des -d -k paraula_de_pas
hola!

Si no voleu escriure la paraula de pas a la línia de comandes trèieu l'opció k:

$ openssl base64 -d -in testcodificatbase64 | openssl des -d 

Podeu observar com canvia el SALT i el vector t'inicialització amb l'opció -p:

$ openssl des -in test1.txt -out testenc1.txt -p
...
salt=92D5D56FDB04C6F6
key=F13F4CB0A7226792
iv =42DA75D1B7A8C513
$ openssl des -in test1.txt -out testenc1.txt -p
...
salt=0CA2EEADB7A420B9
key=FAEA0159E4AA61FF
iv =50AA26BA76FE30D8

Amb l'opció -nosalt la clau i el IV no varien:

$ openssl des -in test1.txt -out testenc1.txt -p -nosalt
enter des-cbc encryption password:
Verifying - enter des-cbc encryption password:
key=ABF8412B7C606F8A
iv =CD8B58968E9B4733
$ openssl des -in test1.txt -out testenc1.txt -p -nosalt
enter des-cbc encryption password:
Verifying - enter des-cbc encryption password:
key=ABF8412B7C606F8A
iv =CD8B58968E9B4733

Recursos:

$ man enc

Exemples S/MIME

Signar un missatge de text amb S/MIME

Primer cal tenir un certicat i les corresponents claus:

$  openssl req -new -x509 -out certificat.pem 
Generating a 1024 bit RSA private key
...................++++++
..++++++
writing new private key to 'privkey.pem'
Enter PEM pass phrase:
Verifying - Enter PEM pass phrase:
-----
You are about to be asked to enter information that will be incorporated
into your certificate request.
What you are about to enter is what is called a Distinguished Name or a DN.
There are quite a few fields but you can leave some blank
For some fields there will be a default value,
If you enter '.', the field will be left blank.
-----
Country Name (2 letter code) [AU]:ES
State or Province Name (full name) [Some-State]:Barcelona
Locality Name (eg, city) []:Barcelona 
Organization Name (eg, company) [Internet Widgits Pty Ltd]:Acacha
Organizational Unit Name (eg, section) []:Informatica            
Common Name (eg, YOUR name) []:Sergi Tur Badenas
Email Address []:sergi.tur@upc.edu

El resultat són els següents fitxers:

$ ls -l
total 8
-rw-r--r-- 1 sergi sergi 1338 2008-11-30 13:04 certificat.pem
-rw-r--r-- 1 sergi sergi    0 2008-11-30 12:52 key.pem
-rw-r--r-- 1 sergi sergi  963 2008-11-30 13:04 privkey.pem

Creem un fitxer de text:

 $ joe textProva.txt

Amb qualsevol text:

Hola! Això és una prova.

Creem el missatge S/MIME amb:

$ openssl smime -sign -in textProva.txt -text -out textProva.msg  \ -signer certificat.pem -inkey privkey.pem

El resultat és:

$ cat textProva.msg 

MIME-Version: 1.0

Content-Type: multipart/signed; protocol="application/x-pkcs7-signature"; micalg=sha1; boundary="----310830388D714A0AB32FBDD4DA5ADF1F"


This is an S/MIME signed message



------310830388D714A0AB32FBDD4DA5ADF1F

Content-Type: text/plain



Hola! Això és una prova.


------310830388D714A0AB32FBDD4DA5ADF1F
Content-Type: application/x-pkcs7-signature; name="smime.p7s"

Content-Transfer-Encoding: base64

Content-Disposition: attachment; filename="smime.p7s"

MIIF6gYJKoZIhvcNAQcCoIIF2zCCBdcCAQExCzAJBgUrDgMCGgUAMAsGCSqGSIb3
DQEHAaCCA7IwggOuMIIDF6ADAgECAgkAni0PeOPFNOEwDQYJKoZIhvcNAQEFBQAw
gZcxCzAJBgNVBAYTAkVTMRIwEAYDVQQIEwlCYXJjZWxvbmExEjAQBgNVBAcTCUJh
cmNlbG9uYTEMMAoGA1UEChMDVU9DMRQwEgYDVQQLEwtJbmZvcm1hdGljYTEaMBgG
A1UEAxMRU2VyZ2kgVHVyIEJhZGVuYXMxIDAeBgkqhkiG9w0BCQEWEXNlcmdpLnR1
ckB1cGMuZWR1MB4XDTA4MTEzMDEyMDQ1N1oXDTA4MTIzMDEyMDQ1N1owgZcxCzAJ
BgNVBAYTAkVTMRIwEAYDVQQIEwlCYXJjZWxvbmExEjAQBgNVBAcTCUJhcmNlbG9u
YTEMMAoGA1UEChMDVU9DMRQwEgYDVQQLEwtJbmZvcm1hdGljYTEaMBgGA1UEAxMR
U2VyZ2kgVHVyIEJhZGVuYXMxIDAeBgkqhkiG9w0BCQEWEXNlcmdpLnR1ckB1cGMu
ZWR1MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDHCe3fe4GIR8buwQ2msXZX
de/ag/NTt31/SH+IzKgoMCGEnfqNy87PCtbIpcdSUULOhXySvdoozsU2RYt2LiD9
YcVu5UWJX8uGlAQjnshOUyp8UuVnWgh1iwoUgrwV8xtqRKNBWCZ89Zuk1KjqcHTJ
Vnir/t6l4miZ0UKkp4ze3QIDAQABo4H/MIH8MB0GA1UdDgQWBBR3EmwItCU1CIev
0hXmzdCKz9SHnTCBzAYDVR0jBIHEMIHBgBR3EmwItCU1CIev0hXmzdCKz9SHnaGB
naSBmjCBlzELMAkGA1UEBhMCRVMxEjAQBgNVBAgTCUJhcmNlbG9uYTESMBAGA1UE
BxMJQmFyY2Vsb25hMQwwCgYDVQQKEwNVT0MxFDASBgNVBAsTC0luZm9ybWF0aWNh
MRowGAYDVQQDExFTZXJnaSBUdXIgQmFkZW5hczEgMB4GCSqGSIb3DQEJARYRc2Vy
Z2kudHVyQHVwYy5lZHWCCQCeLQ9448U04TAMBgNVHRMEBTADAQH/MA0GCSqGSIb3
DQEBBQUAA4GBALdJMeLXqUKB/HgXCEZJL2+OzJ33eBC4SIjPQedraefOavi1DQMp
rE6NXPtDi4mudwzocAu1xKRItoQCop7yWOSr5ditVvNOGTxS8w8DfryU1oMOd1z2 
7svdfrPjsYph43+qisnsu6SASJ7cFV8FPZNbunzdULq+zPE3bJZdzeFPMYICADCC
AfwCAQEwgaUwgZcxCzAJBgNVBAYTAkVTMRIwEAYDVQQIEwlCYXJjZWxvbmExEjAQ
BgNVBAcTCUJhcmNlbG9uYTEMMAoGA1UEChMDVU9DMRQwEgYDVQQLEwtJbmZvcm1h
dGljYTEaMBgGA1UEAxMRU2VyZ2kgVHVyIEJhZGVuYXMxIDAeBgkqhkiG9w0BCQEW
EXNlcmdpLnR1ckB1cGMuZWR1AgkAni0PeOPFNOEwCQYFKw4DAhoFAKCBsTAYBgkq
hkiG9w0BCQMxCwYJKoZIhvcNAQcBMBwGCSqGSIb3DQEJBTEPFw0wODExMzAxMjE3
MTlaMCMGCSqGSIb3DQEJBDEWBBT4gybjI3rUxvmF34FY04ZX5M9F3zBSBgkqhkiG
9w0BCQ8xRTBDMAoGCCqGSIb3DQMHMA4GCCqGSIb3DQMCAgIAgDANBggqhkiG9w0D
AgIBQDAHBgUrDgMCBzANBggqhkiG9w0DAgIBKDANBgkqhkiG9w0BAQEFAASBgJ81
EEMpzJhsK8JWs9FD+ty60GzVinLiiNpGm1GNPikE2LqtTHD55cftH8PlSC5Qdv41
694Q3E+8N3zkgSS6L4xR4qr+OJHnDGNeVYd0CKwZIjx4rdwuXmeuIdubhFqFQFRc
HBj7q7rAAJiTX1bK9nWsqmr4ZwCP6NniYiXTyWMF

------310830388D714A0AB32FBDD4DA5ADF1F--

Recursos

Opaque. Text no clar

També es poden signar missatges i que el missatge no viatgi en clar. La opció és -nodetach

$ openssl smime -sign -in textPac4.txt -text -out textPac4Opaque.msg -nodetach -signer certificat.pem -inkey privkey.pem
Enter pass phrase for privkey.pem:

El resultat és

$ cat textPac4Opaque.msg 
MIME-Version: 1.0
Content-Disposition: attachment; filename="smime.p7m"
Content-Type: application/x-pkcs7-mime; smime-type=signed-data; name="smime.p7m"
Content-Transfer-Encoding: base64

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
RAxqDvqMVvU=

El missatge “opac” és verifica de la mateixa forma que un missatge en clar.

Segons el manual de Unix:

$ man smime
...
 -nodetach

  when signing a message use opaque signing: this form is more resistant to 
  translation by mail relays but it cannot be read by mail agents that

  do not support S/MIME.  Without this option cleartext signing with the MIME 
  type multipart/signed is used.


El missatge firmat en clar és compatible amb tot tipus de lectors de correu electrònic encara que no suportin S/MIME (el missatge arribara sempre per què viatja en clar però aquest clients no podran verificar la identitat del signant). La opció de fer el missatge opac fa el missatge més resistent als canvis que se li puguin aplicar durant el seu pas per servidors de correu intermediaris (relays)

Verificar un missatge S/MIME

Per verificar un missatge

$ openssl smime -verify -in textPac4.msg -signer certificat.pem -out signedtext.txt
Verification failure
14137:error:21075075:PKCS7 routines:PKCS7_verify:certificate verify error:pk7_smime.c:245:Verify error:self signed certificate

Aquest error succeix quan el certificat utilitzar és un certificat autosignat. Podem dir-li a openssl que noverifiqui el certificat:

$ openssl smime -verify -in textPac4.msg -signer certificat.pem -out signedtext.txt -noverify
Verification successful

Normalment el certificat va inclòs en el missatge i no cal utilitzar l'opció -signer:

$ openssl smime -verify -in textPac4.msg -out signedtext.txt -noverify
Verification successful

Recursos

Xifrar un missatge signat amb S/MIME

Si ja teniu el missatge signat (suposem que és el fitxer textProva.msg)

$ openssl smime -encrypt -in textProva.msg -out MissatgeSignatiXifrat.msg -from usuari@upc.edu -to unaltreusuari@upc.edu -subject "Missatge sixrat i 
signat" -des3 certificat.pem

Si volem que el missatge utilitzi diferents certificats (per exemple, el volem enviar a múltiples destinataris), podem indicar altres certificats amb l'opció -certfile:

 $ openssl smime -encrypt -in textProva.msg -out MissatgeSignatiXifrat.msg -from usuari@upc.edu -to unaltreusuari@upc.edu -subject "Missatge sixrat i 
signat" -certfile cert2.pem -des3 certificat.pem

Signar i xifrar un missatge signat amb S/MIME

$ openssl smime -sign -in textProva.txt -text -signer certificat.pem -inkey privkey.pem | openssl smime -encrypt -out MissatgeSignatiXifrat.msg -from  
usuari@upc.edu -to usuari2@yahoo.es -subject "Missatge signat i xifrat" -des3 certificat.pem

Certificats

Un certificat SSL no és res més que una clau pública de criptografia asimètrica que té associada metainformació. Per exemple els certificats SSL més comuns són els utilitzats per llocs web per tal d'autenticar el servidor i poder iniciar una comunicació segura amb el protocol https entre el navegador web i el servidor web.

Recursos:

Com verificar un certificat

Certificat en fitxer:

$ openssl verify cert.pem

Per exemple:

$ openssl verify saga.xtec.cat 
saga.xtec.cat: /C=ES/ST=Barcelona/L=Barcelona/O=Departament Educacio/OU=Arquitectura Tecnologica/CN=saga.xtec.cat
error 20 at 0 depth lookup:unable to get local issuer certificate
NOTA: El certificat de saga el podeu obtenir exportant-lo de Firefox. Consulteu el següent apartat

Certificat en servidor remot:

$ openssl s_client -connect www.iescopernic.com:443

Si no teniu cap servidor per fer proves podeu simular un amb:

Per defecte al port 4433:

# the -www option will sent back an HTML-formatted status page
# to any HTTP clients that request a page
$ sudo openssl s_server -cert mycert.pem -www

Si voleu simular un servidor web:

# the -WWW option "emulates a simple web server. Pages will be
# resolved relative to the current directory." This example
# is listening on the https port, rather than the default
# port 4433
$ sudo openssl s_server -accept 443 -cert mycert.pem -WWW
NOTA: mycert.pem és un certificat que heu d'haver creat prèviament. Consulteu apartats anteriors d'aquest mateix article

Exportar certificats de Firefox

Al Firefox:

Edita --> Preferències --> Apartat Avançat --> Pestanya Xifratge --> Botó Visualitza Certificats preferències --> Pestanyes 
Personals/Servidors/CA --> Selecciona el certificat--> Exporta

Com extreure informació d'un certificat

Suposeu que teniu un certificat al fitxer cert.pem:

Podeu obtenir tota la informació amb:

$ openssl x509 -text -in cert.pem

Podeu obtenir informació més concreta amb:

# Qui ha generat el certificat
openssl x509 -noout -in cert.pem -issuer

# Subject
openssl x509 -noout -in cert.pem -subject

# Dates de validesa
openssl x509 -noout -in cert.pem -dates

# totes les anteriors de cop
openssl x509 -noout -in cert.pem -issuer -subject -dates

# Quin és el hash del certificat
openssl x509 -noout -in cert.pem -hash

# Quina és la petjada digital MD5
openssl x509 -noout -in cert.pem -fingerprint

Canvis de format

Passar de format TXT+PEM a només PEM

$ openssl x509 -in irontec.com.txt.pem -out irontec.com.crt.pem

Passar de format DER a PEM

$ openssl x509 -in irontec.com.crt.der -inform DER -out irontec.com.crt.pem

Crear una petició de certificat (CSR) per al catCERT

Primer cal crear la clau posant quelcom similar a:

$ openssl genrsa -out www.elmeudomini.com.key 2048

Per exemple:

$ openssl genrsa -out www.iesebre.com.key 2048
NOTA: El catCERT demana com a mínim 2048 bits de mida de la clau
. Ara ja podeu crear el CSR amb quelcom similar a:
$ openssl req -new -key www.elmeudomini.com.key -out www.elmeudomini.com.csr

Per exemple:

$ openssl genrsa -out www.iesebre.com.key 2048
Generating RSA private key, 2048 bit long modulus
.......+++
......................................................................................+++
e is 65537 (0x10001)
$ openssl req -new -key www.iesebre.com.key -out www.iesebre.com.csr
You are about to be asked to enter information that will be incorporated
into your certificate request.
What you are about to enter is what is called a Distinguished Name or a DN.
There are quite a few fields but you can leave some blank
For some fields there will be a default value,
If you enter '.', the field will be left blank.
-----
Country Name (2 letter code) [AU]: ES
State or Province Name (full name) [Some-State]:Tarragona
Locality Name (eg, city) []:Tortosa
Organization Name (eg, company) [Internet Widgits Pty Ltd]:Institut de l'Ebre
Organizational Unit Name (eg, section) []:Manteniment d'informàtica
Common Name (eg, YOUR name) []:Coordinador d'informàtica 
Email Address []:maninfo@iesebre.com

Please enter the following 'extra' attributes
to be sent with your certificate request
A challenge password []:
An optional company name []:
IMPORTANT: El nom del domini del certificat és important, ja que si el voleu per a un servidor web ha de coincidir el nom del domini del certificat amb el nom de domini del servidor web

Consulteu la web de catcert:

http://catcert.cat

El servei que busqueu és CDS (o CDS-1), és a dir Certificat de Servidor:

http://www.catcert.cat/web/cat/1_0_0_0_cataleg_certificats.jsp#d1

I podeu utilitzar el document:

http://www.catcert.cat/descarrega/certificats/cds.zip

Per fer la petició.

NOTA: Us demanaran demostrar que sou una entitat pública entregant els estatus

Per veure com demanar el certificat.

Crear un certificat amb Easy-RSA

Easy-RSA és part de openVPN

Crear un certificat amb caCERT

NOTA: Vegeu també [1]

Primer cal crear la clau:

$ openssl genrsa -out www.iesebre.com.key 1024

Creeu el fitxer de petició de certificat:

$ openssl req -new -key www.iesebre.com.key -out www.iesebre.com.csr

I seguim l'assistent, per exemple:

Country Name (2 letter code) [AU]:ES
State or Province Name (full name) [Some-State]:Tarragona
Locality Name (eg, city) []:Tortosa
Organization Name (eg, company) [Internet Widgits Pty Ltd]:Institut de l'Ebre
Organizational Unit Name (eg, section) []:Manteniment d'Informàtica
Common Name (eg, YOUR name) []:www.iesebre.com
Email Address []:maninfo@iesebre.com

Please enter the following 'extra' attributes
to be sent with your certificate request
A challenge password []:Paraula_de_pas
An optional company name []:Institut de l'Ebre

El fitxer:

www.iesebre.com.csr

És el fitxer que s'haurà de pujar a la web de caCERT. Primer és necessari que disposeu d'un compte de caCERT.

Creeu-vos un compte a:

https://www.cacert.org/index.php?id=1

Un cop hageu creat el compte accediu a l'apartat Domains i a Add per afegir el vostre domini. Primer fiquem l'adreça del nostre domini:

iesebre.com

I després ens donarà una serie d'adreces de correu on enviarà l'enllaç de verificació per correu.

Un cop hageu creat el compte accediu a l'apartat

“Server Certificates"

I feu clic a New. Copieu el contingut del fitxer *.csr i fem clic en Submit. Si tot ha anat bé lligarà el certificat amb el domini.


Ara ja podeu seguir les passes de:

Apache#Configuraci.C3.B3_de_SSL

Per tal d'afegir el certificat a Apache.

Recursos

Crear una petició de certificat per a una CA

Per crear una petició de certificat:

$ openssl req -new -key privkey.pem -out cert.csr

El fitxer cert.csr és el que es passa a l'entitat certificadora.

Crear un certificat de CA

Els podeu realitzar amb el fitxer (script de Perl):

/usr/lib/ssl/misc/CA.pl 

Podeu trobar un exemple a:

Digests (hashes)

Els digest o hashes es creen amb l'opció dgst:

MD5 i SHA1:

# MD5 digest
$ openssl dgst -md5 filename

# SHA1 digest
openssl dgst -sha1 filename

També es pot obtenir el mateix resultat amb l'ordre md5sum. Exemples concrets

$ openssl dgst -md5 foo-2.23.tar.gz
MD5(foo-2.23.tar.gz)= 81eda7985e99d28acd6d286aa0e13e07
$ md5sum foo-2.23.tar.gz
81eda7985e99d28acd6d286aa0e13e07  foo-2.23.tar.gz

O l'ordre sha1sum. Exemple:

$ openssl dgst -sha1 foo-2.23.tar.gz
SHA1(foo-2.23.tar.gz)= e4eabc78894e2c204d788521812497e021f45c08
$ sha1sum foo-2.23.tar.gz
e4eabc78894e2c204d788521812497e021f45c08  foo-2.23.tar.gz

Signar un digest:

Permet assegurar-se que el digest no serà modificat sense el nostre permis:

# signed digest will be foo-1.23.tar.gz.sha1
openssl dgst -sha1 -sign mykey.pem -out foo-1.23.tar.gz.sha1 foo-1.23.tar.gz

Per verificar un digest signat

# to verify foo-1.23.tar.gz using foo-1.23.tar.gz.sha1 and pubkey.pem
openssl dgst -sha1 -verify pubkey.pem -signature foo-1.23.tar.gz.sha1 foo-1.23.tar.gz

Fixeu-vos que cal tenir el fitxer, el digest signat i la clau pública del signant.

Podeu consultar quins altres digests hi ha disponibles amb:

$ openssl list-message-digest-commands

Digests per Apache

TODO

Apache’s HTTP digest authentication feature requires a special password format. Apache ships with the htdigest utility, but it will only write to a file, not to standard output. When working with remote users, it’s sometimes nice for them to be able to generate a password hash on a machine they trust and then mail it for inclusion in your local password database.

The format of the password database is relatively simple: a colon-separated list of the username, authorization realm (specified by the Apache AuthName directive), and an MD5 digest of those two items and the password. Below is a script that duplicates the output of htdigest, except that the output is written to standard output. It takes advantage of the dgst option’s ability to read from standard input.

#!/bin/bash

echo "Create an Apache-friendly Digest Password Entry"
echo "-----------------------------------------------"

# get user input, disabling tty echoing for password
read -p "Enter username: " UNAME
read -p "Enter Apache AuthName: " AUTHNAME
read -s -p "Enter password: " PWORD; echo

printf "\n%s:%s:%s\n" \
  "$UNAME" \
  "$AUTHNAME" \
  $(printf "${UNAME}:${AUTHNAME}:${PWORD}" | openssl dgst -md5)

Error de SSL i Debian (maig 2008)

Consulteu l'article Error claus Openssl (SSH) a Debian (descoberta maig 2008).

Infraestructura de clau pública

Consulteu Infraestructura_de_clau_pública.PKI, concretament l'apartat Configuració SSL.

SSL a Apache

Consulteu l'apartat Configuració de SSL de l'article Apache.

SSL a Ldap

Consulteu l'article Ldap, concretament l'apartat Creació del certificat.

Recursos

Vegeu també

OpenFPnet
IES Nicolau Copèrnic