Welcome to mirror list, hosted at ThFree Co, Russian Federation.

github.com/mono/boringssl.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDavid Benjamin <davidben@chromium.org>2015-12-30 01:14:33 +0300
committerAdam Langley <alangley@gmail.com>2016-01-28 03:43:37 +0300
commitf6094e05efd294e15fe7f2e430f391445ee546bb (patch)
tree86f7381768900567a767877b41b42fceb5ac5dc3 /include
parentc612e61e1db6ccb732123c9fe57f8cceba19ec4e (diff)
Don't allow EVP_PKEY_RSA2.
OpenSSL accepts both OID 2.5.8.1.1 and OID 1.2.840.113549.1.1.1 for RSA public keys. The latter comes from RFC 3279 and is widely implemented. The former comes from the ITU-T version of X.509. Interestingly, 2.5.8.1.1 actually has a parameter, which OpenSSL ignores: rsa ALGORITHM ::= { KeySize IDENTIFIED BY id-ea-rsa } KeySize ::= INTEGER Remove support for 2.5.8.1.1 completely. In tests with a self-signed certificate and code inspection: - IE11 on Win8 does not accept the certificate in a TLS handshake at all. Such a certificate is fatal and unbypassable. However Microsoft's libraries do seem to parse it, so Chrome on Windows allows one to click through the error. I'm guessing either the X.509 stack accepts it while the TLS stack doesn't recognize it as RSA or the X.509 stack is able to lightly parse it but not actually understand the key. (The system certificate UI didn't display it as an RSA key, so probably the latter?) - Apple's certificate library on 10.11.2 does not parse the certificate at all. Both Safari and Chrome on Mac treat it as a fatal and unbypassable error. - mozilla::pkix, from code inspection, does not accept such certificates. However, Firefox does allow clicking through the error. This is likely a consequence of mozilla::pkix and NSS having different ASN.1 stacks. I did not test this, but I expect this means Chrome on Linux also accepts it. Given IE and Safari's results, it should be safe to simply remove this. Firefox's data point is weak (perhaps someone is relying on being able to click-through a self-signed 2.5.8.1.1 certificate), but it does further ensure no valid certificate could be doing this. The following is the 2.5.8.1.1 certificate I constructed to test with. The private key is key.pem from ssl/test/runner: -----BEGIN CERTIFICATE----- MIICVTCCAb6gAwIBAgIJAPuwTC6rEJsMMA0GCSqGSIb3DQEBBQUAMEUxCzAJBgNV BAYTAkFVMRMwEQYDVQQIDApTb21lLVN0YXRlMSEwHwYDVQQKDBhJbnRlcm5ldCBX aWRnaXRzIFB0eSBMdGQwHhcNMTQwNDIzMjA1MDQwWhcNMTcwNDIyMjA1MDQwWjBF MQswCQYDVQQGEwJBVTETMBEGA1UECAwKU29tZS1TdGF0ZTEhMB8GA1UECgwYSW50 ZXJuZXQgV2lkZ2l0cyBQdHkgTHRkMIGcMAoGBFUIAQECAgQAA4GNADCBiQKBgQDY K8imMuRi/03z0K1Zi0WnvfFHvwlYeyK9Na6XJYaUoIDAtB92kWdGMdAQhLciHnAj kXLI6W15OoV3gA/ElRZ1xUpxTMhjP6PyY5wqT5r6y8FxbiiFKKAnHmUcrgfVW28t Q+0rkLGMryRtrukXOgXBv7gcrmU7G1jC2a7WqmeI8QIDAQABo1AwTjAdBgNVHQ4E FgQUi3XVrMsIvg4fZbf6Vr5sp3Xaha8wHwYDVR0jBBgwFoAUi3XVrMsIvg4fZbf6 Vr5sp3Xaha8wDAYDVR0TBAUwAwEB/zANBgkqhkiG9w0BAQUFAAOBgQAIZuUICtYv w3cbpCGX6HNCtyI0guOfbytcdwzRkQaCsYNSDrTxrSSWxHwqg3Dl/RlvS+T3Yaua Xkioadstwt7GDP6MwpIpdbjchh0XZd3kjdJWqXSvihUDpRePNjNS2LmJW8GWfB3c F6UVyNK+wcApRY+goREIhyYupAHUexR7FQ== -----END CERTIFICATE----- BUG=522228 Change-Id: I031d03c0f53a16cbc749c4a5d8be6efca50dc863 Reviewed-on: https://boringssl-review.googlesource.com/6852 Reviewed-by: Adam Langley <alangley@gmail.com>
Diffstat (limited to 'include')
-rw-r--r--include/openssl/evp.h9
1 files changed, 6 insertions, 3 deletions
diff --git a/include/openssl/evp.h b/include/openssl/evp.h
index 86349539..4f9426fd 100644
--- a/include/openssl/evp.h
+++ b/include/openssl/evp.h
@@ -133,8 +133,8 @@ OPENSSL_EXPORT int EVP_PKEY_bits(EVP_PKEY *pkey);
* values. */
OPENSSL_EXPORT int EVP_PKEY_id(const EVP_PKEY *pkey);
-/* EVP_PKEY_type returns a canonicalised form of |NID|. For example,
- * |EVP_PKEY_RSA2| will be turned into |EVP_PKEY_RSA|. */
+/* EVP_PKEY_type returns |nid| if |nid| is a known key type and |NID_undef|
+ * otherwise. */
OPENSSL_EXPORT int EVP_PKEY_type(int nid);
@@ -165,7 +165,6 @@ OPENSSL_EXPORT EC_KEY *EVP_PKEY_get1_EC_KEY(EVP_PKEY *pkey);
#define EVP_PKEY_NONE NID_undef
#define EVP_PKEY_RSA NID_rsaEncryption
-#define EVP_PKEY_RSA2 NID_rsa
#define EVP_PKEY_DSA NID_dsa
#define EVP_PKEY_EC NID_X9_62_id_ecPublicKey
@@ -667,6 +666,10 @@ OPENSSL_EXPORT int EVP_PKEY_CTX_get0_rsa_oaep_label(EVP_PKEY_CTX *ctx,
* |EVP_PKEY| of that type. */
#define EVP_PKEY_DH NID_dhKeyAgreement
+/* EVP_PKEY_RSA2 was historically an alternate form for RSA public keys (OID
+ * 2.5.8.1.1), but is no longer accepted. */
+#define EVP_PKEY_RSA2 NID_rsa
+
/* OpenSSL_add_all_algorithms does nothing. */
OPENSSL_EXPORT void OpenSSL_add_all_algorithms(void);