Bernd Wurst commited on 2016-04-07 05:37:36
Zeige 5 geänderte Dateien mit 20 Einfügungen und 22 Löschungen.
... | ... |
@@ -31,15 +31,8 @@ require_once('inc/error.php'); |
31 | 31 |
require_once('inc/theme.php'); |
32 | 32 |
|
33 | 33 |
|
34 |
-function prepare_cert($cert) |
|
35 |
-{ |
|
36 |
- return str_replace(array('-----BEGIN CERTIFICATE-----', '-----END CERTIFICATE-----', ' ', "\n"), array(), $cert); |
|
37 |
-} |
|
38 |
- |
|
39 |
- |
|
40 | 34 |
function get_logins_by_cert($cert) |
41 | 35 |
{ |
42 |
- $cert = prepare_cert($cert); |
|
43 | 36 |
$result = db_query("SELECT type,username,startpage FROM system.clientcert WHERE cert=? ORDER BY type,username", array($cert)); |
44 | 37 |
if ($result->rowCount() < 1) |
45 | 38 |
return NULL; |
... | ... |
@@ -63,11 +56,13 @@ if (! isset($_SERVER['SSL_CLIENT_CERT']) && isset($_SERVER['REDIRECT_SSL_CLIENT_ |
63 | 56 |
if ($_SESSION['role'] != ROLE_ANONYMOUS && isset($_REQUEST['record']) && isset($_REQUEST['backto']) && check_path($_REQUEST['backto'])) |
64 | 57 |
{ |
65 | 58 |
DEBUG('recording client-cert'); |
66 |
- if (isset($_SERVER[$redirect.'SSL_CLIENT_CERT']) && isset($_SERVER[$redirect.'SSL_CLIENT_S_DN']) && isset($_SERVER[$redirect.'SSL_CLIENT_I_DN'])) |
|
59 |
+ if (isset($_SERVER[$redirect.'SSL_CLIENT_CERT']) && isset($_SERVER[$redirect.'SSL_CLIENT_S_DN']) && |
|
60 |
+ isset($_SERVER[$redirect.'SSL_CLIENT_I_DN']) && isset($_SERVER[$redirect.'SSL_CLIENT_M_SERIAL'])) |
|
67 | 61 |
{ |
68 |
- $_SESSION['clientcert_cert'] = prepare_cert($_SERVER[$redirect.'SSL_CLIENT_CERT']); |
|
62 |
+ $_SESSION['clientcert_cert'] = $_SERVER[$redirect.'SSL_CLIENT_CERT']; |
|
69 | 63 |
$_SESSION['clientcert_dn'] = $_SERVER[$redirect.'SSL_CLIENT_S_DN']; |
70 | 64 |
$_SESSION['clientcert_issuer'] = $_SERVER[$redirect.'SSL_CLIENT_I_DN']; |
65 |
+ $_SESSION['clientcert_serial'] = $_SERVER[$redirect.'SSL_CLIENT_M_SERIAL']; |
|
71 | 66 |
header('Location: '.$prefix.$_REQUEST['backto'].encode_querystring('')); |
72 | 67 |
die(); |
73 | 68 |
} |
... | ... |
@@ -109,7 +104,8 @@ else |
109 | 104 |
{ |
110 | 105 |
if (isset($_SERVER[$redirect.'SSL_CLIENT_CERT']) && |
111 | 106 |
isset($_SERVER[$redirect.'SSL_CLIENT_S_DN']) && $_SERVER[$redirect.'SSL_CLIENT_S_DN'] != '' && |
112 |
- isset($_SERVER[$redirect.'SSL_CLIENT_I_DN']) && $_SERVER[$redirect.'SSL_CLIENT_I_DN'] != '') { |
|
107 |
+ isset($_SERVER[$redirect.'SSL_CLIENT_I_DN']) && $_SERVER[$redirect.'SSL_CLIENT_I_DN'] != '' && |
|
108 |
+ isset($_SERVER[$redirect.'SSL_CLIENT_M_SERIAL']) && $_SERVER[$redirect.'SSL_CLIENT_M_SERIAL'] != '') { |
|
113 | 109 |
$ret = get_logins_by_cert($_SERVER[$redirect.'SSL_CLIENT_CERT']); |
114 | 110 |
if ($ret === NULL) { |
115 | 111 |
login_screen('Ihr Browser hat ein Client-Zertifikat gesendet, dieses ist aber noch nicht für den Zugang hinterlegt. Melden Sie sich bitte per Benutzername und Passwort an.'); |
... | ... |
@@ -31,6 +31,7 @@ if (isset($_GET['clear'])) |
31 | 31 |
unset($_SESSION['clientcert_cert']); |
32 | 32 |
unset($_SESSION['clientcert_dn']); |
33 | 33 |
unset($_SESSION['clientcert_issuer']); |
34 |
+ unset($_SESSION['clientcert_serial']); |
|
34 | 35 |
} |
35 | 36 |
|
36 | 37 |
$username = NULL; |
... | ... |
@@ -50,7 +51,8 @@ if (isset($_SESSION['clientcert_cert'])) |
50 | 51 |
output('<div style="margin: 1em; padding: 1em; border: 2px solid green;">'); |
51 | 52 |
output('<p>Es wurde folgendes Client-Zertifikat von Ihrem Browser gesendet:</p> |
52 | 53 |
<div style="margin-left: 2em;"><strong>DN:</strong> '.filter_input_general($_SESSION['clientcert_dn']).'<br /> |
53 |
-<strong>Aussteller-DN:</strong> '.filter_input_general($_SESSION['clientcert_issuer']).'</div> |
|
54 |
+<strong>Aussteller-DN:</strong> '.filter_input_general($_SESSION['clientcert_issuer']).'<br /> |
|
55 |
+<strong>Seriennummer:</strong> '.filter_input_general($_SESSION['clientcert_serial']).'</div> |
|
54 | 56 |
<p>Soll dieses Zertifikat für den Zugang für <strong>'.$username.'</strong> verwendet werden?</p>'); |
55 | 57 |
output(html_form('clientcert_add', 'certsave.php', 'action=new', '<p><input type="submit" name="submit" value="Ja, dieses Zertifikat einrichten" />   '.internal_link('cert', 'Nein', 'clear').'</p>')); |
56 | 58 |
output('</div>'); |
... | ... |
@@ -63,7 +65,7 @@ if ($certs != NULL) { |
63 | 65 |
output('<p>Sie haben bereits Zertifikate für den Zugang eingerichtet.</p> |
64 | 66 |
<ul>'); |
65 | 67 |
foreach ($certs AS $cert) { |
66 |
- output('<li>'.$cert['dn'].'<br /><em>ausgestellt von </em>'.$cert['issuer']); |
|
68 |
+ output('<li>'.$cert['dn'].' / Seriennummer '.$cert['serial'].'<br /><em>ausgestellt von </em>'.$cert['issuer']); |
|
67 | 69 |
output('<br />'.internal_link('certsave', 'Dieses Zertifikat löschen', 'action=delete&id='.$cert['id'])); |
68 | 70 |
output('</li>'); |
69 | 71 |
} |
... | ... |
@@ -26,12 +26,13 @@ if ($_GET['action'] == 'new') |
26 | 26 |
if (! isset($_SESSION['clientcert_cert'])) |
27 | 27 |
system_failure('Kein Zertifikat'); |
28 | 28 |
|
29 |
- add_clientcert($_SESSION['clientcert_cert'], $_SESSION['clientcert_dn'], $_SESSION['clientcert_issuer']); |
|
29 |
+ add_clientcert($_SESSION['clientcert_cert'], $_SESSION['clientcert_dn'], $_SESSION['clientcert_issuer'], $_SESSION['clientcert_serial']); |
|
30 | 30 |
|
31 | 31 |
// Räume session auf |
32 | 32 |
unset($_SESSION['clientcert_cert']); |
33 | 33 |
unset($_SESSION['clientcert_dn']); |
34 | 34 |
unset($_SESSION['clientcert_issuer']); |
35 |
+ unset($_SESSION['clientcert_serial']); |
|
35 | 36 |
header('Location: cert'); |
36 | 37 |
} |
37 | 38 |
elseif ($_GET['action'] == 'delete') |
... | ... |
@@ -53,7 +54,7 @@ elseif ($_GET['action'] == 'delete') |
53 | 54 |
$sure = user_is_sure(); |
54 | 55 |
if ($sure === NULL) |
55 | 56 |
{ |
56 |
- are_you_sure("action=delete&id={$cert['id']}", "Möchten Sie das Zertifikat »{$cert['dn']}« wirklich löschen?"); |
|
57 |
+ are_you_sure("action=delete&id={$cert['id']}", "Möchten Sie das Zertifikat »{$cert['dn']}« (Seriennummer {$cert['serial']}) wirklich löschen?"); |
|
57 | 58 |
} |
58 | 59 |
elseif ($sure === true) |
59 | 60 |
{ |
... | ... |
@@ -24,7 +24,6 @@ function do_ajax_cert_login() { |
24 | 24 |
|
25 | 25 |
function get_logins_by_cert($cert) |
26 | 26 |
{ |
27 |
- $cert = str_replace(array('-----BEGIN CERTIFICATE-----', '-----END CERTIFICATE-----', ' ', "\n"), array(), $cert); |
|
28 | 27 |
$result = db_query("SELECT type,username,startpage FROM system.clientcert WHERE cert=?", array($cert)); |
29 | 28 |
if ($result->rowCount() < 1) |
30 | 29 |
return NULL; |
... | ... |
@@ -42,7 +41,7 @@ function get_cert_by_id($id) |
42 | 41 |
$id = (int) $id; |
43 | 42 |
if ($id == 0) |
44 | 43 |
system_failure('no ID'); |
45 |
- $result = db_query("SELECT id,dn,issuer,cert,username,startpage FROM system.clientcert WHERE `id`=?", array($id)); |
|
44 |
+ $result = db_query("SELECT id,dn,issuer,serial,cert,username,startpage FROM system.clientcert WHERE `id`=?", array($id)); |
|
46 | 45 |
if ($result->rowCount() < 1) |
47 | 46 |
return NULL; |
48 | 47 |
$ret = $result->fetch(); |
... | ... |
@@ -55,7 +54,7 @@ function get_certs_by_username($username) |
55 | 54 |
{ |
56 | 55 |
if ($username == '') |
57 | 56 |
system_failure('empty username'); |
58 |
- $result = db_query("SELECT id,dn,issuer,cert,startpage FROM system.clientcert WHERE `username`=?", array($username)); |
|
57 |
+ $result = db_query("SELECT id,dn,issuer,serial,cert,startpage FROM system.clientcert WHERE `username`=?", array($username)); |
|
59 | 58 |
if ($result->rowCount() < 1) |
60 | 59 |
return NULL; |
61 | 60 |
while ($row = $result->fetch()) { |
... | ... |
@@ -65,7 +64,7 @@ function get_certs_by_username($username) |
65 | 64 |
} |
66 | 65 |
|
67 | 66 |
|
68 |
-function add_clientcert($certdata, $dn, $issuer, $startpage=NULL) |
|
67 |
+function add_clientcert($certdata, $dn, $issuer, $serial, $startpage=NULL) |
|
69 | 68 |
{ |
70 | 69 |
$type = NULL; |
71 | 70 |
$username = NULL; |
... | ... |
@@ -91,14 +90,15 @@ function add_clientcert($certdata, $dn, $issuer, $startpage=NULL) |
91 | 90 |
|
92 | 91 |
$args = array(":dn" => $dn, |
93 | 92 |
":issuer" => $issuer, |
93 |
+ ":serial" => $serial, |
|
94 | 94 |
":certdata" => $certdata, |
95 | 95 |
":type" => $type, |
96 | 96 |
":username" => $username, |
97 | 97 |
":startpage" => $startpage); |
98 | 98 |
DEBUG($args); |
99 | 99 |
|
100 |
- db_query("INSERT INTO system.clientcert (`dn`, `issuer`, `cert`, `type`, `username`, `startpage`) |
|
101 |
-VALUES (:dn, :issuer, :certdata, :type, :username, :startpage)", $args); |
|
100 |
+ db_query("INSERT INTO system.clientcert (`dn`, `issuer`, `serial`, `cert`, `type`, `username`, `startpage`) |
|
101 |
+VALUES (:dn, :issuer, :serial, :certdata, :type, :username, :startpage)", $args); |
|
102 | 102 |
|
103 | 103 |
} |
104 | 104 |
|
... | ... |
@@ -58,8 +58,7 @@ function cert_is_letsencrypt($id) |
58 | 58 |
{ |
59 | 59 |
$details = cert_details($id); |
60 | 60 |
DEBUG($details); |
61 |
- if ($details['chain'] == config('letsencrypt_chain') && |
|
62 |
- strpos($details['subject'], "Let's Encrypt autogenerated") > 0) { |
|
61 |
+ if (strpos($details['subject'], "Let's Encrypt autogenerated") > 0) { |
|
63 | 62 |
return true; |
64 | 63 |
} |
65 | 64 |
return false; |
66 | 65 |