Re: Multiple DNS Names in Subject Alt Name?
Stephen Hurd <[email protected]> Mon, 26 Feb 2018 12:44:44 -0500
| Newsgroups | gmane.comp.encryption.cryptlib |
|---|---|
| Message-ID | <[email protected]> |
This is a multi-part message in MIME format. --===============2948102618846519197== Content-Type: multipart/alternative; boundary="------------C1402DA8DE29C77FF76F4AB0" Content-Language: en-US This is a multi-part message in MIME format. --------------C1402DA8DE29C77FF76F4AB0 Content-Type: text/plain; charset=utf-8; format=flowed Content-Transfer-Encoding: quoted-printable X-MIME-Autoconverted: from 8bit to quoted-printable by mail145c7.megamailservers.com id w1QHih9l032052 On 02/26/18 08:29, Peter Gutmann wrote: > Stephen Hurd <[email protected]> writes: > >> I've disabled the check in addAttribute() (in ext_add.c) which disall= ows >> adding blobs, and I'm just constructing the DER encoding myself and th= en >> adding it using cryptAddCertExtension(). This works, but it would be = nice to >> have a correct way to do this. > That's probably the best way to do it for the time being. The only other issues I had were getting the public key (e and n) out=20 for the JWS signing stuff (I export a self-signed cert, then parse the=20 DER encoding), and their certificate chain format... it's actually a=20 series of certificates.=C2=A0 I didn't see a way of constructing a=20 certificate chain from discrete certificates, so I decode the base64 and=20 slap a PKCS#7 wrapper around them before calling cryptCertImport().=C2=A0= It=20 would be nice if cryptImportCert() could handle it natively. Regarding the certificate chain, the specification=20 (https://tools.ietf.org/html/draft-ietf-acme-acme-09#page-58) says this: File contains one or more certificates encoded with the PEM textual encoding, according toRFC 7468 <https://tools.ietf.org/html/rfc7468> = [RFC7468 <https://tools.ietf.org/html/rfc7468>]. In order to provide ea= sy interoperation with TLS, the first certificate MUST be an end-entity certificate. Each following certificate SHOULD directly certify one preceding it. Because certificate validation requires that trust anchors be distributed independently, a certificate that specifies a trust anchor MAY be omitted from the chain, provided that supported peers are known to possess any omitted certificates. And an example looks like this: -----BEGIN CERTIFICATE----- MIIFGDCCBACgAwIBAgITAPr0FKjY8OC5Kkeg885AbIfcOzANBgkqhkiG9w0BAQsF ADAiMSAwHgYDVQQDDBdGYWtlIExFIEludGVybWVkaWF0ZSBYMTAeFw0xODAyMjYw NDUwMDlaFw0xODA1MjcwNDUwMDlaMBoxGDAWBgNVBAMTD25peC5zeW5jaHJvLm5l dDCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAKw1988Kelpll9uytP9M mGB0DKJL8uSbsuT8Jx/UrcAqOUKpEmok11bp/QCF48Ff/Ou6GjQw5qcqQI/PyOad B7J4Ep++seINF2NN8S4FticTjeA0382LBVzLe1SiME8D7kEmPKzNtGc0PXaWxWpX fQQiLATLogWF0bcOrNvn79av++fn3m5folwy6Uud+7Z6XSw7VxtuoBqyaGOcoB5V tOka3tex/F4UjLSGm9LGMPo19gvY7xOiTvzh9zG16DiY1g0brkO5Z+9ovAIyB6l9 1KkvkAby7MH/O7SbeqNSuCzkiwIXW75jARVYw9PCrD+AtX2guWsmllg3GAcAngKd o4kCAwEAAaOCAk0wggJJMA4GA1UdDwEB/wQEAwIFoDAdBgNVHSUEFjAUBggrBgEF BQcDAQYIKwYBBQUHAwIwDAYDVR0TAQH/BAIwADAdBgNVHQ4EFgQU0pzHY4VHT3MF r91xP0/jB+3DD88wHwYDVR0jBBgwFoAUwMwDRrlYIMxccnDz4S7LIKb1aDowdwYI KwYBBQUHAQEEazBpMDIGCCsGAQUFBzABhiZodHRwOi8vb2NzcC5zdGctaW50LXgx LmxldHNlbmNyeXB0Lm9yZzAzBggrBgEFBQcwAoYnaHR0cDovL2NlcnQuc3RnLWlu dC14MS5sZXRzZW5jcnlwdC5vcmcvMFAGA1UdEQRJMEeCEmdhbGxlcnkuYmJzZGV2 Lm5ldIIPaG9tZS5iYnNkZXYubmV0gg9uaXguc3luY2hyby5uZXSCD3BpY3MuYmJz ZGV2Lm5ldDCB/gYDVR0gBIH2MIHzMAgGBmeBDAECATCB5gYLKwYBBAGC3xMBAQEw gdYwJgYIKwYBBQUHAgEWGmh0dHA6Ly9jcHMubGV0c2VuY3J5cHQub3JnMIGrBggr BgEFBQcCAjCBngyBm1RoaXMgQ2VydGlmaWNhdGUgbWF5IG9ubHkgYmUgcmVsaWVk IHVwb24gYnkgUmVseWluZyBQYXJ0aWVzIGFuZCBvbmx5IGluIGFjY29yZGFuY2Ug d2l0aCB0aGUgQ2VydGlmaWNhdGUgUG9saWN5IGZvdW5kIGF0IGh0dHBzOi8vbGV0 c2VuY3J5cHQub3JnL3JlcG9zaXRvcnkvMA0GCSqGSIb3DQEBCwUAA4IBAQDr1rOa zGglZTo9nRigvKkPdNle16zCrD99VDSEmV1PMWgmb6VOxlJSblBQV+F9LkajeNOa 0MJ7gdyfoOnED0ygg7aSb9D9KxJtZ8bPzhuXzXqc9DS3Mgu6vzdLjXXXVfp5XFRn 26NeTVrPJ/+NSMi+tEKr7nov+P8xAjCI1B5VmwpVubMtOt/9ePUk/b+nXAYHt4lr UEWH38Fp/fk+YO4sOcdG1It+YZ6to+8hESGUWdr/cBUYdOHrLrkrAE3+V8QOZa6I RPSQABlI7GHxbC/r17KXnLZatQToWcGTzsr/fvbJuTtioTuIBx4BF158kJvNndZE l8BxqQh5psteqkoJ -----END CERTIFICATE----- -----BEGIN CERTIFICATE----- MIIEqzCCApOgAwIBAgIRAIvhKg5ZRO08VGQx8JdhT+UwDQYJKoZIhvcNAQELBQAw GjEYMBYGA1UEAwwPRmFrZSBMRSBSb290IFgxMB4XDTE2MDUyMzIyMDc1OVoXDTM2 MDUyMzIyMDc1OVowIjEgMB4GA1UEAwwXRmFrZSBMRSBJbnRlcm1lZGlhdGUgWDEw ggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQDtWKySDn7rWZc5ggjz3ZB0 8jO4xti3uzINfD5sQ7Lj7hzetUT+wQob+iXSZkhnvx+IvdbXF5/yt8aWPpUKnPym oLxsYiI5gQBLxNDzIec0OIaflWqAr29m7J8+NNtApEN8nZFnf3bhehZW7AxmS1m0 ZnSsdHw0Fw+bgixPg2MQ9k9oefFeqa+7Kqdlz5bbrUYV2volxhDFtnI4Mh8BiWCN xDH1Hizq+GKCcHsinDZWurCqder/afJBnQs+SBSL6MVApHt+d35zjBD92fO2Je56 dhMfzCgOKXeJ340WhW3TjD1zqLZXeaCyUNRnfOmWZV8nEhtHOFbUCU7r/KkjMZO9 AgMBAAGjgeMwgeAwDgYDVR0PAQH/BAQDAgGGMBIGA1UdEwEB/wQIMAYBAf8CAQAw HQYDVR0OBBYEFMDMA0a5WCDMXHJw8+EuyyCm9Wg6MHoGCCsGAQUFBwEBBG4wbDA0 BggrBgEFBQcwAYYoaHR0cDovL29jc3Auc3RnLXJvb3QteDEubGV0c2VuY3J5cHQu b3JnLzA0BggrBgEFBQcwAoYoaHR0cDovL2NlcnQuc3RnLXJvb3QteDEubGV0c2Vu Y3J5cHQub3JnLzAfBgNVHSMEGDAWgBTBJnSkikSg5vogKNhcI5pFiBh54DANBgkq hkiG9w0BAQsFAAOCAgEABYSu4Il+fI0MYU42OTmEj+1HqQ5DvyAeyCA6sGuZdwjF UGeVOv3NnLyfofuUOjEbY5irFCDtnv+0ckukUZN9lz4Q2YjWGUpW4TTu3ieTsaC9 AFvCSgNHJyWSVtWvB5XDxsqawl1KzHzzwr132bF2rtGtazSqVqK9E07sGHMCf+zp DQVDVVGtqZPHwX3KqUtefE621b8RI6VCl4oD30Olf8pjuzG4JKBFRFclzLRjo/h7 IkkfjZ8wDa7faOjVXx6n+eUQ29cIMCzr8/rNWHS9pYGGQKJiY2xmVC9h12H99Xyf zWE9vb5zKP3MVG6neX1hSdo7PEAb9fqRhHkqVsqUvJlIRmvXvVKTwNCP3eCjRCCI PTAvjV+4ni786iXwwFYNz8l3PmPLCyQXWGohnJ8iBm+5nk7O2ynaPVW0U2W+pt2w SVuvdDM5zGv2f9ltNWUiYZHJ1mmO97jSY/6YfdOUH66iRtQtDkHBRdkNBsMbD+Em 2TgBldtHNSJBfB3pm9FblgOcJ0FSWcUDWJ7vO0+NTXlgrRofRT6pVywzxVo6dND0 WzYlTWeUVsO40xJqhgUQRER9YLOLxJ0O6C8i0xFxAMKOtSdodMB3RIwt7RFQ0uyt n5Z5MqkYhlMI3J1tPRTp1nEt9fyGspBOO05gi148Qasp+3N+svqKomoQglNoAxU=3D -----END CERTIFICATE----- --------------C1402DA8DE29C77FF76F4AB0 Content-Type: text/html; charset=utf-8 Content-Transfer-Encoding: quoted-printable X-MIME-Autoconverted: from 8bit to quoted-printable by mail145c7.megamailservers.com id w1QHih9l032052 <html> <head> <meta http-equiv=3D"Content-Type" content=3D"text/html; charset=3Dutf= -8"> </head> <body text=3D"#000000" bgcolor=3D"#FFFFFF"> <div class=3D"moz-cite-prefix">On 02/26/18 08:29, Peter Gutmann wrote= :<br> </div> <blockquote type=3D"cite" cite=3D"mid:[email protected]"> <pre wrap=3D"">Stephen Hurd <a class=3D"moz-txt-link-rfc2396E" href= =3D"mailto:[email protected]"><[email protected]></a> writes: </pre> <blockquote type=3D"cite"> <pre wrap=3D"">I've disabled the check in addAttribute() (in ext_= add.c) which disallows adding blobs, and I'm just constructing the DER encoding myself and then adding it using cryptAddCertExtension(). This works, but it would be nic= e to have a correct way to do this. </pre> </blockquote> <pre wrap=3D""> That's probably the best way to do it for the time being.</pre> </blockquote> <br> The only other issues I had were getting the public key (e and n) out for the JWS signing stuff (I export a self-signed cert, then parse the DER encoding), and their certificate chain format... it's actually a series of certificates.=C2=A0 I didn't see a way of constructing a certificate chain from discrete certificates, so I decode the base64 and slap a PKCS#7 wrapper around them before calling cryptCertImport().=C2=A0 It would be nice if cryptImportCert(= ) could handle it natively.<br> <br> Regarding the certificate chain, the specification (<a class=3D"moz-txt-link-freetext" href=3D"https://tools.ietf.org/ht= ml/draft-ietf-acme-acme-09#page-58">https://tools.ietf.org/html/draft-iet= f-acme-acme-09#page-58</a>) says this:<br> <br> <pre class=3D"newpage"> File contains one or more certificates enco= ded with the PEM textual encoding, according to <a href=3D"https://tools.ietf.org/html/rfc7468"= >RFC 7468</a> [<a href=3D"https://tools.ietf.org/html/rfc7468" title=3D"&= quot;Textual Encodings of PKIX, PKCS, and CMS Structures"">RFC7468</= a>]. In order to provide easy interoperation with TLS, the first certificate MUST be an end-entity certificate. Each following certificate SHOULD directly certify one preceding it. Because certificate validation requires that trust anchors be distributed independently, a certificate that specifies a trust anchor MAY be omitted from the chain, provided that supported peers are known to possess any omitted certificates. And an example looks like this: -----BEGIN CERTIFICATE----- MIIFGDCCBACgAwIBAgITAPr0FKjY8OC5Kkeg885AbIfcOzANBgkqhkiG9w0BAQsF ADAiMSAwHgYDVQQDDBdGYWtlIExFIEludGVybWVkaWF0ZSBYMTAeFw0xODAyMjYw NDUwMDlaFw0xODA1MjcwNDUwMDlaMBoxGDAWBgNVBAMTD25peC5zeW5jaHJvLm5l dDCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAKw1988Kelpll9uytP9M mGB0DKJL8uSbsuT8Jx/UrcAqOUKpEmok11bp/QCF48Ff/Ou6GjQw5qcqQI/PyOad B7J4Ep++seINF2NN8S4FticTjeA0382LBVzLe1SiME8D7kEmPKzNtGc0PXaWxWpX fQQiLATLogWF0bcOrNvn79av++fn3m5folwy6Uud+7Z6XSw7VxtuoBqyaGOcoB5V tOka3tex/F4UjLSGm9LGMPo19gvY7xOiTvzh9zG16DiY1g0brkO5Z+9ovAIyB6l9 1KkvkAby7MH/O7SbeqNSuCzkiwIXW75jARVYw9PCrD+AtX2guWsmllg3GAcAngKd o4kCAwEAAaOCAk0wggJJMA4GA1UdDwEB/wQEAwIFoDAdBgNVHSUEFjAUBggrBgEF BQcDAQYIKwYBBQUHAwIwDAYDVR0TAQH/BAIwADAdBgNVHQ4EFgQU0pzHY4VHT3MF r91xP0/jB+3DD88wHwYDVR0jBBgwFoAUwMwDRrlYIMxccnDz4S7LIKb1aDowdwYI KwYBBQUHAQEEazBpMDIGCCsGAQUFBzABhiZodHRwOi8vb2NzcC5zdGctaW50LXgx LmxldHNlbmNyeXB0Lm9yZzAzBggrBgEFBQcwAoYnaHR0cDovL2NlcnQuc3RnLWlu dC14MS5sZXRzZW5jcnlwdC5vcmcvMFAGA1UdEQRJMEeCEmdhbGxlcnkuYmJzZGV2 Lm5ldIIPaG9tZS5iYnNkZXYubmV0gg9uaXguc3luY2hyby5uZXSCD3BpY3MuYmJz ZGV2Lm5ldDCB/gYDVR0gBIH2MIHzMAgGBmeBDAECATCB5gYLKwYBBAGC3xMBAQEw gdYwJgYIKwYBBQUHAgEWGmh0dHA6Ly9jcHMubGV0c2VuY3J5cHQub3JnMIGrBggr BgEFBQcCAjCBngyBm1RoaXMgQ2VydGlmaWNhdGUgbWF5IG9ubHkgYmUgcmVsaWVk IHVwb24gYnkgUmVseWluZyBQYXJ0aWVzIGFuZCBvbmx5IGluIGFjY29yZGFuY2Ug d2l0aCB0aGUgQ2VydGlmaWNhdGUgUG9saWN5IGZvdW5kIGF0IGh0dHBzOi8vbGV0 c2VuY3J5cHQub3JnL3JlcG9zaXRvcnkvMA0GCSqGSIb3DQEBCwUAA4IBAQDr1rOa zGglZTo9nRigvKkPdNle16zCrD99VDSEmV1PMWgmb6VOxlJSblBQV+F9LkajeNOa 0MJ7gdyfoOnED0ygg7aSb9D9KxJtZ8bPzhuXzXqc9DS3Mgu6vzdLjXXXVfp5XFRn 26NeTVrPJ/+NSMi+tEKr7nov+P8xAjCI1B5VmwpVubMtOt/9ePUk/b+nXAYHt4lr UEWH38Fp/fk+YO4sOcdG1It+YZ6to+8hESGUWdr/cBUYdOHrLrkrAE3+V8QOZa6I RPSQABlI7GHxbC/r17KXnLZatQToWcGTzsr/fvbJuTtioTuIBx4BF158kJvNndZE l8BxqQh5psteqkoJ -----END CERTIFICATE----- -----BEGIN CERTIFICATE----- MIIEqzCCApOgAwIBAgIRAIvhKg5ZRO08VGQx8JdhT+UwDQYJKoZIhvcNAQELBQAw GjEYMBYGA1UEAwwPRmFrZSBMRSBSb290IFgxMB4XDTE2MDUyMzIyMDc1OVoXDTM2 MDUyMzIyMDc1OVowIjEgMB4GA1UEAwwXRmFrZSBMRSBJbnRlcm1lZGlhdGUgWDEw ggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQDtWKySDn7rWZc5ggjz3ZB0 8jO4xti3uzINfD5sQ7Lj7hzetUT+wQob+iXSZkhnvx+IvdbXF5/yt8aWPpUKnPym oLxsYiI5gQBLxNDzIec0OIaflWqAr29m7J8+NNtApEN8nZFnf3bhehZW7AxmS1m0 ZnSsdHw0Fw+bgixPg2MQ9k9oefFeqa+7Kqdlz5bbrUYV2volxhDFtnI4Mh8BiWCN xDH1Hizq+GKCcHsinDZWurCqder/afJBnQs+SBSL6MVApHt+d35zjBD92fO2Je56 dhMfzCgOKXeJ340WhW3TjD1zqLZXeaCyUNRnfOmWZV8nEhtHOFbUCU7r/KkjMZO9 AgMBAAGjgeMwgeAwDgYDVR0PAQH/BAQDAgGGMBIGA1UdEwEB/wQIMAYBAf8CAQAw HQYDVR0OBBYEFMDMA0a5WCDMXHJw8+EuyyCm9Wg6MHoGCCsGAQUFBwEBBG4wbDA0 BggrBgEFBQcwAYYoaHR0cDovL29jc3Auc3RnLXJvb3QteDEubGV0c2VuY3J5cHQu b3JnLzA0BggrBgEFBQcwAoYoaHR0cDovL2NlcnQuc3RnLXJvb3QteDEubGV0c2Vu Y3J5cHQub3JnLzAfBgNVHSMEGDAWgBTBJnSkikSg5vogKNhcI5pFiBh54DANBgkq hkiG9w0BAQsFAAOCAgEABYSu4Il+fI0MYU42OTmEj+1HqQ5DvyAeyCA6sGuZdwjF UGeVOv3NnLyfofuUOjEbY5irFCDtnv+0ckukUZN9lz4Q2YjWGUpW4TTu3ieTsaC9 AFvCSgNHJyWSVtWvB5XDxsqawl1KzHzzwr132bF2rtGtazSqVqK9E07sGHMCf+zp DQVDVVGtqZPHwX3KqUtefE621b8RI6VCl4oD30Olf8pjuzG4JKBFRFclzLRjo/h7 IkkfjZ8wDa7faOjVXx6n+eUQ29cIMCzr8/rNWHS9pYGGQKJiY2xmVC9h12H99Xyf zWE9vb5zKP3MVG6neX1hSdo7PEAb9fqRhHkqVsqUvJlIRmvXvVKTwNCP3eCjRCCI PTAvjV+4ni786iXwwFYNz8l3PmPLCyQXWGohnJ8iBm+5nk7O2ynaPVW0U2W+pt2w SVuvdDM5zGv2f9ltNWUiYZHJ1mmO97jSY/6YfdOUH66iRtQtDkHBRdkNBsMbD+Em 2TgBldtHNSJBfB3pm9FblgOcJ0FSWcUDWJ7vO0+NTXlgrRofRT6pVywzxVo6dND0 WzYlTWeUVsO40xJqhgUQRER9YLOLxJ0O6C8i0xFxAMKOtSdodMB3RIwt7RFQ0uyt n5Z5MqkYhlMI3J1tPRTp1nEt9fyGspBOO05gi148Qasp+3N+svqKomoQglNoAxU=3D -----END CERTIFICATE----- </pre> </body> </html> --------------C1402DA8DE29C77FF76F4AB0-- --===============2948102618846519197== Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: base64 Content-Disposition: inline X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18KQ3J5cHRsaWIg bWFpbGluZyBsaXN0CkNyeXB0bGliQG1ic2tzLmZyYW5rZW4uZGVBZG1pbmlzdHJhdGlvbiB2aWEg TWFpbDogY3J5cHRsaWItcmVxdWVzdEBtYnNrcy5mcmFua2VuLmRlCkFyY2hpdmU6IGZ0cDovL2Z0 cC5mcmFua2VuLmRlL3B1Yi9jcnlwdC9jcnlwdGxpYi9hcmNoaXZlcy8KaHR0cDovL25ld3MuZ21h bmUub3JnL2dtYW5lLmNvbXAuZW5jcnlwdGlvbi5jcnlwdGxpYgpQb3N0cyBmcm9tIG5vbi1zdWJz Y3JpYmVkIGFkZHJlc3NlcyBhcmUgYmxvY2tlZCB0byBwcmV2ZW50IHNwYW0sIHBsZWFzZQpzdWJz Y3JpYmUgaW4gb3JkZXIgdG8gcG9zdCBtZXNzYWdlcy4K --===============2948102618846519197==--