bernd commited on 2010-07-27 17:29:24
Zeige 1 geänderte Dateien mit 24 Einfügungen und 3 Löschungen.
git-svn-id: https://svn.schokokeks.org/repos/tools/webinterface/trunk@1765 87cf0b9e-d624-0410-a070-f6ee81989793
... | ... |
@@ -64,6 +64,21 @@ function get_available_CAs() |
64 | 64 |
} |
65 | 65 |
|
66 | 66 |
|
67 |
+function get_chain($cert) |
|
68 |
+{ |
|
69 |
+ $certdata = openssl_x509_parse($cert, true); |
|
70 |
+ $issuer = mysql_real_escape_string($certdata['issuer']['CN']); |
|
71 |
+ $result = db_query("SELECT id FROM vhosts.certchain WHERE cn='{$issuer}'"); |
|
72 |
+ if (mysql_num_rows($result) > 0) |
|
73 |
+ { |
|
74 |
+ $c = mysql_fetch_assoc($result); |
|
75 |
+ //$chainfile = '/etc/apache2/certs/chains/'.$c['id'].'.pem'; |
|
76 |
+ DEBUG("identified fitting certificate chain #".$c['id']); |
|
77 |
+ return $c['id']; |
|
78 |
+ } |
|
79 |
+} |
|
80 |
+ |
|
81 |
+ |
|
67 | 82 |
function validate_certificate($cert, $key) |
68 | 83 |
{ |
69 | 84 |
if (openssl_x509_check_private_key($cert, $key) !== true) |
... | ... |
@@ -72,7 +87,12 @@ function validate_certificate($cert, $key) |
72 | 87 |
return CERT_INVALID; |
73 | 88 |
} |
74 | 89 |
|
75 |
- $cacerts = get_available_CAs(); |
|
90 |
+ $cacerts = array('/etc/ssl/certs'); |
|
91 |
+ $chain = get_chain($cert); |
|
92 |
+ if ($chain) |
|
93 |
+ { |
|
94 |
+ $cacerts[] = '/etc/apache2/certs/chains/'.$chain.'.pem'; |
|
95 |
+ } |
|
76 | 96 |
|
77 | 97 |
if (openssl_x509_checkpurpose($cert, X509_PURPOSE_SSL_SERVER, $cacerts) !== true) |
78 | 98 |
{ |
... | ... |
@@ -96,7 +116,7 @@ validTo_time_t => 1267190790 |
96 | 116 |
*/ |
97 | 117 |
|
98 | 118 |
//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 |
- return array('subject' => $certdata['subject']['CN'].' / '.$certdata['issuer']['O'], 'cn' => $certdata['subject']['CN'], 'valid_from' => date('Y-m-d', $certdata['validFrom_time_t']), 'valid_until' => date('Y-m-d', $certdata['validTo_time_t'])); |
|
119 |
+ return array('subject' => $certdata['subject']['CN'].' / '.$certdata['issuer']['O'], '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']); |
|
100 | 120 |
} |
101 | 121 |
|
102 | 122 |
|
... | ... |
@@ -108,11 +128,12 @@ function save_cert($info, $cert, $key) |
108 | 128 |
$cn = mysql_real_escape_string(filter_input_general($info['cn'])); |
109 | 129 |
$valid_from = mysql_real_escape_string($info['valid_from']); |
110 | 130 |
$valid_until = mysql_real_escape_string($info['valid_until']); |
131 |
+ $chain = maybe_null( get_chain($cert) ); |
|
111 | 132 |
$cert = mysql_real_escape_string($cert); |
112 | 133 |
$key = mysql_real_escape_string($key); |
113 | 134 |
$uid = (int) $_SESSION['userinfo']['uid']; |
114 | 135 |
|
115 |
- 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}')"); |
|
136 |
+ db_query("INSERT INTO vhosts.certs (uid, subject, cn, valid_from, valid_until, chain, cert, `key`) VALUES ({$uid}, '{$subject}', '{$cn}', '{$valid_from}', '{$valid_until}', {$chain}, '{$cert}', '{$key}')"); |
|
116 | 137 |
} |
117 | 138 |
|
118 | 139 |
|
119 | 140 |