Bernd Wurst commited on 2015-11-30 13:17:38
Zeige 2 geänderte Dateien mit 30 Einfügungen und 4 Löschungen.
... | ... |
@@ -48,12 +48,23 @@ function cert_details($id) |
48 | 48 |
$id = (int) $id; |
49 | 49 |
$uid = (int) $_SESSION['userinfo']['uid']; |
50 | 50 |
|
51 |
- $result = db_query("SELECT id, lastchange, valid_from, valid_until, subject, cn, cert, `key` FROM vhosts.certs WHERE uid=:uid AND id=:id", array(":uid" => $uid, ":id" => $id)); |
|
51 |
+ $result = db_query("SELECT id, lastchange, valid_from, valid_until, subject, cn, chain, cert, `key` FROM vhosts.certs WHERE uid=:uid AND id=:id", array(":uid" => $uid, ":id" => $id)); |
|
52 | 52 |
if ($result->rowCount() != 1) |
53 | 53 |
system_failure("Ungültiges Zertifikat #{$id}"); |
54 | 54 |
return $result->fetch(); |
55 | 55 |
} |
56 | 56 |
|
57 |
+function cert_is_letsencrypt($id) |
|
58 |
+{ |
|
59 |
+ $details = cert_details($id); |
|
60 |
+ if (strstr($details['subject'], 'happy hacker fake CA') || |
|
61 |
+ strstr($details['subject'], "Let's Encrypt Authority X1") || |
|
62 |
+ $details['chain'] == 18) { |
|
63 |
+ return true; |
|
64 |
+ } |
|
65 |
+ return false; |
|
66 |
+} |
|
67 |
+ |
|
57 | 68 |
|
58 | 69 |
function csr_details($id) |
59 | 70 |
{ |
... | ... |
@@ -216,12 +216,27 @@ if ($_GET['action'] == 'edit') |
216 | 216 |
if ($aliaswww) { |
217 | 217 |
array_push($new_options, 'aliaswww'); |
218 | 218 |
} |
219 |
- if ($cert == -1) { |
|
219 |
+ $letsencrypt = ($cert == 0 ? false : ($cert == -1 || cert_is_letsencrypt($cert))); |
|
220 |
+ |
|
221 |
+ if ($letsencrypt) { |
|
220 | 222 |
array_push($new_options, 'letsencrypt'); |
221 | 223 |
if ($vhost['cert'] != 0) { |
222 |
- # FIXME: Wenn der User manuell von einem gültigen Cert auf "letsencrypt" umgestellt hat, |
|
224 |
+ # Wenn der User manuell von einem gültigen Cert auf "letsencrypt" umgestellt hat, |
|
223 | 225 |
# dann sollte das alte Cert noch so lange eingetragen bleiben bis das neue da ist. |
224 |
- $cert = $vhost['cert'] |
|
226 |
+ $cert = $vhost['cert']; |
|
227 |
+ } elseif ($cert > 0) { |
|
228 |
+ # Das Cert was der user gewählt hat, ist von Lets encrypt |
|
229 |
+ # tu nix, $cert ist schon korrekt |
|
230 |
+ } else { |
|
231 |
+ # Wenn vorher kein Zertifikat aktiv war, dann setze jetzt auch keines. |
|
232 |
+ # Der letsencrypt-Automatismus macht das dann schon. |
|
233 |
+ $cert = 0; |
|
234 |
+ } |
|
235 |
+ } else { |
|
236 |
+ # Wenn kein Letsencrypt gewünscht ist, entferne die Letsencrypt-Option |
|
237 |
+ $key = array_search('letsencrypt',$new_options); |
|
238 |
+ if ($key !== false) { |
|
239 |
+ unset($new_options[$key]); |
|
225 | 240 |
} |
226 | 241 |
} |
227 | 242 |
|
228 | 243 |