Bernd Wurst commited on 2013-01-27 16:43:23
Zeige 6 geänderte Dateien mit 40 Einfügungen und 79 Löschungen.
... | ... |
@@ -44,7 +44,11 @@ $form = ' |
44 | 44 |
|
45 | 45 |
'; |
46 | 46 |
|
47 |
-output(html_form('vhosts_certs_new', 'savecert', 'action=new&csr='.$csr['id'], $form)); |
|
47 |
+$replace = ''; |
|
48 |
+if ($csr['replace']) { |
|
49 |
+ $replace="&replace={$csr['replace']}"; |
|
50 |
+} |
|
51 |
+output(html_form('vhosts_certs_new', 'savecert', 'action=new&csr='.$csr['id'].$replace, $form)); |
|
48 | 52 |
|
49 | 53 |
|
50 | 54 |
|
... | ... |
@@ -39,7 +39,7 @@ if (count($certs) > 0) |
39 | 39 |
elseif ($c['valid_until'] <= date('Y-m-d', time()+(30*24*3600))) { |
40 | 40 |
$style=' style="background-color: #ff8;" '; |
41 | 41 |
} |
42 |
- output("<tr><td{$style}>".internal_link('showcert', $c['subject'], "mode=cert&id={$c['id']}")."</td><td{$style}>{$c['cn']}</td><td{$style}>{$c['valid_from']}</td><td{$style}>{$c['valid_until']}</td><td>".internal_link('refreshcert', '<img src="'.$prefix.'images/refresh.png" title="Neue Version des Zertifikats einspielen" />', 'id='.$c['id'])."   ".internal_link('savecert', '<img src="'.$prefix.'images/delete.png" />', 'action=delete&id='.$c['id'])."</td></tr>"); |
|
42 |
+ output("<tr><td{$style}>".internal_link('showcert', $c['subject'], "mode=cert&id={$c['id']}")."</td><td{$style}>{$c['cn']}</td><td{$style}>{$c['valid_from']}</td><td{$style}>{$c['valid_until']}</td><td>".internal_link('newcert', '<img src="'.$prefix.'images/refresh.png" title="Neue Version des Zertifikats einspielen" />', 'replace='.$c['id'])."   ".internal_link('savecert', '<img src="'.$prefix.'images/delete.png" />', 'action=delete&id='.$c['id'])."</td></tr>"); |
|
43 | 43 |
} |
44 | 44 |
output("</table>"); |
45 | 45 |
} |
... | ... |
@@ -48,13 +48,14 @@ else |
48 | 48 |
output('<p><em>Bisher haben Sie keine Zertifikate eingetragen</em></p>'); |
49 | 49 |
} |
50 | 50 |
|
51 |
-addnew('newcert', 'Neues Zertifikat eintragen'); |
|
51 |
+addnew('newcert', 'Neues Zertifikat erzeugen / eintragen'); |
|
52 |
+ |
|
52 | 53 |
|
53 |
-output('<h3>offene CSRs</h3>'); |
|
54 | 54 |
|
55 | 55 |
$csr = user_csr(); |
56 | 56 |
if (count($csr) > 0) |
57 | 57 |
{ |
58 |
+ output('<h3>offene CSRs</h3>'); |
|
58 | 59 |
output("<table><tr><th>Host-/Domainname</th><th>Bitlänge</th><th>Erzeugt am</th><th> </th></tr>"); |
59 | 60 |
foreach ($csr AS $c) |
60 | 61 |
{ |
... | ... |
@@ -62,17 +63,7 @@ if (count($csr) > 0) |
62 | 63 |
} |
63 | 64 |
output("</table>"); |
64 | 65 |
} |
65 |
-else |
|
66 |
-{ |
|
67 |
- output('<p><em>Es gibt keine offenen CSRs</em></p>'); |
|
68 |
-} |
|
69 |
- |
|
70 |
- |
|
71 |
-output(' |
|
72 |
-<p>Wenn Sie ein einfaches Zertifikat benötigen, können Sie mit Hilfe dieser Funktion einen CSR (»certificate signing request«) |
|
73 |
-erstellen, mit dem Sie Ihr endgültiges Zertifikat beantragen können.</p>'); |
|
74 | 66 |
|
75 |
-addnew('newcsr', 'Neuen CSR erzeugen'); |
|
76 | 67 |
|
77 | 68 |
|
78 | 69 |
|
... | ... |
@@ -60,7 +60,7 @@ function csr_details($id) |
60 | 60 |
$id = (int) $id; |
61 | 61 |
$uid = (int) $_SESSION['userinfo']['uid']; |
62 | 62 |
|
63 |
- $result = db_query("SELECT id, created, hostname, bits, csr, `key` FROM vhosts.csr WHERE uid={$uid} AND id={$id}"); |
|
63 |
+ $result = db_query("SELECT id, created, hostname, bits, `replace`, csr, `key` FROM vhosts.csr WHERE uid={$uid} AND id={$id}"); |
|
64 | 64 |
if (mysql_num_rows($result) != 1) |
65 | 65 |
system_failure("Ungültiger CSR"); |
66 | 66 |
return mysql_fetch_assoc($result); |
... | ... |
@@ -353,7 +353,7 @@ commonName_default = {$cn} |
353 | 353 |
|
354 | 354 |
|
355 | 355 |
|
356 |
-function save_csr($cn, $bits, $wildcard=true) |
|
356 |
+function save_csr($cn, $bits, $wildcard=true, $replace=NULL) |
|
357 | 357 |
{ |
358 | 358 |
if (! $cn) { |
359 | 359 |
system_failure("Sie müssen einen Domainname eingeben!"); |
... | ... |
@@ -368,9 +368,10 @@ function save_csr($cn, $bits, $wildcard=true) |
368 | 368 |
$uid = (int) $_SESSION['userinfo']['uid']; |
369 | 369 |
$cn = mysql_real_escape_string(filter_input_hostname($cn)); |
370 | 370 |
$bits = (int) $bits; |
371 |
+ $replace = (int) $replace; |
|
371 | 372 |
$csr = mysql_real_escape_string($csr); |
372 | 373 |
$key = mysql_real_escape_string($key); |
373 |
- db_query("INSERT INTO vhosts.csr (uid, hostname, bits, csr, `key`) VALUES ({$uid}, '{$cn}', {$bits}, '{$csr}', '{$key}')"); |
|
374 |
+ db_query("INSERT INTO vhosts.csr (uid, hostname, bits, `replace`, csr, `key`) VALUES ({$uid}, '{$cn}', {$bits}, {$replace}, '{$csr}', '{$key}')"); |
|
374 | 375 |
$id = mysql_insert_id(); |
375 | 376 |
return $id; |
376 | 377 |
} |
... | ... |
@@ -23,10 +23,10 @@ if (isset($_REQUEST['replace'])) |
23 | 23 |
{ |
24 | 24 |
$cert = cert_details($_REQUEST['replace']); |
25 | 25 |
$oldcert = $cert['id']; |
26 |
- $hint = "<p class=\"warning\"><strong>Hinweis:</strong> Dieses Zertifkkat soll als Ersatz für ein bestehendes Zertifikat eingetragen werden. Dabei wird jede Benutzung des alten Zertifikats durch das neue ersetzt. Das alte Zertifikat wird dann umgehend gelöscht.<p> |
|
26 |
+ $hint = "<div style=\"border: 2px solid red; padding: 1em; margin: 1em;\"<p><strong>Hinweis:</strong> Dieses Zertifikat soll als Ersatz für ein bestehendes Zertifikat eingetragen werden. Dabei wird jede Benutzung des alten Zertifikats durch das neue ersetzt. Das alte Zertifikat wird dann umgehend gelöscht.<p> |
|
27 | 27 |
|
28 | 28 |
<p><strong>Daten des alten Zertifikats:</strong></p> |
29 |
-<p><strong>CN:</strong> {$cert['cn']}<br /><strong>Gültigkeit:</strong> {$cert['valid_from']} - {$cert['valid_until']}</p>"; |
|
29 |
+<p><strong>CN:</strong> {$cert['cn']}<br /><strong>Gültigkeit:</strong> {$cert['valid_from']} - {$cert['valid_until']}</p></div>"; |
|
30 | 30 |
|
31 | 31 |
} |
32 | 32 |
|
... | ... |
@@ -35,13 +35,26 @@ $section = 'vhosts_certs'; |
35 | 35 |
title('Neues Server-Zertifikat hinzufügen'); |
36 | 36 |
|
37 | 37 |
|
38 |
-output('<p>Sie können Ihr eigenes SSL-Zertifikat hinterlegen, das Sie dann für eine oder mehrere Webserver-Konfigurationen verwenden können.</p> |
|
38 |
+output($hint.' |
|
39 |
+<h4>CSR automatisch erzeugen</h4> |
|
40 |
+<p>Mit unserem CSR-Generator können Sie einen Certificate-signing-request (CSR) automatisch erzeugen lassen. Nutzen Sie diese Möglichkeit bitte nur, wenn Sie ein so genanntes "Domain validated"-Zertifikat beantragen werden, das keine persönlichen Daten bzw. Firmendaten enthält. Kostenlose Zertifikate von CAcert oder StartSSL können Sie mit dieser Funktion erzeugen.</p>'); |
|
41 |
+ |
|
42 |
+if ($oldcert) { |
|
43 |
+ $cn = urlencode($cert['cn']); |
|
44 |
+ addnew('savecert', "Einen neuen CSR für {$cert['cn']} erzeugen lassen", "action=newcsr&commonname={$cn}&replace={$oldcert}"); |
|
45 |
+} else { |
|
46 |
+ addnew('newcsr', 'CSR automatisch erzeugen lassen'); |
|
47 |
+} |
|
48 |
+ |
|
49 |
+ |
|
50 |
+output('<h4>Vorhandenes Zertifikat eintragen</h4> |
|
51 |
+<p>Sie können Ihr eigenes SSL-Zertifikat hinterlegen, das Sie dann für eine oder mehrere Webserver-Konfigurationen verwenden können.</p> |
|
39 | 52 |
<p>Sie benötigen dazu mindestens ein <strong>Zertifikat</strong> und einen <strong>privaten Schlüssel</strong> (ohne Passwort!). Alle Daten müssen im <strong>PEM-Format</strong> vorliegen, also in etwa die Form</p> |
40 | 53 |
<pre>-----BEGIN CERTIFICATE----- |
41 | 54 |
... |
42 | 55 |
-----END CERTIFICATE-----</pre> |
43 | 56 |
<p>aufweisen. Sind die genannten Vorausetzungen erfüllt, können Sie Ihre Zertifikats-Daten einfach in untenstehendes Formular eingeben.</p> |
44 |
-'.$hint); |
|
57 |
+'); |
|
45 | 58 |
|
46 | 59 |
|
47 | 60 |
$form = ' |
... | ... |
@@ -1,55 +0,0 @@ |
1 |
-<?php |
|
2 |
-/* |
|
3 |
-This file belongs to the Webinterface of schokokeks.org Hosting |
|
4 |
- |
|
5 |
-Written 2008-2013 by schokokeks.org Hosting, namely |
|
6 |
- Bernd Wurst <bernd@schokokeks.org> |
|
7 |
- Hanno Böck <hanno@schokokeks.org> |
|
8 |
- |
|
9 |
-To the extent possible under law, the author(s) have dedicated all copyright and related and neighboring rights to this software to the public domain worldwide. This software is distributed without any warranty. |
|
10 |
- |
|
11 |
-You should have received a copy of the CC0 Public Domain Dedication along with this software. If not, see |
|
12 |
-http://creativecommons.org/publicdomain/zero/1.0/ |
|
13 |
- |
|
14 |
-Nevertheless, in case you use a significant part of this code, we ask (but not require, see the license) that you keep the authors' names in place and return your changes to the public. We would be especially happy if you tell us what you're going to do with this code. |
|
15 |
-*/ |
|
16 |
- |
|
17 |
-require_once('certs.php'); |
|
18 |
-require_role(ROLE_SYSTEMUSER); |
|
19 |
- |
|
20 |
- |
|
21 |
-$section = "vhosts_certs"; |
|
22 |
-title("Neue Version eines Zertifikats einspielen"); |
|
23 |
- |
|
24 |
-$cert = cert_details($_REQUEST['id']); |
|
25 |
- |
|
26 |
-output("<p>Ein bereits vorhandenes Zetifikat können Sie (z.B. wenn es bald abläuft) durch eine neue Version des selben |
|
27 |
-Zertifikats ersetzen. Die meisten Zertifizierungsstellen bieten diese Funktion an ohne dass ein neuer CSR erzeugt |
|
28 |
-werden muss. Der private Schlüssel wird dabei erhalten und kann unverändert weiter benutzt werden.</p> |
|
29 |
- |
|
30 |
-<p>Bitte stellen Sie sicher, dass es sich um das richtige Zertifikat handelt. Das bisherige Zertifikat wurde |
|
31 |
-ausgestellt als <strong>{$cert['subject']}</strong>. Nur das dazu passende Zertifikat wird akzeptiert.</p> |
|
32 |
- |
|
33 |
-<p>Möchten Sie das Zertifikat durch ein gänzlich neues Zertifikat mit neuem privaten Schlüssel ersetzen, so |
|
34 |
-folgen Sie bitte diesem Link: ".internal_link('newcert', 'Neues Zertifikat als Ersatz für dieses Zertifikat |
|
35 |
-hochladen', 'replace='.$cert['id'])."</p> |
|
36 |
- |
|
37 |
-"); |
|
38 |
- |
|
39 |
-$form = ' |
|
40 |
-<h4>neues Zertifikat:</h4> |
|
41 |
-<p><textarea name="cert" rows="10" cols="70"></textarea></p> |
|
42 |
- |
|
43 |
-<p><input type="submit" value="Speichern" /></p> |
|
44 |
- |
|
45 |
-'; |
|
46 |
- |
|
47 |
-output(html_form('vhosts_certs_refresh', 'savecert', 'action=refresh&id='.$cert['id'], $form)); |
|
48 |
- |
|
49 |
- |
|
50 |
- |
|
51 |
- |
|
52 |
- |
|
53 |
- |
|
54 |
- |
|
55 |
- |
... | ... |
@@ -149,11 +149,18 @@ elseif ($_GET['action'] == 'deletecsr') |
149 | 149 |
} |
150 | 150 |
elseif ($_GET['action'] == 'newcsr') |
151 | 151 |
{ |
152 |
- $cn = $_POST['commonname']; |
|
153 |
- $bitlength = $_POST['bitlength']; |
|
152 |
+ $replace = NULL; |
|
153 |
+ if (isset($_REQUEST['replace'])) { |
|
154 |
+ $replace = $_REQUEST['replace']; |
|
155 |
+ } |
|
156 |
+ $cn = $_REQUEST['commonname']; |
|
157 |
+ $bitlength = 4096; |
|
158 |
+ if (isset($_REQUEST['bitlength'])) { |
|
159 |
+ $bitlength = $_REQUEST['bitlength']; |
|
160 |
+ } |
|
154 | 161 |
|
155 | 162 |
$wildcard = ! (count(explode('.', $cn)) > 2); |
156 |
- $id = save_csr($cn, $bitlength, $wildcard); |
|
163 |
+ $id = save_csr($cn, $bitlength, $wildcard, $replace); |
|
157 | 164 |
|
158 | 165 |
header("Location: showcert?mode=csr&id={$id}"); |
159 | 166 |
die(); |
160 | 167 |