diff options
author | Nick Mathewson <nickm@torproject.org> | 2017-02-27 11:20:39 -0500 |
---|---|---|
committer | Nick Mathewson <nickm@torproject.org> | 2017-02-27 11:20:39 -0500 |
commit | 6747c62386964d961c3e98768e4dc9c51f8529de (patch) | |
tree | 228648feaf25ca26e84599a49657beedb504f740 /src/common | |
parent | 2b3518b81fbec1eda8b8924a21c464f63bd1984d (diff) | |
parent | f6e5a658df84cf9dd01ab7d61cfb25f0fb9040c1 (diff) | |
download | tor-6747c62386964d961c3e98768e4dc9c51f8529de.tar.gz tor-6747c62386964d961c3e98768e4dc9c51f8529de.zip |
Merge branch 'bug21420_029_squashed' into maint-0.3.0
Diffstat (limited to 'src/common')
-rw-r--r-- | src/common/tortls.c | 19 |
1 files changed, 16 insertions, 3 deletions
diff --git a/src/common/tortls.c b/src/common/tortls.c index 1fe91edf0e..1594f3be00 100644 --- a/src/common/tortls.c +++ b/src/common/tortls.c @@ -483,8 +483,22 @@ MOCK_IMPL(STATIC X509 *, * then we might pick a time where we're about to expire. Lastly, be * sure to start on a day boundary. */ time_t now = time(NULL); - start_time = crypto_rand_time_range(now - cert_lifetime, now) + 2*24*3600; - start_time -= start_time % (24*3600); + /* Our certificate lifetime will be cert_lifetime no matter what, but if we + * start cert_lifetime in the past, we'll have 0 real lifetime. instead we + * start up to (cert_lifetime - min_real_lifetime - start_granularity) in + * the past. */ + const time_t min_real_lifetime = 24*3600; + const time_t start_granularity = 24*3600; + time_t earliest_start_time = now - cert_lifetime + min_real_lifetime + + start_granularity; + /* Don't actually start in the future! */ + if (earliest_start_time >= now) + earliest_start_time = now - 1; + start_time = crypto_rand_time_range(earliest_start_time, now); + /* Round the start time back to the start of a day. */ + start_time -= start_time % start_granularity; + + end_time = start_time + cert_lifetime; tor_assert(rsa); tor_assert(cname); @@ -518,7 +532,6 @@ MOCK_IMPL(STATIC X509 *, if (!X509_time_adj(X509_get_notBefore(x509),0,&start_time)) goto error; - end_time = start_time + cert_lifetime; if (!X509_time_adj(X509_get_notAfter(x509),0,&end_time)) goto error; if (!X509_set_pubkey(x509, pkey)) |