OpenSSL a digitální podpis emailu

Petr Kostroun

OpenSSL a digitální podpis emailu
« kdy: 19. 08. 2011, 11:52:18 »
Ahoj, snažím se rozběhat digitální podepisování emailů, a nedaří se mi to rozběhnout.
Používám pro to utilitku OpenSSL pro generování certifikátů typu pkcs12.
Potřeboval bych vygenerovat root certifikát, a na základě jeho vygenerovat child certy (root certifikát bych zároveň použil jako certifikát certifikační autority).

Když vygeneruju klíč, a naimportuju si ho do thunderbirdu aby sloužil jako elektronický podpis, thunderbird zobrazí vpravo nahoře obálku z otazníkem, a stěžuje si že certifikát je sice platný, ale není známo, že odesílatel a ten kdo email poslal je ta samá osoba. Certifikát použitý pro podpis neobsahuje emailovou adresu. Mohl by mi pls někdo poradit jak vygenerovat ten certifikát správně?

Díky
« Poslední změna: 19. 08. 2011, 12:29:47 od Petr Krčmář »


Re: OpenSSL a digitální podpis emailu
« Odpověď #1 kdy: 19. 08. 2011, 12:30:25 »
A je v tom Thunderbirdu importovaný ten kořenový certifikát? V opačném případě nemá řetězec důvěry pevný bod a není podle čeho určit, že je ten certifikát v konkrétním mailu platný.

Re: Openssl a digitální podpis emailu
« Odpověď #2 kdy: 19. 08. 2011, 12:40:52 »
Zkus při vytváření certifikátu do řádku Subject vecpat e-mailovou adresu, třeba takto:
Kód: [Vybrat]
openssl ... -subj /emailAddress=example@example.com/CN=Joe Example/C=CZ/ST=Ceska republika ...Pokud tam není pole emailAddress (a OpenSSL ho standardně nevytváří), nemá MUA jak poznat, že certifikát patří dané e-mailové adrese.


Pozn: Nezkoušel jsem to prakticky, jen jsem se podíval, jak vypadají certifikáty, co už mám. Jestli to pomůže, dej vědět.

Petr Kostroun

Re: OpenSSL a digitální podpis emailu
« Odpověď #3 kdy: 19. 08. 2011, 14:28:58 »
Petr : jj, přidal jsem si Root certifikát jako novou naimportovanou autoritu. 

Ondřej : Zkoušel jsem to tam přidat pomocí přepínače, ale chyba zůstala pořád stejná

pořadí kommandu :

1.) Vygenerovat request

C:\data\sslcert>openssl ca -in request.pem -out cert.pem -subj "/emailAddress=petr.kostroun@xxx.cz/CN=Petr Kostroun/OU=EMPLOYEE/O=xxx/ST=Czech Republic/C=CZ" -conf ./openssl.cnf

Vystup :
Using configuration from ./openssl.cnf
Loading 'screen' into random state - done
Check that the request matches the signature
Signature ok
The Subject's Distinguished Name is as follows
commonName            :PRINTABLE:'Petr Kostroun'
organizationalUnitName:PRINTABLE:'EMPLOYEE'
organizationName      :PRINTABLE:'xxx'
stateOrProvinceName   :PRINTABLE:'Czech Republic'
countryName           :PRINTABLE:'CZ'

2.) Podepsat certifikát pomocí mé Cert auth :



openssl ca -in request.pem -out cert.pem -subj "/emailAddress=petr.kostroun@xxx.cz/CN=Petr Kostroun/OU=EMPLOYEE/O=xxx/ST=Czech Republic/C=CZ" -config ./openssl.cnf

Vystup
Using configuration from ./openssl.cnf
Loading 'screen' into random state - done
Check that the request matches the signature
Signature ok
The Subject's Distinguished Name is as follows
commonName            :PRINTABLE:'Petr Kostroun'
organizationalUnitName:PRINTABLE:'EMPLOYEE'
organizationName      :PRINTABLE:'xxx'
stateOrProvinceName   :PRINTABLE:'Czech Republic'
countryName           :PRINTABLE:'CZ'
Certificate is to be certified until Jun 27 12:08:42 2021 GMT (3600 days)
Sign the certificate? [y/n]:y

1 out of 1 certificate requests certified, commit? [y/n]y
Write out database with 1 new entries
Data Base Updated

3.) překonvertovat certifikát do pks12

C:\data\sslcert>openssl pkcs12 -export -in cert.pem -inkey key.pem -certfile ./demoCA/cacert.pem -name "Petr Kostroun" -out name-cert.p12 -config ./openssl.cnf


Chyba viz. : (https://picasaweb.google.com/100460485628434863657/Printscreens)

alfi

  • ****
  • 324
    • Zobrazit profil
    • E-mail
Re: OpenSSL a digitální podpis emailu
« Odpověď #4 kdy: 19. 08. 2011, 16:38:23 »
emailová adresa podle mě patří do common name. stejně, jako u https tam patří jméno serveru. příp. alespoň do Subject Alternative Name jako email:aaa@email.cz, https tam pak má DNS:www.xxx.cz

doporučuju taky přidat
X509v3 CRL Distribution Points
X509v3 Basic Constraints: CA:FALSE
pro klienty, TRUE pak jen pro CA
X509v3 Extended Key Usage: critical  TLS Web Server Authentication
nebo critical TLS Web Client Authentication, E-mail Protection


Re: OpenSSL a digitální podpis emailu
« Odpověď #5 kdy: 20. 08. 2011, 11:51:49 »
alfi: Taky jsem si to myslel, ale když jsem prozkoumal certifikáty, co jsem porůznu dostal. povětšinou tam CN buď vůbec není (třeba od StartSSL), nebo tam je ve tvaru „Jmeno Prijmeni“

PK: Thunderbird zřejmě potřebuje X509v3 rozšíření, můj certifikát od StartSSL tam má toto:
Kód: [Vybrat]
Certificate:
    Data:
        Version: 3 (0x2)
        Serial Number: 176641 (0x2b201)
        Signature Algorithm: sha1WithRSAEncryption
        Issuer: C=IL, O=StartCom Ltd., OU=Secure Digital Certificate Signing, CN=StartCom Class 1 Primary Intermediate Client CA
        Validity
            Not Before: Jul  3 14:34:36 2011 GMT
            Not After : Jul  4 18:20:09 2012 GMT
        Subject: description=456040-rNsScZR5tC2aNS95/emailAddress=ondrej.caletka@xxx.xx
        Subject Public Key Info:
            Public Key Algorithm: rsaEncryption
                Public-Key: (2048 bit)
                Modulus:
                    00:a9:74:0a:6b:51:a8:cf:51:6e:8f:d0:3f:5b:27:
                    be:14:51:dd:41:81:cc:29:cd:0c:35:d4:4d:ee:f4:
                    b1:ce:1b:73:45:3b:f6:0c:ba:f7:c4:98:f5:86:f8:
                    9d:5a:9d:35:bb:03:9d:d7:5c:1b:f1:b0:0b:4b:0a:
                    b4:df:ed:9a:58:ff:6c:18:dc:72:c4:cf:34:53:f1:
                    50:34:f2:fe:96:26:ce:84:1b:cc:55:ab:a9:25:57:
                    2c:df:25:53:4b:30:5b:ef:40:3b:e9:22:d9:aa:21:
                    a0:32:b8:d3:24:70:b0:89:ff:d6:08:be:f6:c5:66:
                    e8:7e:3f:0e:52:bd:a0:5f:34:a0:b9:da:c8:4b:20:
                    de:9b:21:49:12:be:11:5d:69:6a:01:c5:ba:cd:1d:
                    a3:0c:20:98:16:6e:ac:67:9f:91:06:39:4e:96:e0:
                    2a:b6:0c:46:3b:41:e4:89:f4:48:70:16:8c:6e:f8:
                    da:e5:ae:4e:46:81:c8:f9:7e:7d:91:dd:9c:1b:79:
                    da:3e:dc:77:48:df:2e:6d:4a:f9:5c:81:42:8c:b3:
                    ed:56:61:34:4c:26:f5:b8:8d:a6:6d:5f:f6:e3:da:
                    ca:02:5d:8b:f5:a3:c3:be:e4:46:80:b3:8b:8f:30:
                    34:cf:e8:56:0e:4e:70:89:4e:27:ce:9f:60:57:26:
                    63:e5
                Exponent: 65537 (0x10001)
        X509v3 extensions:
            X509v3 Basic Constraints:
                CA:FALSE
            X509v3 Key Usage:
                Digital Signature, Key Encipherment, Data Encipherment
            X509v3 Extended Key Usage:
                TLS Web Client Authentication, E-mail Protection
            X509v3 Subject Key Identifier:
                4C:22:C3:C0:68:5F:BE:28:16:A3:F2:65:BA:1D:9C:05:D5:87:63:46
            X509v3 Authority Key Identifier:
                keyid:53:72:ED:92:9C:E0:DA:CB:01:5C:7C:7E:96:35:4E:F2:D4:B8:51:82

            X509v3 Subject Alternative Name:
                email:ondrej.caletka@xxx.xx
            X509v3 Certificate Policies:
                Policy: 1.3.6.1.4.1.23223.1.2.2
                  CPS: http://www.startssl.com/policy.pdf
                  CPS: http://www.startssl.com/intermediate.pdf
                  User Notice:
                    Organization: StartCom Certification Authority
                    Number: 1
                    Explicit Text: This certificate was issued according to the Class 1 Validation requirements of the StartCom CA policy, reliance only for the intended purpose in compliance of the relying party obligations.
                  User Notice:
                    Organization: StartCom Certification Authority
                    Number: 2
                    Explicit Text: Liability and warranties are limited! See section "Legal and Limitations" of the StartCom CA policy.

            X509v3 CRL Distribution Points:

                Full Name:
                  URI:http://crl.startssl.com/crtu1-crl.crl

            Authority Information Access:
                OCSP - URI:http://ocsp.startssl.com/sub/class1/client/ca
                CA Issuers - URI:http://aia.startssl.com/certs/sub.class1.client.ca.crt

            X509v3 Issuer Alternative Name:
                URI:http://www.startssl.com/

Petr Kostroun

Re: OpenSSL a digitální podpis emailu
« Odpověď #6 kdy: 22. 08. 2011, 13:16:35 »
Pokusil jsem se zeditovat openssl.conf, ale bohužel bez výsledku :
Kód: [Vybrat]
dir = .
 
[ ca ]
default_ca = CA_default
 
[ CA_default ]
dir           = ./demoCA               # Kořenový adresář CA
certs         = $dir/certs             # Kam se ukládají vydané
                                       # (podepsané) certifikáty
crl_dir       = $dir/crl               # Kam se ukládají CRL
database      = $dir/index.txt         # Index databáze
new_certs_dir = $dir/newcerts          # Kam se ukládají nové
                                       # certifikáty
certificate   = $dir/cacert.pem        # Certifikát CA
serial        = $dir/serial            # Soubor se sériovám číslem
                                       # (pro počítání vydaných
                       # certifikátů)
crl           = $dir/crl.pem           # Aktuální CRL
private_key   = $dir/private/cakey.pem # Soukromý klíč CA
RANDFILE      = $dir/private/.rand     # Soubor pro generování
                                       # náhodných čísel
default_days = 3600
policy = policy_anything
default_md = md5
preserve = no
email_in_dn = no
nameopt = default_ca
certopt = default_ca
policy = policy_match
extendedKeyUsage        = clientAuth,emailProtection

emailAddress_default = petr.kostroun@xxx.cz
subjectAltName=email:copy,email:petr.kostroun@xxx.cz

[ policy_match ]
countryName = optional
stateOrProvinceName = optional
organizationName = optional
organizationalUnitName = optional
commonName = supplied
emailAddress = optional
 
[ req ]
default_bits = 1024 # Size of keys
default_keyfile = key.pem # name of generated keys
default_md = md5 # message digest algorithm
string_mask = nombstr # permitted characters
distinguished_name = req_distinguished_name
req_extensions = v3_req
 
[ req_distinguished_name ]
# Variable name Prompt string
#-------------------------   ----------------------------------
0.organizationName = Organization Name (company)
organizationalUnitName = Organizational Unit Name (department, division)
emailAddress = Email Address
emailAddress_max = 40
localityName = Locality Name (city, district)
stateOrProvinceName = State or Province Name (full name)
countryName = Country Name (2 letter code)
countryName_min = 2
countryName_max = 2
commonName = Common Name (hostname, IP, or your name)
commonName_max = 64
 
# Default values for the above, for consistency and less typing.
# Variable name Value
#------------------------   ------------------------------
0.organizationName_default = My Company
localityName_default = My Town
stateOrProvinceName_default = State or Providence
countryName_default = US
 
[ v3_ca ]
basicConstraints = CA:TRUE
subjectKeyIdentifier = hash
authorityKeyIdentifier = keyid:always,issuer:always
 
[ v3_req ]
basicConstraints = CA:FALSE
subjectKeyIdentifier = hash
keyUsage=digitalSignature

[dir_sect]
C=CZ
O=Dantem
OU=Employee
CN=Petr Kostroun
emailAddress=petr.kostroun@xxx.cz



v certifikátu který jsem vygeneroval :
Kód: [Vybrat]

Certificate:
    Data:
        Version: 1 (0x0)
        Serial Number: 1 (0x1)
        Signature Algorithm: md5WithRSAEncryption
        Issuer: C=CZ, ST=Czech Republic, L=Prague, O=Dantem, OU=Employee, CN=Dantem CA auth/emailAddress=petr.kostroun@dantem.cz
        Validity
            Not Before: Aug 22 10:58:46 2011 GMT
            Not After : Jun 30 10:58:46 2021 GMT
        Subject: C=CZ, ST=Czech Republic, O=Dantem, OU=Employee, CN=petr.kostroun@dantem.cz
        Subject Public Key Info:
            Public Key Algorithm: rsaEncryption
            RSA Public Key: (1024 bit)
                Modulus (1024 bit):
                    00:bc:59:43:61:20:37:bf:3a:9d:bb:3f:cb:06:ec:
                    1c:3d:5a:dd:d2:71:93:9e:86:91:9d:d5:03:d9:48:
                    5e:c9:a3:d3:31:93:aa:99:b9:36:53:82:73:b9:80:
                    ae:3d:c2:f8:6e:b8:9d:7b:36:cc:12:1b:46:b4:8a:
                    c9:58:e6:31:e6:b7:4d:c8:43:e4:0d:44:5f:d0:91:
                    de:7a:7a:4a:63:da:14:3d:56:ae:4f:a2:e8:61:74:
                    cb:01:60:b8:7c:8a:a8:33:4e:19:c5:3c:3c:fe:8b:
                    e1:41:59:8b:19:d3:bf:91:9b:66:f1:50:1c:48:3c:
                    bf:ad:b9:fe:43:27:e4:b3:23
                Exponent: 65537 (0x10001)
    Signature Algorithm: md5WithRSAEncryption
        18:5e:38:31:65:ab:69:10:56:a5:b0:ce:6a:12:09:a3:01:79:
        f9:e0:93:84:69:dd:45:1a:e0:54:cc:cd:66:fd:b4:28:78:99:
        81:b3:bd:ad:40:f8:84:ff:36:0f:2b:95:51:79:70:98:c1:b7:
        f6:8e:8b:b8:bf:78:75:fa:fe:ea:f2:0a:6d:ae:39:93:03:97:
        3c:b2:70:aa:54:c4:43:91:8c:6a:90:a2:c2:3c:c0:f5:ee:65:
        b9:29:e9:fd:21:ff:a4:41:6d:3f:be:e1:76:af:6d:97:df:25:
        a6:35:20:64:24:79:6b:3d:2d:09:61:82:b4:dc:65:90:e4:6a:
        f9:22
-----BEGIN CERTIFICATE-----
MIICeDCCAeECAQEwDQYJKoZIhvcNAQEEBQAwgZwxCzAJBgNVBAYTAkNaMRcwFQYD
VQQIDA5DemVjaCBSZXB1YmxpYzEPMA0GA1UEBwwGUHJhZ3VlMQ8wDQYDVQQKDAZE
YW50ZW0xETAPBgNVBAsMCEVtcGxveWVlMRcwFQYDVQQDDA5EYW50ZW0gQ0EgYXV0
aDEmMCQGCSqGSIb3DQEJARYXcGV0ci5rb3N0cm91bkBkYW50ZW0uY3owHhcNMTEw
ODIyMTA1ODQ2WhcNMjEwNjMwMTA1ODQ2WjBsMQswCQYDVQQGEwJDWjEXMBUGA1UE
CBMOQ3plY2ggUmVwdWJsaWMxDzANBgNVBAoTBkRhbnRlbTERMA8GA1UECxMIRW1w
bG95ZWUxIDAeBgNVBAMUF3BldHIua29zdHJvdW5AZGFudGVtLmN6MIGfMA0GCSqG
SIb3DQEBAQUAA4GNADCBiQKBgQC8WUNhIDe/Op27P8sG7Bw9Wt3ScZOehpGd1QPZ
SF7Jo9Mxk6qZuTZTgnO5gK49wvhuuJ17NswSG0a0islY5jHmt03IQ+QNRF/Qkd56
ekpj2hQ9Vq5PouhhdMsBYLh8iqgzThnFPDz+i+FBWYsZ07+Rm2bxUBxIPL+tuf5D
J+SzIwIDAQABMA0GCSqGSIb3DQEBBAUAA4GBABheODFlq2kQVqWwzmoSCaMBefng
k4Rp3UUa4FTMzWb9tCh4mYGzva1A+IT/Ng8rlVF5cJjBt/aOi7i/eHX6/uryCm2u
OZMDlzyycKpUxEORjGqQosI8wPXuZbkp6f0h/6RBbT++4XavbZffJaY1IGQkeWs9
LQlhgrTcZZDkavki
-----END CERTIFICATE-----


v subjektu email chybí. Nejspíš asi chyba bude v mém konfiguráku. Poradil by mi někdo pls co s tím?


Petr Kostroun

Re: OpenSSL a digitální podpis emailu
« Odpověď #7 kdy: 22. 08. 2011, 14:42:41 »
Tak už mám řešení. Skutečně je chyba v tom konfiguráku, a na řádku email_in_dn = no musí být místo no yes.