0ba4f0f1d39c01f8f5f80580cd2da183a6960d55
bernd Neue Zertifikatsverwaltung

bernd authored 15 years ago

1) <?php
2) 
3) require_once('inc/base.php');
bernd CSR-Erstellung

bernd authored 15 years ago

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

bernd authored 15 years ago

5) 
6) define("CERT_OK", 0);
7) define("CERT_INVALID", 1);
8) define("CERT_NOCHAIN", 2);
9) 
10) function user_certs()
11) {
12)   $uid = (int) $_SESSION['userinfo']['uid'];
13)   $result = db_query("SELECT id, valid_from, valid_until, subject, cn FROM vhosts.certs WHERE uid=${uid}");
14)   $ret = array();
15)   while ($i = mysql_fetch_assoc($result))
16)     $ret[] = $i;
17)   DEBUG($ret);
18)   return $ret;
19) }
20) 
bernd CSR-Erstellung

bernd authored 15 years ago

21) function user_csr()
22) {
23)   $uid = (int) $_SESSION['userinfo']['uid'];
24)   $result = db_query("SELECT id, created, hostname, bits FROM vhosts.csr WHERE uid=${uid}");
25)   $ret = array();
26)   while ($i = mysql_fetch_assoc($result))
27)     $ret[] = $i;
28)   DEBUG($ret);
29)   return $ret;
30) }
bernd Neue Zertifikatsverwaltung

bernd authored 15 years ago

31) 
32) function cert_details($id)
33) {
34)   $id = (int) $id;
35)   $uid = (int) $_SESSION['userinfo']['uid'];
36)   
bernd CSR-Erstellung

bernd authored 15 years ago

37)   $result = db_query("SELECT id, lastchange, valid_from, valid_until, subject, cn, cert, `key` FROM vhosts.certs WHERE uid={$uid} AND id={$id}");
bernd Neue Zertifikatsverwaltung

bernd authored 15 years ago

38)   if (mysql_num_rows($result) != 1)
bernd Cert-Refresh

bernd authored 15 years ago

39)     system_failure("Ungültiges Zertifikat #{$id}");
bernd Neue Zertifikatsverwaltung

bernd authored 15 years ago

40)   return mysql_fetch_assoc($result);
41) }
42) 
43) 
bernd CSR-Erstellung

bernd authored 15 years ago

44) function csr_details($id)
45) {
46)   $id = (int) $id;
47)   $uid = (int) $_SESSION['userinfo']['uid'];
48)   
49)   $result = db_query("SELECT id, created, hostname, bits, csr, `key` FROM vhosts.csr WHERE uid={$uid} AND id={$id}");
50)   if (mysql_num_rows($result) != 1)
51)     system_failure("Ungültiger CSR");
52)   return mysql_fetch_assoc($result);
53) }
54) 
55) 
bernd Neue Zertifikatsverwaltung

bernd authored 15 years ago

56) function get_available_CAs()
57) {
58)   $path = '/etc/apache2/certs/cabundle/';
59)   $ret = glob($path.'*.pem');
60)   if (! $ret)
61)     system_failure("Konnte die CA-Zertifikate nicht laden");
62)   DEBUG($ret);
63)   return $ret;
64) }
65) 
66) 
67) function validate_certificate($cert, $key)
68) {  
69)   if (openssl_x509_check_private_key($cert, $key) !== true)
70)   {
71)     DEBUG("Zertifikat und Key passen nicht zusammen");
72)     return CERT_INVALID;
73)   }
74) 
75)   $cacerts = get_available_CAs();
76) 
77)   if (openssl_x509_checkpurpose($cert, X509_PURPOSE_SSL_SERVER, $cacerts) !== true)
78)   { 
79)     DEBUG('certificate was not validated as a server certificate with the available chain');
80)     return CERT_NOCHAIN;
81)   }
82) 
83)   return CERT_OK;
84) }
85) 
86) 
87) function parse_cert_details($cert)
88) {
89)   $certdata = openssl_x509_parse($cert, true);
90)   /* 
91) name => /CN=*.bwurst.org
92) validFrom_time_t => 1204118790
93) validTo_time_t => 1267190790
94) 
95) 
96)   */
97)  
98)   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']));
99) }
100) 
101) 
102) function save_cert($info, $cert, $key)
103) {
hanno zertifikate und keys export...

hanno authored 15 years ago

104)   openssl_pkey_export($key, $key);
105)   openssl_x509_export($cert, $cert);
bernd Neue Zertifikatsverwaltung

bernd authored 15 years ago

106)   $subject = mysql_real_escape_string(filter_input_general($info['subject']));
107)   $cn = mysql_real_escape_string(filter_input_general($info['cn']));
108)   $valid_from = mysql_real_escape_string($info['valid_from']);
109)   $valid_until = mysql_real_escape_string($info['valid_until']);
110)   $cert = mysql_real_escape_string($cert);
111)   $key = mysql_real_escape_string($key);
112)   $uid = (int) $_SESSION['userinfo']['uid'];
113) 
114)   db_query("INSERT INTO vhosts.certs (uid, subject, cn, valid_from, valid_until, cert, `key`) VALUES ({$uid}, '{$subject}', '{$cn}', '{$valid_from}', '{$valid_until}', '{$cert}', '{$key}')");
115) }
116) 
bernd Cert-Refresh

bernd authored 15 years ago

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

bernd authored 15 years ago

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

bernd authored 15 years ago

119) {
hanno zertifikate und keys export...

hanno authored 15 years ago

120)   openssl_x509_export($cert, $cert);
bernd Cert-Refresh

bernd authored 15 years ago

121)   $id = (int) $id;
122)   $oldcert = cert_details($id);
123)   $cert = mysql_real_escape_string($cert);
124)   
125)   $valid_from = mysql_real_escape_string($info['valid_from']);
126)   $valid_until = mysql_real_escape_string($info['valid_until']);
127) 
bernd neue Bilder, mehr SSL-Zerti...

bernd authored 15 years ago

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

hanno authored 15 years ago

129)   if ($key) {
130)     openssl_pkey_export($key, $key);
bernd neue Bilder, mehr SSL-Zerti...

bernd authored 15 years ago

131)     $keyop = ", `key`='".mysql_real_escape_string($key)."'";
hanno zertifikate und keys export...

hanno authored 15 years ago

132)   }
bernd neue Bilder, mehr SSL-Zerti...

bernd authored 15 years ago

133)   db_query("UPDATE vhosts.certs SET cert='{$cert}'{$keyop}, valid_from='{$valid_from}', valid_until='{$valid_until}' WHERE id={$id} LIMIT 1");
bernd Cert-Refresh

bernd authored 15 years ago

134) }
135) 
136) 
bernd Neue Zertifikatsverwaltung

bernd authored 15 years ago

137) function delete_cert($id)
138) {
139)   $uid = (int) $_SESSION['userinfo']['uid'];
140)   $id = (int) $id;
141)   
142)   db_query("DELETE FROM vhosts.certs WHERE uid={$uid} AND id={$id} LIMIT 1");
143) }
144)