blob: d527cd993a82e2c2c54b19283aeefd84e7dea0c4 (
plain) (
blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
|
use std::path::PathBuf;
use zagan_bet::server::setup::init_identity;
#[test]
fn creates_a_usable_pkcs12_identity_and_refuses_to_overwrite() {
let dir = PathBuf::from(env!("CARGO_TARGET_TMPDIR")).join("server-setup");
let _ = std::fs::remove_dir_all(&dir);
std::fs::create_dir_all(&dir).unwrap();
init_identity(&dir, "localhost").expect("openssl must be available for this test");
for name in ["identity.p12", "key.pem", "cert.pem"] {
let path = dir.join(name);
assert!(path.exists(), "{name} was not created");
assert!(
std::fs::metadata(&path).unwrap().len() > 0,
"{name} is empty"
);
}
let p12 = std::fs::read(dir.join("identity.p12")).unwrap();
native_tls::Identity::from_pkcs12(&p12, "").expect("generated identity must load");
let second = init_identity(&dir, "localhost");
assert!(second.is_err(), "setup must not overwrite existing keys");
#[cfg(unix)]
{
use std::os::unix::fs::PermissionsExt;
let mode = std::fs::metadata(dir.join("key.pem"))
.unwrap()
.permissions()
.mode()
& 0o777;
assert_eq!(mode, 0o600, "private key should not be world-readable");
}
}
|