Skip to content

Commit d614026

Browse files
author
Hans Hörberg
committed
Fix so the wsgi SP follows PEFIM.
1 parent 453061c commit d614026

File tree

3 files changed

+55
-3
lines changed

3 files changed

+55
-3
lines changed

example/sp-wsgi/pki/localhost.ca.crt

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,15 @@
1+
-----BEGIN CERTIFICATE-----
2+
MIICSTCCAbICAQEwDQYJKoZIhvcNAQELBQAwbTELMAkGA1UEBhMCc2UxCzAJBgNV
3+
BAgTAmFjMQ0wCwYDVQQHEwR1bWVhMRwwGgYDVQQKExNJVFMgVW1lYSBVbml2ZXJz
4+
aXR5MQ0wCwYDVQQLEwRESVJHMRUwEwYDVQQDEwxsb2NhbGhvc3QuY2EwHhcNMTQw
5+
MzE3MTY0MjM5WhcNMjQwMzE0MTY0MjM5WjBtMQswCQYDVQQGEwJzZTELMAkGA1UE
6+
CBMCYWMxDTALBgNVBAcTBHVtZWExHDAaBgNVBAoTE0lUUyBVbWVhIFVuaXZlcnNp
7+
dHkxDTALBgNVBAsTBERJUkcxFTATBgNVBAMTDGxvY2FsaG9zdC5jYTCBnzANBgkq
8+
hkiG9w0BAQEFAAOBjQAwgYkCgYEA0+e/ncbbFMpsYc7Pb5wub2Q0jBpaaae3ZklR
9+
8QNLgQnja6kkKseRR3oOBioo9e7qZbN1N6E2mIye/pMtlOuBcAmp3A+F4rn5VC5p
10+
U9MMliLaYYY9369lrMk/1u/mOvHmrkV5XdkinR9cY82A2swexWrpNg0IXJorrWXM
11+
l6mgCncCAwEAATANBgkqhkiG9w0BAQsFAAOBgQBQmC3rYQCyB3iCJBhRF4H10EMw
12+
NCNMPUiOMvu0+TOIz09hx71LjRbtxUQ+NeksuHJ3ii6UG2XIgXvFCaE0v/pB1UkK
13+
oTqyfzUSZGvPyODEBX+erq5sQeUeONGHDIEK9c200kwlSnfHSoDSk/C3ceIYY/Ry
14+
nD3fl05aOEowsVesMw==
15+
-----END CERTIFICATE-----

example/sp-wsgi/pki/localhost.ca.key

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,15 @@
1+
-----BEGIN RSA PRIVATE KEY-----
2+
MIICXgIBAAKBgQDT57+dxtsUymxhzs9vnC5vZDSMGlppp7dmSVHxA0uBCeNrqSQq
3+
x5FHeg4GKij17upls3U3oTaYjJ7+ky2U64FwCancD4XiuflULmlT0wyWItphhj3f
4+
r2WsyT/W7+Y68eauRXld2SKdH1xjzYDazB7Fauk2DQhcmiutZcyXqaAKdwIDAQAB
5+
AoGBALORf19EVAKaRp3bkw0RXIgoch8HdfZymYekOjvyftkqd/2Tp4JY+1OGqruu
6+
nmdJvnfQS1SI2KsM/u7b6ZR4vYWYqKIMRK5FTBjW0DNp70DV7Y7Y3Bl17xYfo2eJ
7+
Zn80OOHBXyLrhWAnQCDERasXtFpHN5hYFoAx2S5YvyYef1aBAkEA8ZgBooYWkzAO
8+
feEgIywvAaUtCv7TnLwZkTk5wUz4JavkX49LHjMdVef8vRohVOzv5+YPL8L/Aa+C
9+
afsB56jtbQJBAOCKigLo9XtCrgm7j69r+C4MZaVPMEbXPzgOQFcsI5/K4FiGHeRF
10+
9XCnVGJP7/tdRBbhX+CrQWIVy+fqqqQR3PMCQQDlQlky0Em17SGjZLIpjnEg/4zJ
11+
5V4MWxdsD0D2ZUMKBJ9X61PeWaUZ82aMULKWs61Jg7Cfo0x4XgPE7HQ3UL/VAkAm
12+
Ttx+5JnE/rpMhMhdyFDeIlVRH7J/04dAnAXUGX62a1ldIPyGjnzyTEn0P+kUfHP6
13+
Z1cBMJaGEmvoVDvqo/WLAkEAhIpFpf1j0c+FrtkGCmNPiANlpWJVz0u1Qt34adZS
14+
R4GwY5YPKtQ9wo+Z0/K0sEuUBUQYv5nKlXCxRNcL1azr7g==
15+
-----END RSA PRIVATE KEY-----

example/sp-wsgi/sp.py

Lines changed: 25 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -2,13 +2,14 @@
22
import logging
33
import re
44
import argparse
5+
from saml2.extension.pefim import SPCertEnc
56
import service_conf
67

78
from Cookie import SimpleCookie
89
from urlparse import parse_qs
910
import sys
1011

11-
from saml2 import BINDING_HTTP_REDIRECT
12+
from saml2 import BINDING_HTTP_REDIRECT, element_to_extension_element
1213
from saml2 import BINDING_SOAP
1314
from saml2 import time_util
1415
from saml2 import ecp
@@ -33,6 +34,8 @@
3334
from saml2.s_utils import sid
3435
from saml2.s_utils import rndstr
3536
#from srtest import exception_trace
37+
from saml2.md import Extensions
38+
import xmldsig as ds
3639

3740
logger = logging.getLogger("")
3841
hdlr = logging.FileHandler('spx.log')
@@ -152,6 +155,7 @@ def __init__(self):
152155
self.uid2user = {}
153156
self.cookie_name = "spauthn"
154157
self.outstanding_queries = {}
158+
self.outstanding_certs = {}
155159
self.relay_state = {}
156160
self.user = {}
157161
self.result = {}
@@ -348,7 +352,7 @@ def do(self, response, binding, relay_state="", mtype="response"):
348352

349353
try:
350354
self.response = self.sp.parse_authn_request_response(
351-
response, binding, self.outstanding_queries)
355+
response, binding, self.outstanding_queries, self.cache.outstanding_certs)
352356
except UnknownPrincipal, excp:
353357
logger.error("UnknownPrincipal: %s" % (excp,))
354358
resp = ServiceError("UnknownPrincipal: %s" % (excp,))
@@ -551,13 +555,31 @@ def redirect_to_auth(self, _cli, entity_id, came_from):
551555
"assertion_consumer_service"]
552556
# just pick one
553557
endp, return_binding = acs[0]
558+
559+
extensions = None
560+
cert = None
561+
if _cli.config.generate_cert_func is not None:
562+
cert_str, req_key_str = _cli.config.generate_cert_func()
563+
cert = {
564+
"cert": cert_str,
565+
"key": req_key_str
566+
}
567+
spcertenc = SPCertEnc(x509_data=ds.X509Data(
568+
x509_certificate=ds.X509Certificate(text=cert_str)))
569+
extensions = Extensions(extension_elements=[
570+
element_to_extension_element(spcertenc)])
571+
554572
req_id, req = _cli.create_authn_request(destination,
555-
binding=return_binding)
573+
binding=return_binding, extensions=extensions)
556574
_rstate = rndstr()
557575
self.cache.relay_state[_rstate] = came_from
558576
ht_args = _cli.apply_binding(_binding, "%s" % req, destination,
559577
relay_state=_rstate)
560578
_sid = req_id
579+
580+
if cert is not None:
581+
self.cache.outstanding_certs[_sid] = cert
582+
561583
except Exception, exc:
562584
logger.exception(exc)
563585
resp = ServiceError(

0 commit comments

Comments
 (0)