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