cf54502a10b16c985ea28db17885d377226b6145
bernd Neue Zertifikatsverwaltung

bernd authored 15 years ago

1) <?php
Bernd Wurst Added license tags for CC0,...

Bernd Wurst authored 12 years ago

2) /*
3) This file belongs to the Webinterface of schokokeks.org Hosting
4) 
Bernd Wurst Copyright year update

Bernd Wurst authored 6 years ago

5) Written 2008-2018 by schokokeks.org Hosting, namely
Bernd Wurst Added license tags for CC0,...

Bernd Wurst authored 12 years ago

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) */
bernd Neue Zertifikatsverwaltung

bernd authored 15 years ago

16) 
17) require_once('inc/base.php');
bernd CSR-Erstellung

bernd authored 15 years ago

18) require_once('inc/security.php');
bernd Neue Zertifikatsverwaltung

bernd authored 15 years ago

19) 
20) define("CERT_OK", 0);
21) define("CERT_INVALID", 1);
22) define("CERT_NOCHAIN", 2);
23) 
24) function user_certs()
25) {
26)   $uid = (int) $_SESSION['userinfo']['uid'];
Bernd Wurst Einige Statements auf Prepa...

Bernd Wurst authored 10 years ago

27)   $result = db_query("SELECT id, valid_from, valid_until, subject, cn FROM vhosts.certs WHERE uid=? ORDER BY cn", array($uid));
bernd Neue Zertifikatsverwaltung

bernd authored 15 years ago

28)   $ret = array();
Bernd Wurst Umstellung auf PDO-Datenban...

Bernd Wurst authored 10 years ago

29)   while ($i = $result->fetch())
bernd Neue Zertifikatsverwaltung

bernd authored 15 years ago

30)     $ret[] = $i;
31)   DEBUG($ret);
32)   return $ret;
33) }
34) 
bernd CSR-Erstellung

bernd authored 15 years ago

35) function user_csr()
36) {
37)   $uid = (int) $_SESSION['userinfo']['uid'];
Bernd Wurst Einige Statements auf Prepa...

Bernd Wurst authored 10 years ago

38)   $result = db_query("SELECT id, created, hostname, bits FROM vhosts.csr WHERE uid=? ORDER BY hostname", array($uid));
bernd CSR-Erstellung

bernd authored 15 years ago

39)   $ret = array();
Bernd Wurst Umstellung auf PDO-Datenban...

Bernd Wurst authored 10 years ago

40)   while ($i = $result->fetch())
bernd CSR-Erstellung

bernd authored 15 years ago

41)     $ret[] = $i;
42)   DEBUG($ret);
43)   return $ret;
44) }
bernd Neue Zertifikatsverwaltung

bernd authored 15 years ago

45) 
Bernd Wurst Interface für Zertifikate i...

Bernd Wurst authored 8 years ago

46) function user_has_manual_certs()
47) {
48)   foreach (user_certs() as $c) {
49)     if (!cert_is_letsencrypt($c['id'])) {
50)       return true;
51)     }
52)   }
53)   foreach (user_csr() as $c) {
54)     return true;
55)   }
56) }
57) 
58) 
bernd Neue Zertifikatsverwaltung

bernd authored 15 years ago

59) function cert_details($id)
60) {
61)   $id = (int) $id;
62)   $uid = (int) $_SESSION['userinfo']['uid'];
63)   
Bernd Wurst Status der letsencrypt-Opti...

Bernd Wurst authored 9 years ago

64)   $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));
Bernd Wurst Umstellung auf PDO-Datenban...

Bernd Wurst authored 10 years ago

65)   if ($result->rowCount() != 1)
bernd Cert-Refresh

bernd authored 15 years ago

66)     system_failure("Ungültiges Zertifikat #{$id}");
Bernd Wurst Umstellung auf PDO-Datenban...

Bernd Wurst authored 10 years ago

67)   return $result->fetch();
bernd Neue Zertifikatsverwaltung

bernd authored 15 years ago

68) }
69) 
Bernd Wurst Status der letsencrypt-Opti...

Bernd Wurst authored 9 years ago

70) function cert_is_letsencrypt($id)
71) {
72)   $details = cert_details($id);
Bernd Wurst Erkenne LE-Zertifikat, wenn...

Bernd Wurst authored 8 years ago

73)   DEBUG($details);
Bernd Wurst Speichere und zeige Serienn...

Bernd Wurst authored 8 years ago

74)   if (strpos($details['subject'], "Let's Encrypt autogenerated") > 0) {
Bernd Wurst Status der letsencrypt-Opti...

Bernd Wurst authored 9 years ago

75)     return true;
76)   }
77)   return false;
78) }
79) 
bernd Neue Zertifikatsverwaltung

bernd authored 15 years ago

80) 
bernd CSR-Erstellung

bernd authored 15 years ago

81) function csr_details($id)
82) {
83)   $id = (int) $id;
84)   $uid = (int) $_SESSION['userinfo']['uid'];
85)   
Bernd Wurst Einige Statements auf Prepa...

Bernd Wurst authored 10 years ago

86)   $result = db_query("SELECT id, created, hostname, bits, `replace`, csr, `key` FROM vhosts.csr WHERE uid=:uid AND id=:id", array(":uid" => $uid, ":id" => $id));
Bernd Wurst Umstellung auf PDO-Datenban...

Bernd Wurst authored 10 years ago

87)   if ($result->rowCount() != 1)
bernd CSR-Erstellung

bernd authored 15 years ago

88)     system_failure("Ungültiger CSR");
Bernd Wurst Umstellung auf PDO-Datenban...

Bernd Wurst authored 10 years ago

89)   return $result->fetch();
bernd CSR-Erstellung

bernd authored 15 years ago

90) }
91) 
92) 
bernd Neue Zertifikatsverwaltung

bernd authored 15 years ago

93) function get_available_CAs()
94) {
95)   $path = '/etc/apache2/certs/cabundle/';
96)   $ret = glob($path.'*.pem');
97)   if (! $ret)
98)     system_failure("Konnte die CA-Zertifikate nicht laden");
99)   DEBUG($ret);
100)   return $ret;
101) }
102) 
103) 
bernd Cert-Chain erkennen und ben...

bernd authored 14 years ago

104) function get_chain($cert)
105) {
106)   $certdata = openssl_x509_parse($cert, true);
bernd Mehr Fehlerbehandlung für S...

bernd authored 13 years ago

107)   if ($certdata === FALSE) {
108)     system_failure("Das Zertifikat konnte nicht gelesen werden");
109)   }
110)   if (! isset($certdata['issuer']['CN'])) {
111)     return NULL;
112)   }
Bernd Wurst Einige Statements auf Prepa...

Bernd Wurst authored 10 years ago

113)   $result = db_query("SELECT id FROM vhosts.certchain WHERE cn=?", array($certdata['issuer']['CN']));
Bernd Wurst Umstellung auf PDO-Datenban...

Bernd Wurst authored 10 years ago

114)   if ($result->rowCount() > 0)
bernd Cert-Chain erkennen und ben...

bernd authored 14 years ago

115)   {
Bernd Wurst Umstellung auf PDO-Datenban...

Bernd Wurst authored 10 years ago

116)     $c = $result->fetch();
bernd Cert-Chain erkennen und ben...

bernd authored 14 years ago

117)     //$chainfile = '/etc/apache2/certs/chains/'.$c['id'].'.pem';
118)     DEBUG("identified fitting certificate chain #".$c['id']);
119)     return $c['id'];
120)   }
121) }
122) 
123) 
bernd Neue Zertifikatsverwaltung

bernd authored 15 years ago

124) function validate_certificate($cert, $key)
bernd Mehr Fehlerbehandlung für S...

bernd authored 13 years ago

125) { 
126)   // Lade private key 
127)   $seckey = openssl_get_privatekey($key);
128)   if ($seckey === FALSE) {
129)     system_failure("Der private Schlüssel konnte (ohne Passwort) nicht gelesen werden.");
130)   }
131)   // Lade public key
132)   $pubkey = openssl_get_publickey($cert);
133)   if ($pubkey === FALSE) {
134)     system_failure("In dem eingetragenen Zertifikat wurde kein öffentlicher Schlüssel gefunden.");
135)   }
136)   // Parse Details über den pubkey
137)   $certinfo = openssl_pkey_get_details($pubkey);
bernd Erlaube nur RSA- und DSA-Ze...

bernd authored 13 years ago

138)   DEBUG($certinfo);
bernd Mehr Fehlerbehandlung für S...

bernd authored 13 years ago

139)   if ($certinfo === FALSE) {
140)     system_failure("Der öffentliche Schlüssel des Zertifikats konnte nicht gelesen werden");
bernd Erlaube nur RSA- und DSA-Ze...

bernd authored 13 years ago

141)   }
bernd Mehr Fehlerbehandlung für S...

bernd authored 13 years ago

142) 
143)   // Apache unterstützt nur Schlüssel vom Typ RSA oder DSA
144)   if (! in_array($certinfo['type'], array(OPENSSL_KEYTYPE_RSA, OPENSSL_KEYTYPE_DSA))) {
bernd Erlaube nur RSA- und DSA-Ze...

bernd authored 13 years ago

145)     system_failure("Dieser Schlüssel nutzt einen nicht unterstützten Algorithmus.");
146)   }
147)     
bernd Mehr Fehlerbehandlung für S...

bernd authored 13 years ago

148)   // Bei ECC-Keys treten kürzere Schlüssellängen auf, die können wir aktuell aber sowieso nicht unterstützen
149)   if ($certinfo['bits'] < 2048) {
150)     warning("Dieser Schlüssel hat eine sehr geringe Bitlänge und ist daher als nicht besonders sicher einzustufen!");
151)   }
152) 
153)   // Prüfe ob Key und Zertifikat zusammen passen
bernd Neue Zertifikatsverwaltung

bernd authored 15 years ago

154)   if (openssl_x509_check_private_key($cert, $key) !== true)
155)   {
Bernd Wurst Ermögliche einen Zertifikat...

Bernd Wurst authored 10 years ago

156)     DEBUG("Zertifikat und Key passen nicht zusammen: ".openssl_x509_check_private_key($cert, $key));
bernd Neue Zertifikatsverwaltung

bernd authored 15 years ago

157)     return CERT_INVALID;
158)   }
159) 
bernd Cert-Chain erkennen und ben...

bernd authored 14 years ago

160)   $cacerts = array('/etc/ssl/certs');
Bernd Wurst use temporary file for vali...

Bernd Wurst authored 12 years ago

161)   $chain = (int) get_chain($cert);
bernd Cert-Chain erkennen und ben...

bernd authored 14 years ago

162)   if ($chain)
163)   {
Bernd Wurst Einige Statements auf Prepa...

Bernd Wurst authored 10 years ago

164)     $result = db_query("SELECT content FROM vhosts.certchain WHERE id=?", array($chain));
Bernd Wurst Umstellung auf PDO-Datenban...

Bernd Wurst authored 10 years ago

165)     $tmp = $result->fetch();
Bernd Wurst use temporary file for vali...

Bernd Wurst authored 12 years ago

166)     $chaincert = $tmp['content'];
167)     $chainfile = tempnam(sys_get_temp_dir(), 'webinterface');
168)     $f = fopen($chainfile, "w");
169)     fwrite($f, $chaincert);
170)     fclose($f);
171)     $cacerts[] = $chainfile;
bernd Cert-Chain erkennen und ben...

bernd authored 14 years ago

172)   }
bernd Neue Zertifikatsverwaltung

bernd authored 15 years ago

173) 
Bernd Wurst use temporary file for vali...

Bernd Wurst authored 12 years ago

174)   $valid = openssl_x509_checkpurpose($cert, X509_PURPOSE_SSL_SERVER, $cacerts);
175)   if ($chain) {
176)     unlink($chainfile);
177)   }
178)   if ($valid !== true)
bernd Neue Zertifikatsverwaltung

bernd authored 15 years ago

179)   { 
180)     DEBUG('certificate was not validated as a server certificate with the available chain');
181)     return CERT_NOCHAIN;
182)   }
183) 
184)   return CERT_OK;
185) }
186) 
187) 
188) function parse_cert_details($cert)
189) {
190)   $certdata = openssl_x509_parse($cert, true);
191)   /* 
192) name => /CN=*.bwurst.org
193) validFrom_time_t => 1204118790
194) validTo_time_t => 1267190790
195) 
196) 
197)   */
bernd Erlaube nur RSA- und DSA-Ze...

bernd authored 13 years ago

198)   DEBUG($certdata);
Bernd Wurst Verarbeite und Speichere SA...

Bernd Wurst authored 7 years ago

199)   DEBUG("SAN: ".$certdata['extensions']['subjectAltName']);
bernd Cert-Name ist Subject-CN un...

bernd authored 14 years ago

200)   //return array('subject' => $certdata['name'], 'cn' => $certdata['subject']['CN'], 'valid_from' => date('Y-m-d', $certdata['validFrom_time_t']), 'valid_until' => date('Y-m-d', $certdata['validTo_time_t']));
Bernd Wurst Letsencrypt vorbereitet und...

Bernd Wurst authored 9 years ago

201)   $issuer = $certdata['issuer']['CN'];
202)   if (isset($certdata['issuer']['O'])) {
203)     $issuer = $certdata['issuer']['O'];
204)   }
Bernd Wurst Verarbeite und Speichere SA...

Bernd Wurst authored 7 years ago

205)   $san = array();
206)   $raw_san = explode(', ', $certdata['extensions']['subjectAltName']);
207)   foreach ($raw_san as $name) {
208)     if (! substr($name, 0, 4) == 'DNS:') {
209)       warning('Unparsable SAN: '.$name);
210)       continue;
211)     }
212)     $san[] = str_replace('DNS:', '', $name);
213)   }
214)   $san = implode("\n", $san);
215)   DEBUG("SAN: <pre>".$san."</pre>");
216)   return array('subject' => $certdata['subject']['CN'].' / '.$issuer, 'cn' => $certdata['subject']['CN'], 'valid_from' => date('Y-m-d', $certdata['validFrom_time_t']), 'valid_until' => date('Y-m-d', $certdata['validTo_time_t']), 'issuer' => $certdata['issuer']['CN'], 'san' => $san);
bernd Neue Zertifikatsverwaltung

bernd authored 15 years ago

217) }
218) 
219) 
220) function save_cert($info, $cert, $key)
221) {
hanno zertifikate und keys export...

hanno authored 15 years ago

222)   openssl_pkey_export($key, $key);
223)   openssl_x509_export($cert, $cert);
bernd Neue Zertifikatsverwaltung

bernd authored 15 years ago

224)   $uid = (int) $_SESSION['userinfo']['uid'];
225) 
Bernd Wurst Verarbeite und Speichere SA...

Bernd Wurst authored 7 years ago

226)   db_query("INSERT INTO vhosts.certs (uid, subject, cn, san, valid_from, valid_until, chain, cert, `key`) VALUES (:uid, :subject, :cn, :san, :valid_from, :valid_until, :chain, :cert, :key)", 
227)         array(":uid" => $uid, ":subject" => filter_input_general($info['subject']), ":cn" => filter_input_general($info['cn']), ":san" => $info['san'], ":valid_from" => $info['valid_from'], 
Bernd Wurst Einige Statements auf Prepa...

Bernd Wurst authored 10 years ago

228)               ":valid_until" => $info['valid_until'], ":chain" => get_chain($cert), ":cert" => $cert, ":key" => $key));
bernd Neue Zertifikatsverwaltung

bernd authored 15 years ago

229) }
230) 
bernd Cert-Refresh

bernd authored 15 years ago

231) 
bernd neue Bilder, mehr SSL-Zerti...

bernd authored 15 years ago

232) function refresh_cert($id, $info, $cert, $key = NULL)
bernd Cert-Refresh

bernd authored 15 years ago

233) {
hanno zertifikate und keys export...

hanno authored 15 years ago

234)   openssl_x509_export($cert, $cert);
Bernd Wurst Ein maybe_null() entfernt

Bernd Wurst authored 10 years ago

235)   $chain = get_chain($cert);
bernd Bugfix: Beim Eintragen eine...

bernd authored 13 years ago

236) 
bernd Cert-Refresh

bernd authored 15 years ago

237)   $id = (int) $id;
238)   $oldcert = cert_details($id);
Bernd Wurst Einige Statements auf Prepa...

Bernd Wurst authored 10 years ago

239)   $args = array(":subject" => filter_input_general($info['subject']),
240)                 ":cn" => filter_input_general($info['cn']),
Bernd Wurst Verarbeite und Speichere SA...

Bernd Wurst authored 7 years ago

241)                 ":san" => $san,
Bernd Wurst Einige Statements auf Prepa...

Bernd Wurst authored 10 years ago

242)                 ":cert" => $cert,
243)                 ":valid_from" => $info['valid_from'],
244)                 ":valid_until" => $info['valid_until'],
245)                 ":chain" => get_chain($cert),
246)                 ":id" => $id);
247) 
bernd neue Bilder, mehr SSL-Zerti...

bernd authored 15 years ago

248)   $keyop = '';
hanno zertifikate und keys export...

hanno authored 15 years ago

249)   if ($key) {
250)     openssl_pkey_export($key, $key);
Bernd Wurst Einige Statements auf Prepa...

Bernd Wurst authored 10 years ago

251)     $keyop = ", `key`=:key";
252)     $args[":key"] = $key;
hanno zertifikate und keys export...

hanno authored 15 years ago

253)   }
Bernd Wurst Verarbeite und Speichere SA...

Bernd Wurst authored 7 years ago

254)   db_query("UPDATE vhosts.certs SET subject=:subject, cn=:cn, san=:san, cert=:cert{$keyop}, valid_from=:valid_from, valid_until=:valid_until, chain=:chain WHERE id=:id", $args);
bernd Cert-Refresh

bernd authored 15 years ago

255) }
256) 
257) 
bernd Neue Zertifikatsverwaltung

bernd authored 15 years ago

258) function delete_cert($id)
259) {
260)   $uid = (int) $_SESSION['userinfo']['uid'];
261)   $id = (int) $id;
262)   
Bernd Wurst Einige Statements auf Prepa...

Bernd Wurst authored 10 years ago

263)   db_query("DELETE FROM vhosts.certs WHERE uid=? AND id=?", array($uid, $id));
bernd Neue Zertifikatsverwaltung

bernd authored 15 years ago

264) }
265) 
bernd CSR-Erstellung

bernd authored 15 years ago

266) function delete_csr($id)
267) {
268)   $uid = (int) $_SESSION['userinfo']['uid'];
269)   $id = (int) $id;
270)   
Bernd Wurst Einige Statements auf Prepa...

Bernd Wurst authored 10 years ago

271)   db_query("DELETE FROM vhosts.csr WHERE uid=? AND id=?", array($uid, $id));
bernd CSR-Erstellung

bernd authored 15 years ago

272) }
273) 
274) 
Bernd Wurst * Ermögliche SAN bei CSRs *...

Bernd Wurst authored 9 years ago

275) function split_cn($cn)
276) {
277)   $domains = array();
278)   if (strstr($cn, ',') or strstr($cn, "\n")) {
279)     $domains = preg_split("/[, \n]+/", $cn);
280)     DEBUG("Domains:");
281)     DEBUG($domains);
282)   } else {
283)     $domains[] = $cn;
284)   }
285)   for ($i=0;$i!=count($domains);$i++) {
286)     $domains[$i] = filter_input_hostname($domains[$i], true);
287)   }
288)   return $domains;
289) }
290) 
bernd CSR-Erstellung

bernd authored 15 years ago

291) function create_csr($cn, $bits)
292) {
Bernd Wurst * Ermögliche SAN bei CSRs *...

Bernd Wurst authored 9 years ago

293)   $domains = split_cn($cn);
294)   $tmp = array();
295)   foreach ($domains as $dom) {
296)     $tmp[] = 'DNS:'.$dom;
297)   }
298)   $SAN = "[ v3_req ]\nsubjectAltName = ".implode(', ', $tmp);
299)   DEBUG($SAN);
300)   $cn = $domains[0];
bernd CSR-Erstellung

bernd authored 15 years ago

301)   $bits = (int) $bits;
302)   if ($bits == 0)
303)     $bits = 4096;
304) 
305)   $keyfile = tempnam(ini_get('upload_tmp_dir'), 'key');
306)   $csrfile = tempnam(ini_get('upload_tmp_dir'), 'csr');
307)   $config = tempnam(ini_get('upload_tmp_dir'), 'config');
308) 
309)   DEBUG("key: ".$keyfile." / csr: ".$csrfile." / config: ".$config);
310) 
311)   $c = fopen($config, "w");
312)   fwrite($c, "[req]
313) default_bits = {$bits}
314) default_keyfile = {$keyfile}
315) encrypt_key = no
316) distinguished_name      = req_distinguished_name
Bernd Wurst * Ermögliche SAN bei CSRs *...

Bernd Wurst authored 9 years ago

317) req_extensions = v3_req
bernd CSR-Erstellung

bernd authored 15 years ago

318) 
319) [ req_distinguished_name ]
320) countryName                     = Country Name (2 letter code)
Bernd Wurst Leere Vorgaben für CSR-Details

Bernd Wurst authored 10 years ago

321) countryName_default             = 
bernd CSR-Erstellung

bernd authored 15 years ago

322) stateOrProvinceName             = State or Province Name (full name)
Bernd Wurst Leere Vorgaben für CSR-Details

Bernd Wurst authored 10 years ago

323) stateOrProvinceName_default     = 
bernd CSR-Erstellung

bernd authored 15 years ago

324) localityName                    = Locality Name (eg, city)
Bernd Wurst Leere Vorgaben für CSR-Details

Bernd Wurst authored 10 years ago

325) localityName_default            = 
bernd CSR-Erstellung

bernd authored 15 years ago

326) 0.organizationName              = Organization Name (eg, company)
Bernd Wurst Leere Vorgaben für CSR-Details

Bernd Wurst authored 10 years ago

327) 0.organizationName_default      = 
bernd CSR-Erstellung

bernd authored 15 years ago

328) 
329) commonName = Common Name
330) commonName_default = {$cn}
Bernd Wurst * Ermögliche SAN bei CSRs *...

Bernd Wurst authored 9 years ago

331) {$SAN}
bernd CSR-Erstellung

bernd authored 15 years ago

332) ");
333)   fclose($c);
334) 
335)   $output = '';
hanno sha2 csrs

hanno authored 14 years ago

336)   $cmdline = "openssl req -sha256 -new -batch -config {$config} -out {$csrfile}";
bernd CSR-Erstellung

bernd authored 15 years ago

337)   $retval = 0;
338)   exec($cmdline, $output, $retval);
339)   DEBUG($output);
340)   DEBUG($retval);
341)   if ($retval != 0)
342)   {
bernd Bugfix: Beim Eintragen eine...

bernd authored 13 years ago

343)     system_failure("Die Erzeugung des CSR ist fehlgeschlagen. Ausgabe des OpenSSL-Befehls: ".print_r($output, true));
bernd CSR-Erstellung

bernd authored 15 years ago

344)   }
345)   
346)   $csr = file_get_contents($csrfile);
347)   $key = file_get_contents($keyfile);
348) 
349)   unlink($csrfile);
350)   unlink($keyfile);
351)   unlink($config);
352) 
353)   return array($csr, $key);
354) }
355) 
356) 
357) 
Bernd Wurst Wildcard-CSRs können jetzt...

Bernd Wurst authored 11 years ago

358) function save_csr($cn, $bits, $replace=NULL)
bernd CSR-Erstellung

bernd authored 15 years ago

359) {
bernd (Verständliche) Fehlermeldu...

bernd authored 13 years ago

360)   if (! $cn) {
361)     system_failure("Sie müssen einen Domainname eingeben!");
362)   }
Bernd Wurst * Ermögliche SAN bei CSRs *...

Bernd Wurst authored 9 years ago

363)   $domains = split_cn($cn);
364)   $cn = $domains[0];
Bernd Wurst Verarbeite und Speichere SA...

Bernd Wurst authored 7 years ago

365)   $san = implode("\n", $domains);
bernd CSR-Erstellung

bernd authored 15 years ago

366)   $csr = NULL;
367)   $key = NULL;
Bernd Wurst * Ermögliche SAN bei CSRs *...

Bernd Wurst authored 9 years ago

368)   list($csr, $key) = create_csr(implode(',',$domains), $bits);
bernd CSR-Erstellung

bernd authored 15 years ago

369)   
370)   $uid = (int) $_SESSION['userinfo']['uid'];
Bernd Wurst Verarbeite und Speichere SA...

Bernd Wurst authored 7 years ago

371)   db_query("INSERT INTO vhosts.csr (uid, hostname, san, bits, `replace`, csr, `key`) VALUES (:uid, :cn, :san, :bits, :replace, :csr, :key)",
372)            array(":uid" => $uid, ":cn" => $cn, ":san" => $san, ":bits" => $bits, 
Bernd Wurst Einige Statements auf Prepa...

Bernd Wurst authored 10 years ago

373)                  ":replace" => $replace, ":csr" => $csr, ":key" => $key));
374)   $id = db_insert_id();