bernd commited on 2010-12-31 05:58:06
Zeige 1 geänderte Dateien mit 28 Einfügungen und 4 Löschungen.
git-svn-id: https://svn.schokokeks.org/repos/tools/webinterface/trunk@1868 87cf0b9e-d624-0410-a070-f6ee81989793
... | ... |
@@ -67,6 +67,12 @@ function get_available_CAs() |
67 | 67 |
function get_chain($cert) |
68 | 68 |
{ |
69 | 69 |
$certdata = openssl_x509_parse($cert, true); |
70 |
+ if ($certdata === FALSE) { |
|
71 |
+ system_failure("Das Zertifikat konnte nicht gelesen werden"); |
|
72 |
+ } |
|
73 |
+ if (! isset($certdata['issuer']['CN'])) { |
|
74 |
+ return NULL; |
|
75 |
+ } |
|
70 | 76 |
$issuer = mysql_real_escape_string($certdata['issuer']['CN']); |
71 | 77 |
$result = db_query("SELECT id FROM vhosts.certchain WHERE cn='{$issuer}'"); |
72 | 78 |
if (mysql_num_rows($result) > 0) |
... | ... |
@@ -81,16 +87,34 @@ function get_chain($cert) |
81 | 87 |
|
82 | 88 |
function validate_certificate($cert, $key) |
83 | 89 |
{ |
84 |
- $certinfo = openssl_pkey_get_details(openssl_get_publickey($cert)); |
|
90 |
+ // Lade private key |
|
91 |
+ $seckey = openssl_get_privatekey($key); |
|
92 |
+ if ($seckey === FALSE) { |
|
93 |
+ system_failure("Der private Schlüssel konnte (ohne Passwort) nicht gelesen werden."); |
|
94 |
+ } |
|
95 |
+ // Lade public key |
|
96 |
+ $pubkey = openssl_get_publickey($cert); |
|
97 |
+ if ($pubkey === FALSE) { |
|
98 |
+ system_failure("In dem eingetragenen Zertifikat wurde kein öffentlicher Schlüssel gefunden."); |
|
99 |
+ } |
|
100 |
+ // Parse Details über den pubkey |
|
101 |
+ $certinfo = openssl_pkey_get_details($pubkey); |
|
85 | 102 |
DEBUG($certinfo); |
86 |
- if ($certinfo['bits'] < 2048) { |
|
87 |
- warning("Dieser Schlüssel hat eine sehr geringe Bitlänge und ist daher als nicht besonders sicher einzustufen!"); |
|
103 |
+ if ($certinfo === FALSE) { |
|
104 |
+ system_failure("Der öffentliche Schlüssel des Zertifikats konnte nicht gelesen werden"); |
|
88 | 105 |
} |
89 |
- if ($certinfo['type'] != OPENSSL_KEYTYPE_RSA && $certinfo['type'] != OPENSSL_KEYTYPE_DSA) { |
|
106 |
+ |
|
107 |
+ // Apache unterstützt nur Schlüssel vom Typ RSA oder DSA |
|
108 |
+ if (! in_array($certinfo['type'], array(OPENSSL_KEYTYPE_RSA, OPENSSL_KEYTYPE_DSA))) { |
|
90 | 109 |
system_failure("Dieser Schlüssel nutzt einen nicht unterstützten Algorithmus."); |
91 | 110 |
} |
92 | 111 |
|
112 |
+ // Bei ECC-Keys treten kürzere Schlüssellängen auf, die können wir aktuell aber sowieso nicht unterstützen |
|
113 |
+ if ($certinfo['bits'] < 2048) { |
|
114 |
+ warning("Dieser Schlüssel hat eine sehr geringe Bitlänge und ist daher als nicht besonders sicher einzustufen!"); |
|
115 |
+ } |
|
93 | 116 |
|
117 |
+ // Prüfe ob Key und Zertifikat zusammen passen |
|
94 | 118 |
if (openssl_x509_check_private_key($cert, $key) !== true) |
95 | 119 |
{ |
96 | 120 |
DEBUG("Zertifikat und Key passen nicht zusammen"); |
97 | 121 |