5bfd0ff2ad8d23f199e143307d741303a6e16f10
bernd Neue Zertifikatsverwaltung

bernd authored 14 years ago

1) <?php
2) 
3) require_once("certs.php");
4) require_role(ROLE_SYSTEMUSER);
5) 
6) $section = 'vhosts_certs';
7) 
8) if ($_GET['action'] == 'new')
9) {
10)   check_form_token('vhosts_certs_new');
11)   $cert = $_POST['cert'];
12)   $key = $_POST['key'];
bernd CSR-Erstellung

bernd authored 14 years ago

13)   if (! isset($_POST['key']) && isset($_REQUEST['csr']))
14)   {
15)     $csr = csr_details($_REQUEST['csr']);
16)     $key = $csr['key'];
17)   }
18) 
bernd Neue Zertifikatsverwaltung

bernd authored 14 years ago

19)   if (! $cert or ! $key)
20)     system_failure('Es muss ein Zertifikat und der dazu passende private Schlüssel eingetragen werden');
21) 
22)   $result = validate_certificate($cert, $key);
23)   switch ($result)
24)   {
25)     case CERT_OK:
26)       $certinfo = parse_cert_details($cert);
bernd Cert-Refresh

bernd authored 14 years ago

27)       save_cert($certinfo, $cert, $key);
bernd CSR-Erstellung

bernd authored 14 years ago

28)       if (isset($_REQUEST['csr']))
29)         delete_csr($_REQUEST['csr']);
bernd Neue Zertifikatsverwaltung

bernd authored 14 years ago

30)       header('Location: certs');
31)       die();
32)       break;
33)     case CERT_INVALID:
34)       system_failure("Das Zertifikat konnte nicht gelesen werden. Eventuell ist der private Schlüssel mit einem Paswort versehen?");
35)       break;
36)     case CERT_NOCHAIN:
37)       warning('Ihr Zertifikat konnte nicht mit einer Zertifikats-Kette validiert werden. Dies wird zu Problemen beim Betrachten der damit betriebenen Websites führen. Meist liegt dies an einem nicht hinterlegten CA-Bundle. Die Admins können Ihr Zertifikats-Bundle auf dem System eintragen. Das Zertifikat wurde dennoch gespeichert.');
38)       $certinfo = parse_cert_details($cert);
39)       save_cert($certinfo, $cert, $key, $cabundle);
40)       output('<p>'.internal_link('certs', 'Zurück zur Übersicht').'</p>');
bernd CSR-Erstellung

bernd authored 14 years ago

41)       if (isset($_REQUEST['csr']))
42)         delete_csr($_REQUEST['csr']);
bernd Neue Zertifikatsverwaltung

bernd authored 14 years ago

43)       break;
44)   }
45) 
bernd Cert-Refresh

bernd authored 14 years ago

46) }
47) elseif ($_GET['action'] == 'refresh')
48) {
49)   check_form_token('vhosts_certs_refresh');
50)   $cert = $_POST['cert'];
51)   $oldcert = cert_details($_REQUEST['id']);
52)   $key = $oldcert['key'];
53)   $id = (int) $_REQUEST['id'];
54) 
55)   if (! $cert )
56)     system_failure('Es muss ein Zertifikat eingetragen werden');
57) 
58)   $result = validate_certificate($cert, $key);
59)   switch ($result)
60)   {
61)     case CERT_OK:
62)       $certinfo = parse_cert_details($cert);
63)       if ($certinfo['cn'] != $oldcert['cn'])
64)         system_failure("Das neue Zertifikat enthält abweichende Daten. Legen Sie bitte ein neues Zertifikat an.");
65) 
66)       refresh_cert($id, $certinfo, $cert);
67)       header('Location: certs');
68)       die();
69)       break;
70)     case CERT_INVALID:
71)       system_failure("Das Zertifikat konnte nicht gelesen werden. Eventuell ist es nicht wirklich eine neue Version des bisherigen Zertifikats.");
72)       break;
73)     case CERT_NOCHAIN:
74)       warning('Ihr Zertifikat konnte nicht mit einer Zertifikats-Kette validiert werden. Dies wird zu Problemen beim Betrachten der damit betriebenen Websites führen. Meist liegt dies an einem nicht hinterlegten CA-Bundle. Die Admins können Ihr Zertifikats-Bundle auf dem System eintragen. Das Zertifikat wurde dennoch gespeichert.');
75)       $certinfo = parse_cert_details($cert);
76)       if ($certinfo['cn'] != $oldcert['cn'])
77)         system_failure("Das neue Zertifikat enthält abweichende Daten. Legen Sie bitte ein neues Zertifikat an.");
78) 
79)       refresh_cert($id, $certinfo, $cert);
80)       output('<p>'.internal_link('certs', 'Zurück zur Übersicht').'</p>');
81)       break;
82)   }
83) 
bernd Neue Zertifikatsverwaltung

bernd authored 14 years ago

84) }
85) elseif ($_GET['action'] == 'delete')
86) {
87)   $cert = cert_details($_GET['id']);
88)   $sure = user_is_sure();
89)   if ($sure === NULL)
90)   {
91)     are_you_sure("action=delete&id={$cert['id']}", "Soll das Zertifikat für »{$cert['subject']}« (gültig von {$cert['valid_from']} bis {$cert['valid_until']}) wirklich entfernt werden?");
92)   }
93)   elseif ($sure === false)
94)   {
95)     header('Location: certs');
96)     die();
97)   }
98)   elseif ($sure === true)
99)   { 
100)     delete_cert($cert['id']);
101)     header('Location: certs');
102)     die();
103)   }
104) }
bernd CSR-Erstellung

bernd authored 14 years ago

105) elseif ($_GET['action'] == 'deletecsr')
106) {
107)   $csr = csr_details($_GET['id']);
108)   $sure = user_is_sure();
109)   if ($sure === NULL)
110)   {
111)     are_you_sure("action=deletecsr&id={$csr['id']}", "Soll der CSR für »{$csr['hostname']}« ({$csr['bits']} Bits, erstellt am {$csr['created']}) wirklich entfernt werden?");
112)   }
113)   elseif ($sure === false)
114)   {
115)     header('Location: certs');
116)     die();
117)   }
118)   elseif ($sure === true)
119)   { 
120)     delete_csr($csr['id']);
121)     header('Location: certs');
122)     die();
123)   }
124) }
125) elseif ($_GET['action'] == 'newcsr')
126) {
127)   $cn = $_POST['commonname'];
128)   $bitlength = $_POST['bitlength'];
129)   
130)   $wildcard = ! (count(explode('.', $cn)) > 2);
131)   $id = save_csr($cn, $bitlength, $wildcard);
132) 
133)   header("Location: showcert?mode=csr&id={$id}");
134)   die();
135) }