gnutls regression: failure in certificate chain validation
Affects | Status | Importance | Assigned to | Milestone | |
---|---|---|---|---|---|
Landscape Client |
Invalid
|
High
|
Unassigned | ||
Landscape Server |
Invalid
|
High
|
Unassigned | ||
gnutls12 (Ubuntu) |
Invalid
|
High
|
Unassigned | ||
Dapper |
Fix Released
|
Undecided
|
Jamie Strandboge | ||
Gutsy |
Invalid
|
Undecided
|
Unassigned | ||
Hardy |
Invalid
|
Undecided
|
Unassigned | ||
Intrepid |
Invalid
|
Undecided
|
Unassigned | ||
Jaunty |
Invalid
|
High
|
Unassigned | ||
gnutls13 (Ubuntu) |
Invalid
|
High
|
Unassigned | ||
Dapper |
Invalid
|
Undecided
|
Unassigned | ||
Gutsy |
Won't Fix
|
Undecided
|
Jamie Strandboge | ||
Hardy |
Fix Released
|
Undecided
|
Jamie Strandboge | ||
Intrepid |
Invalid
|
Undecided
|
Unassigned | ||
Jaunty |
Invalid
|
High
|
Unassigned | ||
gnutls26 (Debian) |
Fix Released
|
Unknown
|
|||
gnutls26 (Ubuntu) |
Fix Released
|
High
|
Jamie Strandboge | ||
Dapper |
Invalid
|
Undecided
|
Unassigned | ||
Gutsy |
Invalid
|
Undecided
|
Unassigned | ||
Hardy |
Invalid
|
Undecided
|
Unassigned | ||
Intrepid |
Fix Released
|
High
|
Jamie Strandboge | ||
Jaunty |
Fix Released
|
High
|
Jamie Strandboge | ||
openldap (Ubuntu) |
Fix Released
|
High
|
Mathias Gug | ||
Dapper |
Invalid
|
Undecided
|
Unassigned | ||
Gutsy |
Invalid
|
Undecided
|
Unassigned | ||
Hardy |
Fix Released
|
High
|
Mathias Gug | ||
Intrepid |
Fix Released
|
High
|
Mathias Gug | ||
Jaunty |
Fix Released
|
High
|
Mathias Gug |
Bug Description
I noticed recently that landscape-client could no longer contact our staging server. Fortunately, contacting the production server is still ok.
This command is an easy way to reproduce the problem. It is failing against staging.
gnutls-cli -V --x509cafile /etc/ssl/
I tried it in dapper, feisty, gutsy, hardy and intrepid. It only works in feisty, and I'm guessing it's because feisty is EOL'ed and didn't get an update.
I concentrated the rest of my tests in dapper.
With libgnutls12_
With libgnutls12_
Here is the chain as seen by gnutls against staging.
[0]
Subject's DN: O=*.landscape.
Issuer's DN: C=US,ST=
[1]
Subject's DN: C=US,ST=
Issuer's DN: C=US,O=The Go Daddy Group\, Inc.,OU=Go Daddy Class 2 Certification Authority
[2]
Subject's DN: C=US,O=The Go Daddy Group\, Inc.,OU=Go Daddy Class 2 Certification Authority
Issuer's DN: L=ValiCert Validation Network,
[3]
Subject's DN: L=ValiCert Validation Network,
Issuer's DN: L=ValiCert Validation Network,
Notice that the last certificate in the chain is the CA certificate, which is self signed. I wonder if the recent security fix broke that:
- debian/
if it is self-signed in lib/x509/verify.c
Here is openssl's chain against the same site (staging):
Certificate chain
0 s:/O=*.
i:/C=
1 s:/C=US/
i:/C=US/O=The Go Daddy Group, Inc./OU=Go Daddy Class 2 Certification Authority
2 s:/C=US/O=The Go Daddy Group, Inc./OU=Go Daddy Class 2 Certification Authority
i:/L=ValiCert Validation Network/O=ValiCert, Inc./OU=ValiCert Class 2 Policy Validation Authority/CN=http://<email address hidden>
3 s:/L=ValiCert Validation Network/O=ValiCert, Inc./OU=ValiCert Class 2 Policy Validation Authority/CN=http://<email address hidden>
i:/L=ValiCert Validation Network/O=ValiCert, Inc./OU=ValiCert Class 2 Policy Validation Authority/CN=http://<email address hidden>
Openssl's s_client tool works, btw.
TESTCASE for openldap SRU:
1. Generate a V1 root CA. Can be done with an openssl configuration that does not use any x509 extensions. Make sure that the generated root CA is a V1 root CA.
2. Generate a client private key and a V1 certificate signed by the root CA above. Note that the CN of the certificate has to match the fqdn of the test system.
3. Install slapd and ldap-utils on a test system and configure slapd to use TLS:
a. Enable TLS in cn=config backend:
mathiaz@
dn: cn=config
add: olcTLSCACertifi
olcTLSCACertifi
dn: cn=config
add: olcTLSCertifica
olcTLSCertifica
dn: cn=config
add: olcTLSCertifica
olcTLSCertifica
mathiaz@
b. Copy the root CA certificate to /etc/ldap/
c. Append the root CA certificate (/etc/ldap/
d. Enable slaps in /etc/default/slapd.
e. Restart slapd.
4. Make sure that slapd is correctly configured to use TLS:
a. Downgrade libgnutls to the version in the release (not the one in -security, -update or -proposed).
b. Check that ldapsearch works correctly against the ldap server via ldaps:
ldapsearch -D "cn=admin, dc=vmnet" -b "dc=vmnet" -x -w mypwd -H ldaps://t-slapd-i./
The command above should return a dump of the ldap database and not a connection error.
5. Upgrade libgnutls to the latest version available. The command above should return a connection error:
ldap_sasl_
This is the regression.
6. Update slapd, ldap-utils and libldap-2.4-2. The command above should return a dump of the database and not a connection error.
Related branches
Changed in landscape: | |
importance: | Undecided → Critical |
milestone: | none → mountainview-pre-2 |
importance: | Critical → High |
Changed in gnutls26: | |
assignee: | nobody → jdstrand |
status: | New → Triaged |
importance: | Undecided → High |
Changed in gnutls13: | |
assignee: | nobody → jdstrand |
importance: | Undecided → High |
status: | New → Triaged |
Changed in gnutls12: | |
assignee: | nobody → jdstrand |
importance: | Undecided → High |
status: | New → Triaged |
Changed in landscape-client: | |
importance: | Undecided → High |
Changed in gnutls12: | |
status: | Triaged → New |
Changed in gnutls13: | |
status: | Triaged → New |
Changed in gnutls26: | |
status: | Triaged → New |
Changed in gnutls12: | |
assignee: | jdstrand → nobody |
Changed in gnutls13: | |
assignee: | jdstrand → nobody |
Changed in gnutls26: | |
assignee: | jdstrand → nobody |
Changed in gnutls12: | |
status: | New → Invalid |
status: | New → Invalid |
status: | New → Invalid |
status: | New → Invalid |
Changed in gnutls13: | |
status: | New → Invalid |
status: | New → Invalid |
status: | New → Invalid |
Changed in gnutls26: | |
status: | New → Invalid |
status: | New → Invalid |
Changed in gnutls26: | |
status: | New → Invalid |
Changed in gnutls13: | |
assignee: | nobody → jdstrand |
status: | New → Confirmed |
assignee: | nobody → jdstrand |
status: | New → Confirmed |
Changed in gnutls26: | |
assignee: | nobody → jdstrand |
status: | New → Confirmed |
Changed in landscape-client: | |
status: | New → Invalid |
Changed in landscape: | |
status: | New → Invalid |
Changed in openldap: | |
status: | New → Confirmed |
Changed in gnutls12: | |
status: | Triaged → In Progress |
Changed in gnutls13: | |
status: | Triaged → In Progress |
status: | Triaged → In Progress |
Changed in gnutls26: | |
status: | Triaged → In Progress |
importance: | Undecided → High |
Changed in openldap: | |
status: | Triaged → In Progress |
Changed in openldap: | |
assignee: | nobody → mathiaz |
assignee: | nobody → mathiaz |
description: | updated |
Changed in openldap: | |
status: | Triaged → Fix Committed |
Changed in openldap: | |
status: | Triaged → Fix Committed |
Changed in gnutls26 (Debian): | |
status: | Unknown → Fix Released |
It turns out that debian/ patches/ 91_CVE- 2008-4989. diff is missing an "add" chunk. Compare it with the gnutls advisory at article. gmane.org/ gmane.comp. encryption. gpg.gnutls. devel/3215
http://
I rebuilt it locally with that missing chunk added to the patch and then it started to work.