21e51e614d5fa4cab1f2d61464c6288673f72de5
[mirror/dsa-puppet.git] / modules / ssl / manifests / init.pp
1 class ssl {
2         package { 'openssl':
3                 ensure   => installed,
4         }
5         package { 'ssl-cert':
6                 ensure   => installed,
7         }
8         package { 'ca-certificates':
9                 ensure   => installed,
10         }
11
12         if has_role('insecure_ssl') {
13                 $extra_ssl_certs_flags = ' --default'
14                 $ssl_certs_config = 'puppet:///modules/ssl/ca-certificates-global.conf'
15         } else {
16                 $extra_ssl_certs_flags = ''
17                 $ssl_certs_config = 'puppet:///modules/ssl/ca-certificates.conf'
18         }
19
20         file { '/etc/ssl/README':
21                 mode   => '0444',
22                 source => 'puppet:///modules/ssl/README',
23         }
24         file { '/etc/ca-certificates.conf':
25                 source => $ssl_certs_config,
26                 notify  => Exec['refresh_normal_hashes'],
27         }
28         file { '/etc/ca-certificates-debian.conf':
29                 mode    => '0444',
30                 source => 'puppet:///modules/ssl/ca-certificates.conf',
31                 notify  => Exec['refresh_ca_debian_hashes'],
32         }
33         file { '/etc/ca-certificates-global.conf':
34                 source => 'puppet:///modules/ssl/ca-certificates-global.conf',
35                 notify  => Exec['refresh_ca_global_hashes'],
36         }
37
38         file { '/etc/apt/apt.conf.d/local-ssl-ca-global':
39                 mode   => '0444',
40                 content => template('ssl/local-ssl-ca-global.erb'),
41         }
42
43         file { '/etc/ssl/certs/ssl-cert-snakeoil.pem':
44                 ensure => absent,
45                 notify => Exec['refresh_normal_hashes'],
46         }
47         file { '/etc/ssl/private/ssl-cert-snakeoil.key':
48                 ensure => absent,
49         }
50
51         file { '/etc/ssl/servicecerts':
52                 ensure   => absent,
53         }
54
55         file { '/usr/local/share/ca-certificates/debian.org':
56                 ensure   => absent,
57                 purge    => true,
58                 recurse  => true,
59                 force    => true,
60                 notify   => [ Exec['refresh_normal_hashes'], Exec['refresh_ca_global_hashes'] ],
61         }
62         file { '/etc/ssl/certs/README':
63                 ensure => absent,
64         }
65         file { '/etc/ssl/ca-debian':
66                 ensure => directory,
67                 mode   => '0755',
68         }
69         file { '/etc/ssl/ca-debian/README':
70                 ensure => absent,
71         }
72         file { '/etc/ssl/ca-global':
73                 ensure => directory,
74                 mode   => '0755',
75         }
76         file { '/etc/ssl/ca-global/README':
77                 ensure => absent,
78         }
79         file { '/etc/ssl/debian':
80                 ensure   => directory,
81                 source   => 'puppet:///files/empty/',
82                 mode     => '0644', # this works; otherwise all files are +x
83                 purge    => true,
84                 recurse  => true,
85                 force    => true,
86         }
87         file { '/etc/ssl/debian/certs':
88                 ensure  => directory,
89                 mode    => '0755',
90         }
91         file { '/etc/ssl/debian/crls':
92                 ensure  => directory,
93                 mode    => '0755',
94         }
95         file { '/etc/ssl/debian/certs/thishost.crt':
96                 content => inline_template('<%= File.read(scope().call_function("hiera", ["paths.auto_clientcerts_dir"]) + "/" + @fqdn + ".client.crt") %>'),
97                 notify  => Exec['refresh_debian_hashes'],
98         }
99         file { '/etc/ssl/debian/certs/ca.crt':
100                 content => inline_template('<%= File.read(scope().call_function("hiera", ["paths.auto_clientcerts_dir"]) + "/ca.crt") %>'),
101                 notify  => Exec['refresh_debian_hashes'],
102         }
103         file { '/etc/ssl/debian/crls/ca.crl':
104                 content => inline_template('<%= File.read(scope().call_function("hiera", ["paths.auto_clientcerts_dir"]) + "/ca.crl") %>'),
105         }
106         file { '/etc/ssl/debian/certs/thishost-server.crt':
107                 content => inline_template('<%= File.read(scope().call_function("hiera", ["paths.auto_certs_dir"]) + "/" + @fqdn + ".crt") %>'),
108                 notify  => Exec['refresh_debian_hashes'],
109         }
110
111         file { '/etc/ssl/debian/keys/thishost.key':
112                 ensure => absent,
113         }
114         file { '/etc/ssl/debian/keys/thishost-server.key':
115                 ensure => absent,
116         }
117         file { '/etc/ssl/debian/keys':
118                 ensure => absent,
119                 force    => true,
120         }
121         file { '/etc/ssl/private/thishost.key':
122                 content => inline_template('<%= File.read(scope().call_function("hiera", ["paths.auto_clientcerts_dir"]) + "/" + @fqdn + ".key") %>'),
123                 mode    => '0440',
124                 group   => ssl-cert,
125                 require => Package['ssl-cert'],
126         }
127         file { '/etc/ssl/private/thishost-server.key':
128                 content => inline_template('<%= File.read(scope().call_function("hiera", ["paths.auto_certs_dir"]) + "/" + @fqdn + ".key") %>'),
129                 mode    => '0440',
130                 group   => ssl-cert,
131                 require => Package['ssl-cert'],
132         }
133
134         $updatecacertsdsa = '/usr/local/sbin/update-ca-certificates-dsa'
135         if (versioncmp($::lsbmajdistrelease, '9') >= 0) {
136                 file { $updatecacertsdsa:
137                         ensure => absent,
138                 }
139                 $updatecacerts = '/usr/sbin/update-ca-certificates'
140         } else {
141                 file { $updatecacertsdsa:
142                         mode   => '0555',
143                         source => 'puppet:///modules/ssl/update-ca-certificates-dsa',
144                 }
145                 $updatecacerts = $updatecacertsdsa
146         }
147
148         exec { 'refresh_debian_hashes':
149                 command     => 'c_rehash /etc/ssl/debian/certs',
150                 refreshonly => true,
151                 require     => Package['openssl'],
152         }
153
154         exec { 'refresh_normal_hashes':
155                 # NOTE 1: always use update-ca-certificates to manage hashes in
156                 #         /etc/ssl/certs otherwise /etc/ssl/ca-certificates.crt will
157                 #         get a hash overriding the hash that would have been generated
158                 #         for another certificate ... which is problem, comrade
159                 # NOTE 2: always ask update-ca-certificates to freshen (-f) the links
160                 command     => "/usr/sbin/update-ca-certificates --fresh${extra_ssl_certs_flags}",
161                 refreshonly => true,
162                 require     => Package['ca-certificates'],
163         }
164         exec { 'refresh_ca_debian_hashes':
165                 command     => "${updatecacerts} --fresh --certsconf /etc/ca-certificates-debian.conf --localcertsdir /dev/null --etccertsdir /etc/ssl/ca-debian --hooksdir /dev/null",
166                 refreshonly => true,
167                 require     => [
168                         Package['ca-certificates'],
169                         File['/etc/ssl/ca-debian'],
170                         File['/etc/ca-certificates-debian.conf'],
171                         File[$updatecacertsdsa],
172                 ]
173         }
174         exec { 'refresh_ca_global_hashes':
175                 command     => "${updatecacerts} --fresh --default --certsconf /etc/ca-certificates-global.conf --etccertsdir /etc/ssl/ca-global --hooksdir /dev/null",
176                 refreshonly => true,
177                 require     => [
178                         Package['ca-certificates'],
179                         File['/etc/ssl/ca-global'],
180                         File['/etc/ca-certificates-global.conf'],
181                         File[$updatecacertsdsa],
182                 ]
183         }
184
185 }