mirror of
https://github.com/aljazceru/lightning.git
synced 2025-12-22 00:24:19 +01:00
grpc: make the mTLS private keys user-readable only
Fixes #6064 Reported-by: denis2342 <@denis2342> Changelog-Changed: grpc: The mTLS private keys are no longer group-readable
This commit is contained in:
committed by
Vincenzo Palazzo
parent
3424f70585
commit
97de4f8e0f
@@ -59,6 +59,8 @@ fn generate_or_load_identity(
|
|||||||
filename: &str,
|
filename: &str,
|
||||||
parent: Option<&Identity>,
|
parent: Option<&Identity>,
|
||||||
) -> Result<Identity> {
|
) -> Result<Identity> {
|
||||||
|
use std::io::Write;
|
||||||
|
use std::os::unix::fs::PermissionsExt;
|
||||||
// Just our naming convention here.
|
// Just our naming convention here.
|
||||||
let cert_path = directory.join(format!("{}.pem", filename));
|
let cert_path = directory.join(format!("{}.pem", filename));
|
||||||
let key_path = directory.join(format!("{}-key.pem", filename));
|
let key_path = directory.join(format!("{}-key.pem", filename));
|
||||||
@@ -70,7 +72,18 @@ fn generate_or_load_identity(
|
|||||||
&key_path
|
&key_path
|
||||||
);
|
);
|
||||||
let keypair = KeyPair::generate(&rcgen::PKCS_ECDSA_P256_SHA256)?;
|
let keypair = KeyPair::generate(&rcgen::PKCS_ECDSA_P256_SHA256)?;
|
||||||
std::fs::write(&key_path, keypair.serialize_pem())?;
|
|
||||||
|
// Create the file, but make it user-readable only:
|
||||||
|
let mut file = std::fs::File::create(&key_path)?;
|
||||||
|
let mut perms = std::fs::metadata(&key_path)?.permissions();
|
||||||
|
perms.set_mode(0o600);
|
||||||
|
std::fs::set_permissions(&key_path, perms)?;
|
||||||
|
|
||||||
|
// Only after changing the permissions we can write the
|
||||||
|
// private key
|
||||||
|
file.write_all(keypair.serialize_pem().as_bytes())?;
|
||||||
|
drop(file);
|
||||||
|
|
||||||
debug!(
|
debug!(
|
||||||
"Generating a new certificate for key {:?} at {:?}",
|
"Generating a new certificate for key {:?} at {:?}",
|
||||||
&key_path, &cert_path
|
&key_path, &cert_path
|
||||||
|
|||||||
@@ -181,6 +181,11 @@ def test_grpc_generate_certificate(node_factory):
|
|||||||
assert contents[-2] != files[-2].open().read()
|
assert contents[-2] != files[-2].open().read()
|
||||||
assert contents[-1] != files[-1].open().read()
|
assert contents[-1] != files[-1].open().read()
|
||||||
|
|
||||||
|
keys = [f for f in files if f.name.endswith('-key.pem')]
|
||||||
|
modes = [f.stat().st_mode for f in keys]
|
||||||
|
private = [m % 8 == 0 and (m // 8) % 8 == 0 for m in modes]
|
||||||
|
assert all(private)
|
||||||
|
|
||||||
|
|
||||||
def test_grpc_no_auto_start(node_factory):
|
def test_grpc_no_auto_start(node_factory):
|
||||||
"""Ensure that we do not start cln-grpc unless a port is configured.
|
"""Ensure that we do not start cln-grpc unless a port is configured.
|
||||||
|
|||||||
Reference in New Issue
Block a user