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 |