Skip to content

Commit

Permalink
Merge commit from fork
Browse files Browse the repository at this point in the history
Send passwords via environment variables
  • Loading branch information
ekohl authored Sep 30, 2024
2 parents d89062c + 25df787 commit a38c6ad
Show file tree
Hide file tree
Showing 6 changed files with 58 additions and 30 deletions.
9 changes: 7 additions & 2 deletions lib/puppet/provider/x509_cert/openssl.rb
Original file line number Diff line number Diff line change
Expand Up @@ -57,6 +57,8 @@ def exists?
end

def create
env = {}

if resource[:csr]
options = [
'x509',
Expand Down Expand Up @@ -92,9 +94,12 @@ def create

password = resource[:cakey_password] || resource[:password]

options << ['-passin', "pass:#{password}"] if password
if password
options << ['-passin', 'env:CERTIFICATE_PASSIN']
env['CERTIFICATE_PASSIN'] = password
end
options << ['-extensions', 'v3_req'] if resource[:req_ext] != :false
openssl options
openssl options, environment: env
end

def destroy
Expand Down
8 changes: 6 additions & 2 deletions lib/puppet/provider/x509_request/openssl.rb
Original file line number Diff line number Diff line change
Expand Up @@ -28,17 +28,21 @@ def exists?
end

def create
env = {}
options = [
'req', '-new',
'-key', resource[:private_key],
'-config', resource[:template],
'-out', resource[:path]
]

options << ['-passin', "pass:#{resource[:password]}"] if resource[:password]
if resource[:password]
options << ['-passin', 'env:CERTIFICATE_PASSIN']
env['CERTIFICATE_PASSIN'] = resource[:password]
end
options << ['-nodes'] unless resource[:encrypted]

openssl options
openssl options, environment: env
end

def destroy
Expand Down
16 changes: 10 additions & 6 deletions manifests/export/pem_cert.pp
Original file line number Diff line number Diff line change
Expand Up @@ -44,9 +44,12 @@
$in_cert = $pfx_cert
}

$passin_opt = $in_pass ? {
undef => [],
default => ['-nokeys', '-passin', "pass:${in_pass}"],
if $in_pass {
$passin_opt = ['-nokeys', '-passin', 'env:CERTIFICATE_PASSIN']
$passin_env = ["CERTIFICATE_PASSIN=${in_pass}"]
} else {
$passin_opt = []
$passin_env = []
}

if $ensure == 'present' {
Expand All @@ -62,9 +65,10 @@
}

exec { "Export ${in_cert} to ${pem_cert}":
command => $cmd,
path => $facts['path'],
* => $exec_params,
command => $cmd,
environment => $passin_env
path => $facts['path'],
* => $exec_params,
}
} else {
file { $pem_cert:
Expand Down
25 changes: 16 additions & 9 deletions manifests/export/pem_key.pp
Original file line number Diff line number Diff line change
Expand Up @@ -25,14 +25,20 @@
Optional[String] $out_pass = undef,
) {
if $ensure == 'present' {
$passin_opt = $in_pass ? {
undef => [],
default => ['-passin', "pass:${in_pass}"],
if $in_pass {
$passin_opt = ['-nokeys', '-passin', 'env:CERTIFICATE_PASSIN']
$passin_env = ["CERTIFICATE_PASSIN=${in_pass}"]
} else {
$passin_opt = []
$passin_env = []
}

$passout_opt = $out_pass ? {
undef => ['-nodes'],
default => ['-passout', "pass:${out_pass}"],
if $out_pass {
$passout_opt = ['-nokeys', '-passout', 'env:CERTIFICATE_PASSOUT']
$passout_env = ["CERTIFICATE_PASSOUT=${out_pass}"]
} else {
$passout_opt = []
$passout_env = []
}

$cmd = [
Expand All @@ -52,9 +58,10 @@
}

exec { "Export ${pfx_cert} to ${pem_key}":
command => $cmd,
path => $facts['path'],
* => $exec_params,
command => $cmd,
environment => $passin_env + $passout_env,
path => $facts['path'],
* => $exec_params,
}
} else {
file { $pem_key:
Expand Down
27 changes: 17 additions & 10 deletions manifests/export/pkcs12.pp
Original file line number Diff line number Diff line change
Expand Up @@ -33,14 +33,20 @@
$full_path = "${basedir}/${name}.p12"

if $ensure == 'present' {
$pass_opt = $in_pass ? {
undef => [],
default => ['-passin', "pass:${in_pass}"],
if $in_pass {
$passin_opt = ['-nokeys', '-passin', 'env:CERTIFICATE_PASSIN']
$passin_env = ["CERTIFICATE_PASSIN=${in_pass}"]
} else {
$passin_opt = []
$passin_env = []
}

$passout_opt = $out_pass ? {
undef => [],
default => ['-passout', "pass:${out_pass}"],
if $out_pass {
$passout_opt = ['-nokeys', '-passout', 'env:CERTIFICATE_PASSOUT']
$passout_env = ["CERTIFICATE_PASSOUT=${out_pass}"]
} else {
$passout_opt = []
$passout_env = []
}

$chain_opt = $chaincert ? {
Expand All @@ -55,7 +61,7 @@
'-out', $full_path,
'-name', $name,
'-nodes', '-noiter',
] + $chain_opt + $pass_opt + $passout_opt
] + $chain_opt + $passin_opt + $passout_opt

if $dynamic {
$exec_params = {
Expand All @@ -67,9 +73,10 @@
}

exec { "Export ${name} to ${full_path}":
command => $cmd,
path => $facts['path'],
* => $exec_params,
command => $cmd,
environment => $passin_env + $passout_env,
path => $facts['path'],
* => $exec_params,
}
} else {
file { $full_path:
Expand Down
3 changes: 2 additions & 1 deletion spec/defines/openssl_export_pem_cert_spec.rb
Original file line number Diff line number Diff line change
Expand Up @@ -79,7 +79,8 @@

it {
is_expected.to contain_exec('Export /etc/ssl/certs/foo.pfx to /etc/ssl/certs/foo.pem').with(
command: ['openssl', 'pkcs12', '-in', '/etc/ssl/certs/foo.pfx', '-out', '/etc/ssl/certs/foo.pem', '-nokeys', '-passin', 'pass:5r$}^'],
command: ['openssl', 'pkcs12', '-in', '/etc/ssl/certs/foo.pfx', '-out', '/etc/ssl/certs/foo.pem', '-nokeys', '-passin', 'env:CERTIFICATE_PASSIN'],
environment: ['CERTIFICATE_PASSIN=5r$}^'],
creates: '/etc/ssl/certs/foo.pem',
path: '/usr/bin:/bin:/usr/sbin:/sbin'
)
Expand Down

0 comments on commit a38c6ad

Please sign in to comment.