Index: net/socket/ssl_client_socket_nss.cc |
diff --git a/net/socket/ssl_client_socket_nss.cc b/net/socket/ssl_client_socket_nss.cc |
index 3651e8d62466696169433993af5f4cd92d62b67b..2ed254388892560b98ca073981ed4d52bb4ecc40 100644 |
--- a/net/socket/ssl_client_socket_nss.cc |
+++ b/net/socket/ssl_client_socket_nss.cc |
@@ -972,9 +972,18 @@ bool SSLClientSocketNSS::Core::Init(PRFileDesc* socket, |
SECStatus rv = SECSuccess; |
+#if !defined(CKM_AES_GCM) |
+#define CKM_AES_GCM 0x00001087 |
+#endif |
+ |
if (!ssl_config_.next_protos.empty()) { |
- std::vector<uint8_t> wire_protos = |
- SerializeNextProtos(ssl_config_.next_protos); |
+ // On platforms using NSS, AES-GCM is the only mechanism that satisfies the |
+ // security requirements of HTTP/2. |
+ // TODO(bnc): Check if ssl_config_.disabled_cipher_suites contains all |
+ // AES-GCM ciphersuites. |
+ std::vector<uint8_t> wire_protos = SerializeNextProtos( |
+ ssl_config_.next_protos, PK11_TokenExists(CKM_AES_GCM) && |
+ IsTLSVersionAdequateForHTTP2(ssl_config_)); |
rv = SSL_SetNextProtoNego( |
nss_fd_, wire_protos.empty() ? NULL : &wire_protos[0], |
wire_protos.size()); |