Chromium Code Reviews| OLD | NEW | 
|---|---|
| 1 /* | 1 /* | 
| 2 * Copyright 2004 The WebRTC Project Authors. All rights reserved. | 2 * Copyright 2004 The WebRTC Project Authors. All rights reserved. | 
| 3 * | 3 * | 
| 4 * Use of this source code is governed by a BSD-style license | 4 * Use of this source code is governed by a BSD-style license | 
| 5 * that can be found in the LICENSE file in the root of the source | 5 * that can be found in the LICENSE file in the root of the source | 
| 6 * tree. An additional intellectual property rights grant can be found | 6 * tree. An additional intellectual property rights grant can be found | 
| 7 * in the file PATENTS. All contributing project authors may | 7 * in the file PATENTS. All contributing project authors may | 
| 8 * be found in the AUTHORS file in the root of the source tree. | 8 * be found in the AUTHORS file in the root of the source tree. | 
| 9 */ | 9 */ | 
| 10 | 10 | 
| (...skipping 18 matching lines...) Expand all Loading... | |
| 29 #include "webrtc/base/openssldigest.h" | 29 #include "webrtc/base/openssldigest.h" | 
| 30 | 30 | 
| 31 namespace rtc { | 31 namespace rtc { | 
| 32 | 32 | 
| 33 // We could have exposed a myriad of parameters for the crypto stuff, | 33 // We could have exposed a myriad of parameters for the crypto stuff, | 
| 34 // but keeping it simple seems best. | 34 // but keeping it simple seems best. | 
| 35 | 35 | 
| 36 // Random bits for certificate serial number | 36 // Random bits for certificate serial number | 
| 37 static const int SERIAL_RAND_BITS = 64; | 37 static const int SERIAL_RAND_BITS = 64; | 
| 38 | 38 | 
| 39 // Certificate validity lifetime | |
| 40 static const int CERTIFICATE_LIFETIME = 60*60*24*30; // 30 days, arbitrarily | |
| 41 // Certificate validity window. | |
| 42 // This is to compensate for slightly incorrect system clocks. | |
| 43 static const int CERTIFICATE_WINDOW = -60*60*24; | |
| 44 | |
| 45 // Generate a key pair. Caller is responsible for freeing the returned object. | 39 // Generate a key pair. Caller is responsible for freeing the returned object. | 
| 46 static EVP_PKEY* MakeKey(const KeyParams& key_params) { | 40 static EVP_PKEY* MakeKey(const KeyParams& key_params) { | 
| 47 LOG(LS_INFO) << "Making key pair"; | 41 LOG(LS_INFO) << "Making key pair"; | 
| 48 EVP_PKEY* pkey = EVP_PKEY_new(); | 42 EVP_PKEY* pkey = EVP_PKEY_new(); | 
| 49 if (key_params.type() == KT_RSA) { | 43 if (key_params.type() == KT_RSA) { | 
| 50 int key_length = key_params.rsa_params().mod_size; | 44 int key_length = key_params.rsa_params().mod_size; | 
| 51 BIGNUM* exponent = BN_new(); | 45 BIGNUM* exponent = BN_new(); | 
| 52 RSA* rsa = RSA_new(); | 46 RSA* rsa = RSA_new(); | 
| 53 if (!pkey || !exponent || !rsa || | 47 if (!pkey || !exponent || !rsa || | 
| 54 !BN_set_word(exponent, key_params.rsa_params().pub_exp) || | 48 !BN_set_word(exponent, key_params.rsa_params().pub_exp) || | 
| (...skipping 352 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 407 OpenSSLCertificate::Generate(key_pair, params); | 401 OpenSSLCertificate::Generate(key_pair, params); | 
| 408 if (certificate) | 402 if (certificate) | 
| 409 return new OpenSSLIdentity(key_pair, certificate); | 403 return new OpenSSLIdentity(key_pair, certificate); | 
| 410 delete key_pair; | 404 delete key_pair; | 
| 411 } | 405 } | 
| 412 LOG(LS_INFO) << "Identity generation failed"; | 406 LOG(LS_INFO) << "Identity generation failed"; | 
| 413 return NULL; | 407 return NULL; | 
| 414 } | 408 } | 
| 415 | 409 | 
| 416 OpenSSLIdentity* OpenSSLIdentity::Generate(const std::string& common_name, | 410 OpenSSLIdentity* OpenSSLIdentity::Generate(const std::string& common_name, | 
| 417 const KeyParams& key_params) { | 411 const KeyParams& key_params, | 
| 412 time_t certificate_lifetime) { | |
| 
 
tommi
2016/02/11 16:59:30
does it make sense to DCHECK the validity of the c
 
torbjorng (webrtc)
2016/02/12 10:54:32
Reply below.
 
 | |
| 418 SSLIdentityParams params; | 413 SSLIdentityParams params; | 
| 419 params.key_params = key_params; | 414 params.key_params = key_params; | 
| 420 params.common_name = common_name; | 415 params.common_name = common_name; | 
| 421 time_t now = time(NULL); | 416 time_t now = time(NULL); | 
| 422 params.not_before = now + CERTIFICATE_WINDOW; | 417 params.not_before = now + CERTIFICATE_WINDOW; | 
| 423 params.not_after = now + CERTIFICATE_LIFETIME; | 418 params.not_after = now + certificate_lifetime; | 
| 419 RTC_DCHECK(params.not_before < params.not_after); | |
| 
 
tommi
2016/02/11 16:59:30
ah, perhaps this is enough... unless now is bogus.
 
torbjorng (webrtc)
2016/02/12 10:54:32
This is an intentionally somewhat week assertion,
 
 | |
| 424 return GenerateInternal(params); | 420 return GenerateInternal(params); | 
| 425 } | 421 } | 
| 426 | 422 | 
| 427 OpenSSLIdentity* OpenSSLIdentity::GenerateForTest( | 423 OpenSSLIdentity* OpenSSLIdentity::GenerateForTest( | 
| 428 const SSLIdentityParams& params) { | 424 const SSLIdentityParams& params) { | 
| 429 return GenerateInternal(params); | 425 return GenerateInternal(params); | 
| 430 } | 426 } | 
| 431 | 427 | 
| 432 SSLIdentity* OpenSSLIdentity::FromPEMStrings( | 428 SSLIdentity* OpenSSLIdentity::FromPEMStrings( | 
| 433 const std::string& private_key, | 429 const std::string& private_key, | 
| (...skipping 39 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 473 SSL_CTX_use_PrivateKey(ctx, key_pair_->pkey()) != 1) { | 469 SSL_CTX_use_PrivateKey(ctx, key_pair_->pkey()) != 1) { | 
| 474 LogSSLErrors("Configuring key and certificate"); | 470 LogSSLErrors("Configuring key and certificate"); | 
| 475 return false; | 471 return false; | 
| 476 } | 472 } | 
| 477 return true; | 473 return true; | 
| 478 } | 474 } | 
| 479 | 475 | 
| 480 } // namespace rtc | 476 } // namespace rtc | 
| 481 | 477 | 
| 482 #endif // HAVE_OPENSSL_SSL_H | 478 #endif // HAVE_OPENSSL_SSL_H | 
| OLD | NEW |