OpenSSL
De SergiTurWiki
| 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 |
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:
- http://publib.boulder.ibm.com/infocenter/tpfhelp/current/index.jsp?topic=/com.ibm.ztpf-ztpfdf.doc_put.cur/gtps5/s5creat.html
- http://www.devco.net/archives/2006/02/13/public_-_private_key_encryption_using_openssl.php
- http://www.openssl.org/docs/HOWTO/keys.txt
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
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 un certificat amb caCERT
Primer cal crear la clau:
$ openssl genrsa -out www.elmeudomini.com.key 1024
Creeu el fitxer de petició de certificat:
$ openssl req -new -key www.elmeudomini.com.key -out www.elmeudomini.com.csr
El fitxer:
www.elmeudomini.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
“Server Certificates"
I feu clic a “New”. Copieu el contingut del fitxer *.csr.
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.
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
- http://www.openssl.org/
- http://www.bulma.net/body.phtml?nIdNoticia=2280
- http://es.wikipedia.org/wiki/OpenSSL
- http://en.wikipedia.org/wiki/OpenSSL
- http://comesfa.xin.cat/Manual:OpenSSL
