Many thanks Matt!
-Curtis On Thu, Mar 3, 2011 at 9:36 AM, <mfl...@racket-lang.org> wrote: > mflatt has updated `master' from 4afd36c9fd to 8ea32d675c. > http://git.racket-lang.org/plt/4afd36c9fd..8ea32d675c > > =====[ 4 Commits ]====================================================== > > Directory summary: > 20.3% collects/openssl/ > 79.1% collects/tests/openssl/ > > ~~~~~~~~~~ > > 107b349 Matthew Flatt <mfl...@racket-lang.org> 2011-03-03 05:48 > : > | cocoa: fix `play-sound' handling of async flag > : > M collects/mred/private/wx/cocoa/sound.rkt | 4 ++-- > > ~~~~~~~~~~ > > 7a33c9c Curtis Dutton <curtd...@gmail.com> 2011-02-28 07:47 > : > | Adds ssl-try-verify! to the openssl package along with supporting > procedures. > | > | This enables an ssl server the option to communicate with both verified > and unverified peers with the same listener. > | > | Supporting API calls... > | > | ssl-peer-verified? -> returns #t if an ssl-port's peer has presented a > valid and verified certificate > | ssl-peer-subject-name -> returns the subject field of the certificate > presented by an ssl-port's peer > | ssl-peer-issuer-name -> returns the issuer field of the certificate > presented by an ssl-port's peer > : > M collects/openssl/mzssl.rkt | 69 > ++++++++++++++++++++++++++++++++++++++-- > > ~~~~~~~~~~ > > ff6da2e Matthew Flatt <mfl...@racket-lang.org> 2011-03-03 07:18 > : > | add docs for openssl additions > : > M collects/openssl/mzssl.rkt | 2 -- > M collects/openssl/openssl.scrbl | 22 ++++++++++++++++++++++ > > ~~~~~~~~~~ > > 8ea32d6 Matthew Flatt <mfl...@racket-lang.org> 2011-03-03 07:24 > : > | add tests from Curtis Dutton > : > A collects/tests/openssl/cacert.pem > A collects/tests/openssl/client_crt.pem > A collects/tests/openssl/client_key.pem > A collects/tests/openssl/peer-verif.rkt > A collects/tests/openssl/server_crt.pem > A collects/tests/openssl/server_key.pem > > =====[ Overall Diff ]=================================================== > > collects/mred/private/wx/cocoa/sound.rkt > ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ > --- OLD/collects/mred/private/wx/cocoa/sound.rkt > +++ NEW/collects/mred/private/wx/cocoa/sound.rkt > @@ -30,7 +30,7 @@ > (tellv s retain) ; don't use `retain', because we dont' want > auto-release > (tellv s play) > (if async? > + #t > (begin > (semaphore-wait sema) > - (get-ivar s result)) > - #t))) > + (get-ivar s result))))) > > collects/openssl/mzssl.rkt > ~~~~~~~~~~~~~~~~~~~~~~~~~~ > --- OLD/collects/openssl/mzssl.rkt > +++ NEW/collects/openssl/mzssl.rkt > @@ -33,9 +33,20 @@ > ssl-load-private-key! > ssl-load-verify-root-certificates! > ssl-load-suggested-certificate-authorities! > - ssl-set-verify! > > - ports->ssl-ports > + ssl-set-verify! > + > + ;sets the ssl server to try an verify certificates > + ;it does not require verification though. > + ssl-try-verify! > + > + ;call on an ssl port, this will return true if the peer > + ;presented a valid certificate and was verified > + ssl-peer-verified? > + ssl-peer-subject-name > + ssl-peer-issuer-name > + > + ports->ssl-ports > > ssl-listen > ssl-close > @@ -90,6 +101,7 @@ > (typedef _SSL_CTX* _pointer) > (typedef _SSL* _pointer) > (typedef _X509_NAME* _pointer) > + (typedef _X509* _pointer) > > (define-ssl SSLv2_client_method (-> _SSL_METHOD*)) > (define-ssl SSLv2_server_method (-> _SSL_METHOD*)) > @@ -120,6 +132,7 @@ > (define-ssl SSL_CTX_use_certificate_chain_file (_SSL_CTX* _bytes -> > _int)) > (define-ssl SSL_CTX_load_verify_locations (_SSL_CTX* _bytes _pointer -> > _int)) > (define-ssl SSL_CTX_set_client_CA_list (_SSL_CTX* _X509_NAME* -> _int)) > + (define-ssl SSL_CTX_set_session_id_context (_SSL_CTX* _bytes _int -> > _int)) > (define-ssl SSL_CTX_use_RSAPrivateKey_file (_SSL_CTX* _bytes _int -> > _int)) > (define-ssl SSL_CTX_use_PrivateKey_file (_SSL_CTX* _bytes _int -> _int)) > (define-ssl SSL_load_client_CA_file (_bytes -> _X509_NAME*)) > @@ -132,6 +145,12 @@ > (define-ssl SSL_read (_SSL* _bytes _int -> _int)) > (define-ssl SSL_write (_SSL* _bytes _int -> _int)) > (define-ssl SSL_shutdown (_SSL* -> _int)) > + (define-ssl SSL_get_verify_result (_SSL* -> _long)) > + (define-ssl SSL_get_peer_certificate (_SSL* -> _X509*)) > + > + (define-crypto X509_get_subject_name ( _X509* -> _X509_NAME*)) > + (define-crypto X509_get_issuer_name ( _X509* -> _X509_NAME*)) > + (define-crypto X509_NAME_oneline (_X509_NAME* _bytes _int -> _bytes)) > > (define-ssl SSL_get_error (_SSL* _int -> _int)) > > @@ -140,6 +159,8 @@ > > (define-ssl SSL_library_init (-> _void)) > (define-ssl SSL_load_error_strings (-> _void)) > + > + (define X509_V_OK 0) > > (define SSL_ERROR_WANT_READ 2) > (define SSL_ERROR_WANT_WRITE 3) > @@ -390,7 +411,23 @@ > SSL_VERIFY_FAIL_IF_NO_PEER_CERT) > SSL_VERIFY_NONE) > #f))) > - > + > + (define (ssl-try-verify! ssl-context-or-listener on?) > + (let ([ctx (get-context/listener 'ssl-set-verify! > + ssl-context-or-listener)]) > + > + ;required by openssl. This is more for when calling > i2d_SSL_SESSION/d2i_SSL_SESSION > + ;for instance if we were saving sessions in a database etc... We > aren't using that > + ;so a generic session name should be fine. > + (let ([bytes #"racket"]) > + (SSL_CTX_set_session_id_context ctx bytes (bytes-length bytes))) > + > + (SSL_CTX_set_verify ctx > + (if on? > + SSL_VERIFY_PEER > + SSL_VERIFY_NONE) > + #f))) > + > ;; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; > ;; SSL ports > > @@ -932,6 +969,28 @@ > (when input? > (raise-type-error 'ssl-abandon-port "SSL output port" p)) > (set-mzssl-shutdown-on-close?! mzssl #f))) > + > + (define (ssl-peer-verified? p) > + (let-values ([(mzssl input?) (lookup 'ssl-peer-verified? "SSL port" > p)]) > + (and (eq? X509_V_OK (SSL_get_verify_result (mzssl-ssl mzssl))) > + (SSL_get_peer_certificate (mzssl-ssl mzssl)) > + #t))) > + > + (define (ssl-peer-subject-name p) > + (let-values ([(mzssl input?) (lookup 'ssl-peer-subject-name "SSL port" > p)]) > + (let ([cert (SSL_get_peer_certificate (mzssl-ssl mzssl))]) > + (if cert > + (let ([bytes (make-bytes 1024 0)]) > + (X509_NAME_oneline (X509_get_subject_name cert) bytes > (bytes-length bytes))) > + #f)))) > + > + (define (ssl-peer-issuer-name p) > + (let-values ([(mzssl input?) (lookup 'ssl-peer-subject-name "SSL port" > p)]) > + (let ([cert (SSL_get_peer_certificate (mzssl-ssl mzssl))]) > + (if cert > + (let ([bytes (make-bytes 1024 0)]) > + (X509_NAME_oneline (X509_get_issuer_name cert) bytes > (bytes-length bytes))) > + #f)))) > > (define (ssl-port? v) > (and (hash-ref ssl-ports v #f) #t)) > @@ -977,7 +1036,7 @@ > > (define (ssl-accept/enable-break ssl-listener) > (do-ssl-accept 'ssl-accept/enable-break tcp-accept/enable-break > ssl-listener)) > - > + > ;; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; > ;; SSL connect > > > collects/openssl/openssl.scrbl > ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ > --- OLD/collects/openssl/openssl.scrbl > +++ NEW/collects/openssl/openssl.scrbl > @@ -364,6 +364,28 @@ collection for testing purposes where the peer > identifies itself using > @filepath{test.pem}.} > > @; ---------------------------------------------------------------------- > +@section[#:tag "peer-verif"]{Peer Verification} > + > +@defproc[(ssl-peer-verified? [p ssl-port?]) boolean?]{ > + > +Returns @racket[#t] if the peer of SSL port @racket[p] has presented a > +valid and verified certificate, @racket[#f] otherwise.} > + > +@defproc[(ssl-peer-subject-name [p ssl-port?]) (or/c bytes? #f)]{ > + > +If @racket[ssl-peer-verified?] would return @racket[#t] for > +@racket[p], the result is a byte string for the subject field of > +the certificate presented by the SSL port's peer, otherwise the result > +is @racket[#f].} > + > +@defproc[(ssl-peer-issuer-name [p ssl-port?]) (or/c bytes? #f)]{ > + > +If @racket[ssl-peer-verified?] would return @racket[#t] for > +@racket[p], the result is a byte string for the issuer field of > +the certificate presented by the SSL port's peer, otherwise the result > +is @racket[#f].} > + > +@; ---------------------------------------------------------------------- > > @section{SHA-1 Hashing} > > > collects/tests/openssl/cacert.pem > ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ > --- /dev/null > +++ NEW/collects/tests/openssl/cacert.pem > @@ -0,0 +1,22 @@ > +-----BEGIN CERTIFICATE----- > +MIIDnTCCAoWgAwIBAgIJAI1o0DxhqPigMA0GCSqGSIb3DQEBBAUAMIGEMRQwEgYD > +VQQDEwtva2NvbXBzLmNvbTELMAkGA1UECBMCT0gxCzAJBgNVBAYTAlVTMR8wHQYJ > +KoZIhvcNAQkBFhByb290QG9rY29tcHMuY29tMRkwFwYDVQQKExBPSyBDb21wdXRl > +cnMgTExDMRYwFAYDVQQLEw1JVCBEZXBhcnRtZW50MB4XDTExMDEyMTEzMTEwNloX > +DTE2MDEyMDEzMTEwNlowgYQxFDASBgNVBAMTC29rY29tcHMuY29tMQswCQYDVQQI > +EwJPSDELMAkGA1UEBhMCVVMxHzAdBgkqhkiG9w0BCQEWEHJvb3RAb2tjb21wcy5j > +b20xGTAXBgNVBAoTEE9LIENvbXB1dGVycyBMTEMxFjAUBgNVBAsTDUlUIERlcGFy > +dG1lbnQwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQDTouNqzEoG/eof > +H75hyNEd7VFRjbBddbu1194eCzfqmiNYacTx8Xhphf9fRNkR5Bznz5dfIrzFqvBJ > +dv4H5BZrZ4cGqDLOdYQtxPdgq5DzfsjIxtck9XKEyZSfV/K2gm1mnqtJ/fYiL2Wm > +Oawrjgtvm3rS/3p0kk/vlS74VfuUX68/S+DgfUX3dvrKXqJn4skcxy1cEt+8GBsH > +CsfwZC3oh+Oi2HO9bmMatp0OgxvuEyc3cwTbdR9JWOs/7eQeGIp6zYwChJqpajSM > +WfwBfY+oQazZrZGbVY+MDPHGD7QTdHn8P0RPCqZpz3f7RnL3Emc1XXGuZBnRa7sv > +KWUsCiP9AgMBAAGjEDAOMAwGA1UdEwQFMAMBAf8wDQYJKoZIhvcNAQEEBQADggEB > +AF6ifcd9/uawOKBAvhMrAS7gTFHXSdc+KoVlPp4SM6+6rllrmxGoGrvXv2NQKjiG > +4Vz0AENCk5vd/i8U2+wkBXnDQFE2ckZwiao33Z4FBq1BYtOP3+mxcg9DDuz2fywn > +LCRBVVVeTXEdoAs3kzMjArPGCP4nXzyGD8zQDv9pcSHJfafPf45Sf1QHhPIm8DdL > +Z2uQQ9aZwMPQwWjVEhPIbB2eXLnRMEMH9JE9mKEhN+epKljyLDADXs+bSkg3QMaT > +d3Bqv9wjBrH2tztqVkq0os0tRFUlVPB6g0ave0Dgp99LolbQJbYlGas6CISS6ueD > +plEJK3Mrw7v832Wqnjx8vhE= > +-----END CERTIFICATE----- > > collects/tests/openssl/client_crt.pem > ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ > --- /dev/null > +++ NEW/collects/tests/openssl/client_crt.pem > @@ -0,0 +1,67 @@ > +Certificate: > + Data: > + Version: 3 (0x2) > + Serial Number: 4 (0x4) > + Signature Algorithm: md5WithRSAEncryption > + Issuer: CN=okcomps.com, ST=OH, C=US/emailAddress=r...@okcomps.com, > O=OK Computers LLC, OU=IT Department > + Validity > + Not Before: Jan 22 16:49:23 2011 GMT > + Not After : Jan 21 16:49:23 2016 GMT > + Subject: CN=testclient.okcomps.com, ST=OH, C=US/emailAddress= > r...@okcomps.com, O=OK Computers LLC, OU=IT > + Subject Public Key Info: > + Public Key Algorithm: rsaEncryption > + RSA Public Key: (1024 bit) > + Modulus (1024 bit): > + 00:e3:a1:8c:40:df:26:a5:52:31:f2:65:94:fa:f3: > + 32:1a:a1:d1:06:e3:32:f4:ae:17:27:38:49:c4:8f: > + f0:6a:61:4a:b1:12:a8:ff:22:5e:a8:b8:d2:be:24: > + 83:1d:48:e4:62:8d:b8:a3:a0:b7:68:d2:dc:53:11: > + fd:cd:87:67:7e:30:76:41:18:d4:97:7d:4f:75:8c: > + b3:17:6a:d4:5f:e2:fa:4c:c3:e0:a5:2b:d5:b2:f0: > + 9a:fc:8c:ec:fb:99:8c:51:b0:62:54:91:c2:64:d1: > + 79:41:da:8f:88:40:76:81:29:d0:0a:f7:63:51:76: > + 7a:23:f1:ca:57:d1:0e:1b:b5 > + Exponent: 65537 (0x10001) > + X509v3 extensions: > + X509v3 Subject Alternative Name: > + DNS:alt.tradeshowhell.com > + X509v3 Basic Constraints: > + CA:FALSE > + Netscape Cert Type: > + SSL Client > + Signature Algorithm: md5WithRSAEncryption > + d0:1c:c8:74:87:06:0b:96:3d:05:4e:19:e4:19:9e:0a:12:76: > + 57:c7:a3:24:34:dd:af:e9:67:cd:99:2a:43:d7:e6:b6:18:eb: > + b4:b0:63:be:e6:d8:ff:99:95:81:a7:88:b9:68:b9:0e:2f:cb: > + 2b:2b:7c:0e:c4:66:d3:f4:89:91:ba:03:0a:35:e1:6b:19:0e: > + 41:c8:f3:3c:bf:47:c1:60:ee:88:74:0a:41:08:4e:82:be:ae: > + 46:b0:31:8d:f8:10:84:1a:af:03:52:39:87:b7:46:2f:7f:2e: > + f1:a6:03:4e:3c:bb:ea:0c:08:8f:77:17:b7:c8:d2:a5:a7:a0: > + 56:9b:c8:5b:53:d1:36:01:96:85:46:c9:73:e5:cf:40:8c:fa: > + b2:c1:be:3e:8f:24:97:c3:35:ec:45:59:b3:f4:9b:3f:b0:50: > + 5d:2b:d3:19:11:c6:5d:c1:61:26:db:34:4a:69:46:5a:c1:f2: > + 43:f9:5a:4d:71:44:2a:62:28:c0:ac:51:63:35:88:cc:6d:9a: > + db:7b:d1:a1:a2:e4:86:96:83:48:73:7f:c9:a3:05:e6:46:82: > + 1c:b4:99:9e:7a:b6:1e:87:08:e6:1d:b1:04:0f:ed:19:a6:b1: > + ce:71:47:ce:73:de:8c:d8:13:aa:a8:6f:b0:04:0c:9b:b7:d1: > + 61:da:90:e3 > +-----BEGIN CERTIFICATE----- > +MIIDQzCCAiugAwIBAgIBBDANBgkqhkiG9w0BAQQFADCBhDEUMBIGA1UEAxMLb2tj > +b21wcy5jb20xCzAJBgNVBAgTAk9IMQswCQYDVQQGEwJVUzEfMB0GCSqGSIb3DQEJ > +ARYQcm9vdEBva2NvbXBzLmNvbTEZMBcGA1UEChMQT0sgQ29tcHV0ZXJzIExMQzEW > +MBQGA1UECxMNSVQgRGVwYXJ0bWVudDAeFw0xMTAxMjIxNjQ5MjNaFw0xNjAxMjEx > +NjQ5MjNaMIGEMR8wHQYDVQQDExZ0ZXN0Y2xpZW50Lm9rY29tcHMuY29tMQswCQYD > +VQQIEwJPSDELMAkGA1UEBhMCVVMxHzAdBgkqhkiG9w0BCQEWEHJvb3RAb2tjb21w > +cy5jb20xGTAXBgNVBAoTEE9LIENvbXB1dGVycyBMTEMxCzAJBgNVBAsTAklUMIGf > +MA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDjoYxA3yalUjHyZZT68zIaodEG4zL0 > +rhcnOEnEj/BqYUqxEqj/Il6ouNK+JIMdSORijbijoLdo0txTEf3Nh2d+MHZBGNSX > +fU91jLMXatRf4vpMw+ClK9Wy8Jr8jOz7mYxRsGJUkcJk0XlB2o+IQHaBKdAK92NR > +dnoj8cpX0Q4btQIDAQABo0IwQDAgBgNVHREEGTAXghVhbHQudHJhZGVzaG93aGVs > +bC5jb20wCQYDVR0TBAIwADARBglghkgBhvhCAQEEBAMCB4AwDQYJKoZIhvcNAQEE > +BQADggEBANAcyHSHBguWPQVOGeQZngoSdlfHoyQ03a/pZ82ZKkPX5rYY67SwY77m > +2P+ZlYGniLlouQ4vyysrfA7EZtP0iZG6Awo14WsZDkHI8zy/R8Fg7oh0CkEIToK+ > +rkawMY34EIQarwNSOYe3Ri9/LvGmA048u+oMCI93F7fI0qWnoFabyFtT0TYBloVG > +yXPlz0CM+rLBvj6PJJfDNexFWbP0mz+wUF0r0xkRxl3BYSbbNEppRlrB8kP5Wk1x > +RCpiKMCsUWM1iMxtmtt70aGi5IaWg0hzf8mjBeZGghy0mZ56th6HCOYdsQQP7Rmm > +sc5xR85z3ozYE6qob7AEDJu30WHakOM= > +-----END CERTIFICATE----- > > collects/tests/openssl/client_key.pem > ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ > --- /dev/null > +++ NEW/collects/tests/openssl/client_key.pem > @@ -0,0 +1,15 @@ > +-----BEGIN RSA PRIVATE KEY----- > +MIICXAIBAAKBgQDjoYxA3yalUjHyZZT68zIaodEG4zL0rhcnOEnEj/BqYUqxEqj/ > +Il6ouNK+JIMdSORijbijoLdo0txTEf3Nh2d+MHZBGNSXfU91jLMXatRf4vpMw+Cl > +K9Wy8Jr8jOz7mYxRsGJUkcJk0XlB2o+IQHaBKdAK92NRdnoj8cpX0Q4btQIDAQAB > +AoGAPgUF8abbILAEa8bBkJ4ySI9OJFJCz+ee51CuyJ9vIYzgjN5IrTrwD4hL4wKP > +tqrljvSOGgbv8d+BqCB+xkDeMT/mFBOyCKrrOX7TSSvVfu9ihRtiy7v2vjodwTNq > +L82JKscJXTwgR3QrJv6JPb/iZItbweFE4/UWMFDEd7J+dQECQQD5WzSmGTxWdvjx > +l+jhdVQmA6O87txBPAJP+hAfq/ViAIwVxEeDTBDYKHXBAzIjSpigerG6WkW8AeCQ > +2aDJOnRHAkEA6bIo+1xwwhZb42kPWiLKhW4bwKM7K7Y3uetQMehu8BOubr6QMHKb > +QCjz3/e+ldQ3tV9AgcFmp0juZ4YoBTcaIwJAPVZjIAyLHBXN7NfaUENlPKieiWYU > +RfO1+ehgOPo6tS2/R8dtc+2tIw7o0F6x4Z6C5s7nkxiLmNC5Zcgy1e0MFwJBAIwP > +WPx9RJ8uI1hCKQ9Odq5NdZiYu+fQx8lHvMKMmaCNSyfYUjaXGXD0mmUK6FCH5fNv > +6QtbTBjKXwfwoZ+ujJ0CQHAOCJY1vtycRYFh7B+A6Emp/w5aJAqJqS4A79FjCf3N > +w8MwJrAPTXvKILEnvhuW5uxg5VXqndK/gz+6z/eZyS4= > +-----END RSA PRIVATE KEY----- > > collects/tests/openssl/peer-verif.rkt > ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ > --- /dev/null > +++ NEW/collects/tests/openssl/peer-verif.rkt > @@ -0,0 +1,72 @@ > +#lang racket > + > +(require openssl > + ffi/unsafe > + racket/tcp) > + > +(define (check fmt got expect) > + (unless (equal? got expect) > + (error 'check fmt got))) > + > +(define ssl-server-context (ssl-make-server-context 'sslv3)) > + > + > +(ssl-load-private-key! ssl-server-context "server_key.pem") > +(ssl-load-certificate-chain! ssl-server-context "server_crt.pem") > +(ssl-load-verify-root-certificates! ssl-server-context "cacert.pem") > +(ssl-try-verify! ssl-server-context #t) > + > +(define ssl-listener (ssl-listen 55000 > + 4 > + #f > + "127.0.0.1" > + ssl-server-context)) > + > +(define listener-main > + (thread > + (lambda() > + (let-values ([(in out) (ssl-accept ssl-listener)]) > + (check "Server: Accepted connection.~n" #t #t) > + (check "Server: Verified ~v~n" (ssl-peer-verified? in) #t) > + (check "Server: Verified ~v~n" (ssl-peer-verified? out) #t) > + (check "Server: Verified Peer Subject Name ~v~n" > (ssl-peer-subject-name in) > + #"/CN= > testclient.okcomps.com/ST=OH/C=US/emailAddress=r...@okcomps.com/O=OKComputers > LLC/OU=IT") > + (check "Server: Verified Peer Issuer Name ~v~n" > (ssl-peer-issuer-name in) > + #"/CN= > okcomps.com/ST=OH/C=US/emailAddress=r...@okcomps.com/O=OK Computers > LLC/OU=IT Department") > + (ssl-close ssl-listener) > + (check "Server: From Client: ~a~n" (read-line in) "yay the > connection was made") > + (close-input-port in) > + (close-output-port out))))) > + > + > +(define ssl-client-context (ssl-make-client-context 'sslv3)) > + > +(ssl-load-private-key! ssl-client-context "client_key.pem") > + > +;connection will still proceed if these methods aren't called > +;change to #f to try it > +(when #t > + (ssl-load-certificate-chain! ssl-client-context "client_crt.pem") > + (ssl-load-verify-root-certificates! ssl-client-context "cacert.pem") > + (ssl-set-verify! ssl-client-context #t)) > + > + > +(let-values ([(in out) (ssl-connect "127.0.0.1" > + 55000 > + ssl-client-context)]) > + (check "Client: Made connection.~n" #t #t) > + (check "Client: Verified ~v~n" (ssl-peer-verified? in) #t) > + (check "Client: Verified ~v~n" (ssl-peer-verified? out) #t) > + (check "Client: Verified Peer Subject Name ~v~n" (ssl-peer-subject-name > in) > + #"/CN= > test.okcomps.com/ST=OH/C=US/emailAddress=r...@okcomps.com/O=OK Computers > LLC/OU=IT") > + (check "Client: Verified Peer Issuer Name ~v~n" (ssl-peer-issuer-name > in) > + > #"/CN=okcomps.com/ST=OH/C=US/emailAddress=r...@okcomps.com/O=OKComputers > LLC/OU=IT Department") > + (write-string (format "yay the connection was made~n") out) > + (close-input-port in) > + (close-output-port out)) > + > + > +(thread-wait listener-main) > + > +;certificate revocation list > +;enables denial of connections that provide a certificate on the given > certificate revocation list > > collects/tests/openssl/server_crt.pem > ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ > --- /dev/null > +++ NEW/collects/tests/openssl/server_crt.pem > @@ -0,0 +1,67 @@ > +Certificate: > + Data: > + Version: 3 (0x2) > + Serial Number: 1 (0x1) > + Signature Algorithm: md5WithRSAEncryption > + Issuer: CN=okcomps.com, ST=OH, C=US/emailAddress=r...@okcomps.com, > O=OK Computers LLC, OU=IT Department > + Validity > + Not Before: Jan 21 13:19:20 2011 GMT > + Not After : Jan 20 13:19:20 2016 GMT > + Subject: CN=test.okcomps.com, ST=OH, C=US/emailAddress= > r...@okcomps.com, O=OK Computers LLC, OU=IT > + Subject Public Key Info: > + Public Key Algorithm: rsaEncryption > + RSA Public Key: (1024 bit) > + Modulus (1024 bit): > + 00:ca:d0:a2:7c:5d:0c:bc:df:3b:1c:d2:b7:d4:b3: > + 68:12:1b:3a:df:5e:75:f6:9f:71:1a:b2:29:76:e7: > + 55:eb:2d:d2:cf:c1:a7:2f:54:91:68:cc:f0:ce:10: > + 42:d4:d2:82:0d:56:f0:16:aa:a8:a4:f3:4f:c3:f7: > + 55:3c:a0:90:c3:a9:04:63:86:90:7f:64:49:77:0d: > + 9b:7b:02:e2:04:ec:52:08:c4:01:72:e4:e6:89:18: > + f6:fc:cc:8d:b6:9b:24:f4:c6:a9:78:67:e4:15:d4: > + 68:1e:da:67:4f:d9:40:48:44:f0:9a:ae:5a:87:24: > + 2a:b5:2e:83:d6:ad:f4:e5:9b > + Exponent: 65537 (0x10001) > + X509v3 extensions: > + X509v3 Subject Alternative Name: > + DNS:alt.tradeshowhell.com > + X509v3 Basic Constraints: > + CA:FALSE > + Netscape Cert Type: > + SSL Server > + Signature Algorithm: md5WithRSAEncryption > + ab:c9:75:73:f9:79:31:34:b9:3b:83:2f:3f:9e:4e:33:01:98: > + 37:9b:bd:08:d6:14:ea:d9:a1:fa:7a:0d:ae:dc:00:fd:a6:01: > + ba:3e:d6:ed:8b:8d:43:ba:41:51:08:c6:c5:db:84:34:34:07: > + 17:19:35:5d:8c:7f:37:b8:c1:02:c3:22:d9:dc:f4:85:4d:1c: > + 6e:44:43:0d:7a:5a:de:4c:ba:a3:4b:a3:9b:07:3a:dd:f0:69: > + 3d:89:65:e4:0d:f6:0d:04:58:00:74:b6:11:5e:e2:a7:1c:8d: > + d4:83:e3:9b:93:85:f7:d1:7c:5f:67:0c:38:02:1f:d6:44:0d: > + 73:22:5f:d2:ff:e1:ef:be:11:e4:e7:1c:b7:d6:8b:b6:78:bb: > + 09:e1:46:94:48:24:98:88:b2:6d:27:2a:85:5a:cd:34:b5:c4: > + 74:1b:58:97:f8:4a:aa:13:e1:13:4d:86:80:36:b2:9a:31:3a: > + be:3f:c7:1b:76:71:e9:b5:7d:4b:61:9b:59:ad:c7:1b:2e:b8: > + 7c:bd:6f:f8:06:44:eb:7b:fd:53:45:b0:fa:a4:37:b4:56:e2: > + 87:ba:d4:5c:49:db:7d:31:a4:42:d3:d7:47:a3:6f:cb:e3:9d: > + 5c:be:2e:eb:1b:0a:06:e2:ce:d6:c4:81:c2:c1:85:36:dc:4c: > + 03:5b:b3:14 > +-----BEGIN CERTIFICATE----- > +MIIDPDCCAiSgAwIBAgIBATANBgkqhkiG9w0BAQQFADCBhDEUMBIGA1UEAxMLb2tj > +b21wcy5jb20xCzAJBgNVBAgTAk9IMQswCQYDVQQGEwJVUzEfMB0GCSqGSIb3DQEJ > +ARYQcm9vdEBva2NvbXBzLmNvbTEZMBcGA1UEChMQT0sgQ29tcHV0ZXJzIExMQzEW > +MBQGA1UECxMNSVQgRGVwYXJ0bWVudDAeFw0xMTAxMjExMzE5MjBaFw0xNjAxMjAx > +MzE5MjBaMH4xGTAXBgNVBAMTEHRlc3Qub2tjb21wcy5jb20xCzAJBgNVBAgTAk9I > +MQswCQYDVQQGEwJVUzEfMB0GCSqGSIb3DQEJARYQcm9vdEBva2NvbXBzLmNvbTEZ > +MBcGA1UEChMQT0sgQ29tcHV0ZXJzIExMQzELMAkGA1UECxMCSVQwgZ8wDQYJKoZI > +hvcNAQEBBQADgY0AMIGJAoGBAMrQonxdDLzfOxzSt9SzaBIbOt9edfafcRqyKXbn > +Vest0s/Bpy9UkWjM8M4QQtTSgg1W8BaqqKTzT8P3VTygkMOpBGOGkH9kSXcNm3sC > +4gTsUgjEAXLk5okY9vzMjbabJPTGqXhn5BXUaB7aZ0/ZQEhE8JquWockKrUug9at > +9OWbAgMBAAGjQjBAMCAGA1UdEQQZMBeCFWFsdC50cmFkZXNob3doZWxsLmNvbTAJ > +BgNVHRMEAjAAMBEGCWCGSAGG+EIBAQQEAwIGQDANBgkqhkiG9w0BAQQFAAOCAQEA > +q8l1c/l5MTS5O4MvP55OMwGYN5u9CNYU6tmh+noNrtwA/aYBuj7W7YuNQ7pBUQjG > +xduENDQHFxk1XYx/N7jBAsMi2dz0hU0cbkRDDXpa3ky6o0ujmwc63fBpPYll5A32 > +DQRYAHS2EV7ipxyN1IPjm5OF99F8X2cMOAIf1kQNcyJf0v/h774R5Occt9aLtni7 > +CeFGlEgkmIiybScqhVrNNLXEdBtYl/hKqhPhE02GgDaymjE6vj/HG3Zx6bV9S2Gb > +Wa3HGy64fL1v+AZE63v9U0Ww+qQ3tFbih7rUXEnbfTGkQtPXR6Nvy+OdXL4u6xsK > +BuLO1sSBwsGFNtxMA1uzFA== > +-----END CERTIFICATE----- > > collects/tests/openssl/server_key.pem > ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ > --- /dev/null > +++ NEW/collects/tests/openssl/server_key.pem > @@ -0,0 +1,15 @@ > +-----BEGIN RSA PRIVATE KEY----- > +MIICXQIBAAKBgQDK0KJ8XQy83zsc0rfUs2gSGzrfXnX2n3Easil251XrLdLPwacv > +VJFozPDOEELU0oINVvAWqqik80/D91U8oJDDqQRjhpB/ZEl3DZt7AuIE7FIIxAFy > +5OaJGPb8zI22myT0xql4Z+QV1Gge2mdP2UBIRPCarlqHJCq1LoPWrfTlmwIDAQAB > +AoGAN2HRfPRLzieHFM/Vsxdqi8czxFsfC0FuuUN9XyK8q4PP1TukU6BcNKoB98Mo > +/MSfDtV2qjnf42stlO2tMOkHnmkx6Kz/aoiG7rfPjVqRVOy+LZ6HZj5bxaIC0WkF > +2RbuHB2pLmrZGfQI0F/aFQpUQCqM4S4e1SDBxAyygtzkaUECQQD7pqWpXQ+VjejK > +/Gd8hNPQk71vziJsXn3fVVa0aYxh8WapbvQODC6aMvow4ows6oJgMJdsfjBfBDbd > +KNtcTCbHAkEAzlHtfH+o6dVuAaURUfhDj4Ld25/ZQepKMsI3CJaS3eP5+efVbjhr > +yedC+p7moN9oTLPxee+EqoB8921MWa4mjQJAI/upNnVrFAxtnBDJT2HC09E8Ri9o > +dqxwPS37ruJkw2B8OH/3/8Y4J65gXfsW5hlGOTDZhhbpHb0Bh1AfRaxR4wJBALn+ > +EWFSlCt4RBsne12xuPX+u5HpoClT1F+9xW7wjqWJhyhKXpVmN4Vj/XWBGdecjqHW > +9bE+wxIRkpZa6aFO5WECQQChsZbIQ3Oa5D5cjmImzmhWS7pYB/hTt3RZODiB35Ec > +0tDEkEYz3kx2WmVQdXnlP3/JS8F9FrDJX+y2YxLhvQ75 > +-----END RSA PRIVATE KEY----- >
_________________________________________________ For list-related administrative tasks: http://lists.racket-lang.org/listinfo/dev