diff options
| author | Joel Klinghed <the_jk@yahoo.com> | 2017-03-30 22:28:35 +0200 |
|---|---|---|
| committer | Joel Klinghed <the_jk@yahoo.com> | 2017-03-30 22:28:35 +0200 |
| commit | 3a7871b96c9a655842d62a429e1250d8d27490d7 (patch) | |
| tree | 1254d098eb969c90a651828786196a1f1a36ee1f /src/ssl_mbedtls.cc | |
| parent | 7e9b90fb692b80df159992f62458c70c9fe36781 (diff) | |
Generate a unique serial for each cert
Diffstat (limited to 'src/ssl_mbedtls.cc')
| -rw-r--r-- | src/ssl_mbedtls.cc | 14 |
1 files changed, 14 insertions, 0 deletions
diff --git a/src/ssl_mbedtls.cc b/src/ssl_mbedtls.cc index 3395d83..10de993 100644 --- a/src/ssl_mbedtls.cc +++ b/src/ssl_mbedtls.cc @@ -504,6 +504,7 @@ bool SSLCert::generate(Logger* logger, SSLEntropy* entropy, std::string const& host, SSLKey* key, std::string* cert) { mbedtls_x509write_cert crt; + mbedtls_mpi serial; char issuer_name[256]; std::string subject; bool ok = false; @@ -513,6 +514,7 @@ bool SSLCert::generate(Logger* logger, SSLEntropy* entropy, char not_after[20]; unsigned char buffer[16000]; mbedtls_x509write_crt_init(&crt); + mbedtls_mpi_init(&serial); mbedtls_x509write_crt_set_md_alg(&crt, MBEDTLS_MD_SHA256); if (key) { @@ -569,6 +571,17 @@ bool SSLCert::generate(Logger* logger, SSLEntropy* entropy, goto error; } + if (mbedtls_mpi_fill_random( + &serial, 32, mbedtls_ctr_drbg_random, + static_cast<SSLEntropyImpl*>(entropy)->random())) { + logerr(logger, ret, "Unable generate serial"); + goto error; + } + if (mbedtls_x509write_crt_set_serial(&crt, &serial)) { + logerr(logger, ret, "Unable to set serial"); + goto error; + } + ret = mbedtls_x509write_crt_pem( &crt, buffer, sizeof(buffer), mbedtls_ctr_drbg_random, @@ -581,6 +594,7 @@ bool SSLCert::generate(Logger* logger, SSLEntropy* entropy, ok = true; error: + mbedtls_mpi_free(&serial); mbedtls_x509write_crt_free(&crt); return ok; } |
