]> git.ipfire.org Git - thirdparty/squid.git/commitdiff
Bug 4102: sslbump cert contains only a dot character in key usage extension
authorChristos Tsantilas <chtsanti@users.sourceforge.net>
Thu, 30 Oct 2014 15:02:39 +0000 (08:02 -0700)
committerAmos Jeffries <squid3@treenet.co.nz>
Thu, 30 Oct 2014 15:02:39 +0000 (08:02 -0700)
The patch for bug 3966 was slightly incorrect. As a result the Key Usage
field for SSL-bump mimic'ed certificates could end up containing only a
dot (.) character.

src/ssl/gadgets.cc

index 17b6c371982992594b39ffdbfe5c08224d5d8ea2..1c8f2acf211ba9dfcae9f556c84a704697df9d49 100644 (file)
@@ -297,7 +297,21 @@ mimicExtensions(Ssl::X509_Pointer & cert, Ssl::X509_Pointer const & mimicCert)
                 if ((ext = X509_get_ext(cert.get(), p)) != NULL) {
                     ASN1_BIT_STRING *keyusage = (ASN1_BIT_STRING *)X509V3_EXT_d2i(ext);
                     ASN1_BIT_STRING_set_bit(keyusage, KeyEncipherment, 1);
-                    X509_EXTENSION_set_data( ext, (ASN1_OCTET_STRING*)keyusage );
+
+                    //Build the ASN1_OCTET_STRING
+                    const X509V3_EXT_METHOD *method = X509V3_EXT_get(ext);
+                    assert(method && method->it);
+                    unsigned char *ext_der = NULL;
+                    int ext_len = ASN1_item_i2d((ASN1_VALUE *)keyusage,
+                                                &ext_der, 
+                                                (const ASN1_ITEM *)ASN1_ITEM_ptr(method->it));
+
+                    ASN1_OCTET_STRING *ext_oct = M_ASN1_OCTET_STRING_new();
+                    ext_oct->data = ext_der;
+                    ext_oct->length = ext_len;
+                    X509_EXTENSION_set_data(ext, ext_oct);
+
+                    M_ASN1_OCTET_STRING_free(ext_oct);
                     ASN1_BIT_STRING_free(keyusage);
                 }
             }