Skip to content

Commit d858d0b

Browse files
committed
Upgrade rcgen to 0.14
1 parent 03a4a95 commit d858d0b

File tree

2 files changed

+38
-30
lines changed

2 files changed

+38
-30
lines changed

Cargo.toml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -65,7 +65,7 @@ testcontainers = { git = "https://github.com/kezhuw/testcontainers-rs.git", bran
6565
assertor = "0.0.2"
6666
assert_matches = "1.5.0"
6767
tempfile = "3.6.0"
68-
rcgen = { version = "0.12.1", features = ["default", "x509-parser"] }
68+
rcgen = { version = "0.14.1", features = ["default", "x509-parser"] }
6969
serial_test = "3.0.0"
7070
asyncs = { version = "0.4.0", features = ["test"] }
7171
blocking = "1.6.0"

tests/zookeeper.rs

Lines changed: 37 additions & 29 deletions
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,7 @@ use asyncs::select;
1313
use pretty_assertions::assert_eq;
1414
use rand::distributions::Standard;
1515
use rand::Rng;
16-
use rcgen::{Certificate, CertificateParams};
16+
use rcgen::{Certificate, CertificateParams, Issuer, KeyPair};
1717
#[allow(unused_imports)]
1818
use tempfile::{tempdir, TempDir};
1919
use test_case::test_case;
@@ -221,42 +221,41 @@ struct Tls {
221221
impl Tls {
222222
fn new(dir: Arc<TempDir>) -> Self {
223223
let hostname_verification = env_toggle("ZK_TLS_HOSTNAME_VERIFICATION");
224-
let (ca_cert, ca_cert_pem) = generate_ca_cert();
225-
let server_cert = generate_server_cert(hostname_verification);
226-
let signed_server_cert = server_cert.serialize_pem_with_signer(&ca_cert).unwrap();
227-
228-
// ZooKeeper needs a keystore with both key and signed cert.
229-
let server_pem = server_cert.serialize_private_key_pem() + &signed_server_cert;
230224

225+
let (ca_issuer, ca_cert) = generate_ca_cert();
226+
let ca_cert_pem = ca_cert.pem();
231227
let ca_cert_file = dir.path().join("ca.cert.pem");
232228
fs::write(&ca_cert_file, &ca_cert_pem).unwrap();
233229

230+
let (server_cert, server_key) = generate_server_cert(hostname_verification, &ca_issuer);
231+
232+
// ZooKeeper needs a keystore with both key and signed cert.
233+
let server_pem = server_key.serialize_pem() + &server_cert.pem();
234+
234235
let server_pem_file = dir.path().join("server.pem");
235236
fs::write(&server_pem_file, &server_pem).unwrap();
236237

237-
let client_cert = generate_client_cert("client");
238-
let signed_client_cert = client_cert.serialize_pem_with_signer(&ca_cert).unwrap();
239-
let client_key = client_cert.serialize_private_key_pem();
240-
let client_pem = client_key.clone() + &signed_client_cert;
238+
let (client_cert, client_key) = generate_client_cert("client", &ca_issuer);
239+
let client_cert_pem = client_cert.pem();
240+
let client_key_pem = client_key.serialize_pem();
241+
let client_pem = client_key_pem.clone() + &client_cert_pem;
241242

242243
let client_pem_file = dir.path().join("client.pem");
243244
fs::write(&client_pem_file, &client_pem).unwrap();
244245

245-
let client_cert_x = generate_client_cert("client_x");
246-
let signed_client_cert_x = client_cert_x.serialize_pem_with_signer(&ca_cert).unwrap();
247-
let client_key_x = client_cert_x.serialize_private_key_pem();
246+
let (client_x_cert, client_x_key) = generate_client_cert("client_x", &ca_issuer);
248247

249248
Self {
250249
_dir: dir,
251250
_ca_cert: ca_cert,
252251
ca_cert_pem,
253252
ca_cert_file,
254253
server_identity_file: server_pem_file,
255-
client_cert_pem: signed_client_cert,
256-
client_cert_key: client_key,
254+
client_cert_pem,
255+
client_cert_key: client_key_pem,
257256
client_identity_file: client_pem_file,
258-
client_x_cert_pem: signed_client_cert_x,
259-
client_x_cert_key: client_key_x,
257+
client_x_cert_pem: client_x_cert.pem(),
258+
client_x_cert_key: client_x_key.serialize_pem(),
260259
hostname_verification,
261260
}
262261
}
@@ -1894,32 +1893,41 @@ Server {
18941893
}
18951894

18961895
#[allow(dead_code)]
1897-
fn generate_ca_cert() -> (Certificate, String) {
1896+
fn generate_ca_cert() -> (Issuer<'static, KeyPair>, Certificate) {
18981897
let mut params = CertificateParams::default();
18991898
params.is_ca = rcgen::IsCa::Ca(rcgen::BasicConstraints::Unconstrained);
19001899
params.distinguished_name.push(rcgen::DnType::CommonName, "ca");
1901-
let ca_cert = Certificate::from_params(params).unwrap();
1902-
let ca_cert_pem = ca_cert.serialize_pem().unwrap();
1903-
let ca_cert_key = rcgen::KeyPair::from_pem(&ca_cert.get_key_pair().serialize_pem()).unwrap();
1904-
let ca_cert_params = CertificateParams::from_ca_cert_pem(&ca_cert_pem, ca_cert_key).unwrap();
1905-
(Certificate::from_params(ca_cert_params).unwrap(), ca_cert_pem)
1900+
params.key_usages = vec![
1901+
rcgen::KeyUsagePurpose::KeyCertSign,
1902+
rcgen::KeyUsagePurpose::DigitalSignature,
1903+
rcgen::KeyUsagePurpose::CrlSign,
1904+
];
1905+
let key = KeyPair::generate().unwrap();
1906+
let ca_cert = params.self_signed(&key).unwrap();
1907+
let ca_issuer = Issuer::from_ca_cert_der(ca_cert.der(), key).unwrap();
1908+
(ca_issuer, ca_cert)
19061909
}
19071910

19081911
#[allow(dead_code)]
1909-
fn generate_server_cert(hostname_verification: bool) -> Certificate {
1912+
fn generate_server_cert(hostname_verification: bool, issuer: &Issuer<'_, KeyPair>) -> (Certificate, KeyPair) {
19101913
let san = if hostname_verification { vec!["127.0.0.1".to_string()] } else { vec![] };
1911-
let mut params = CertificateParams::new(san);
1914+
let mut params = CertificateParams::new(san).unwrap();
19121915
params.key_usages = vec![rcgen::KeyUsagePurpose::DigitalSignature, rcgen::KeyUsagePurpose::KeyEncipherment];
19131916
params.extended_key_usages = vec![rcgen::ExtendedKeyUsagePurpose::ServerAuth];
19141917
params.distinguished_name.push(rcgen::DnType::CommonName, "server");
1915-
Certificate::from_params(params).unwrap()
1918+
1919+
let key = KeyPair::generate().unwrap();
1920+
let cert = params.signed_by(&key, issuer).unwrap();
1921+
(cert, key)
19161922
}
19171923

19181924
#[allow(dead_code)]
1919-
fn generate_client_cert(cn: &str) -> Certificate {
1925+
fn generate_client_cert(cn: &str, issuer: &Issuer<'_, KeyPair>) -> (Certificate, KeyPair) {
19201926
let mut params = CertificateParams::default();
19211927
params.distinguished_name.push(rcgen::DnType::CommonName, cn);
1922-
Certificate::from_params(params).unwrap()
1928+
let key = KeyPair::generate().unwrap();
1929+
let cert = params.signed_by(&key, issuer).unwrap();
1930+
(cert, key)
19231931
}
19241932

19251933
#[cfg(feature = "tls")]

0 commit comments

Comments
 (0)