Skip to content

Instantly share code, notes, and snippets.

@mutability
Last active April 30, 2017 22:39
Show Gist options
  • Save mutability/8cc5e34aa57e262c23bc816a76a068ed to your computer and use it in GitHub Desktop.
Save mutability/8cc5e34aa57e262c23bc816a76a068ed to your computer and use it in GitHub Desktop.
(mostly) standalone tcltls tester
-----BEGIN CERTIFICATE-----
MIIF0jCCA7qgAwIBAgIJAKn+dW2ea5S0MA0GCSqGSIb3DQEBCwUAMHYxCzAJBgNV
BAYTAlVTMQswCQYDVQQIDAJUWDEQMA4GA1UEBwwHSG91c3RvbjEYMBYGA1UECgwP
RmxpZ2h0QXdhcmUgTExDMRMwEQYDVQQLDApPcGVyYXRpb25zMRkwFwYDVQQDDBBG
bGlnaHRBd2FyZSBSb290MB4XDTE1MTIwOTE2NTAwNFoXDTM1MTIwNDE2NTAwNFow
djELMAkGA1UEBhMCVVMxCzAJBgNVBAgMAlRYMRAwDgYDVQQHDAdIb3VzdG9uMRgw
FgYDVQQKDA9GbGlnaHRBd2FyZSBMTEMxEzARBgNVBAsMCk9wZXJhdGlvbnMxGTAX
BgNVBAMMEEZsaWdodEF3YXJlIFJvb3QwggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAw
ggIKAoICAQDTlR/hn6y+RqUVZnRxc9Wp0mQaYJpXEDBAzAVUipXdertL1c0mYqda
22J9E0ubZS5nqYXhj9/YHN0G8fP9LmTjzB4mxH0TZCRTglNCsQDzKLuxnt1ynHCl
yUV9z/B1snL/bl8NIAv9eFzR+1/yIWdzO9pg5wpue1s+9IbMifAtwupUi9vKwoOR
azUHAvmI0WvGkFuE+ggyXwJjThGqP97G6ddYfqXFzU+vhXSRPLzqDHweq7TiK/+E
RBC1QjaQed7leW+veEOjhcmpSaWziepVA7oLmjf7pWGrV1vLUTKdvaWFH9Ao8OqV
NM/ZIf74QXQ2rbe/mFa13OvcVnWGt5QKaOIp5mB4Rq2KlJhu9BNN//ORT7eqjlsD
HFdOvUYME0jg+7W1Bnajq1CId/iAnVNCyaNfgaPKvDk+1j8ydKqS+jssLvFUPoh4
d3KWz1DqyF3dOjhzZXVI/5zbcFGINAr0N01MlcUdPn015WsUjJPTUGD89NNfPhqh
iEEuNiwg46gJXIOXAy8SItX/Sbz1AJyLHohTqquOk8NInic6CkJNodgKQWdD4WNY
luiLBFiJSrmP5RWNlYtMuejGhx0zFdsn0J9Aj5fNoIAjrpn85h2JpBYXd0bPX2vM
JS+2ooU+vSjcV4EySDED4jzNDAu66d2Vw/CHJhOL+1BTMTWm41FHDwIDAQABo2Mw
YTAdBgNVHQ4EFgQUi4ayF9cvkGvBLzaX6SWhkbEzQ8AwHwYDVR0jBBgwFoAUi4ay
F9cvkGvBLzaX6SWhkbEzQ8AwDwYDVR0TAQH/BAUwAwEB/zAOBgNVHQ8BAf8EBAMC
AYYwDQYJKoZIhvcNAQELBQADggIBABJ9muLNkfb2yrzSk1iUJ2ihAEhCmbCQ2tUr
2O/HldSJNd9a3WnSa60PsxQhJBgAe+W/vBb4BytmLm7qqx6rnRjnCynU/VRVOVqu
syYZvvf9MYfaLOwYTnPgsbHlDc4F1X3+ZWHjHnZONaQPqQhMZv0SgsKPahuToBD/
fNXv8yXVgb2QLk+cQ4viqtlKJiHjHTqKopTXR2vu8OXa/XZdOv4ThAZMmBn9ubzb
dRu76EkH6gFyenUynhjHOkKUZKz4byfRzLVxlj6YPDtCP512SYiYFi2nf1BDGpCX
vZufernP60hVrEa89PHfc3tLE/RsmkyLPORay76hSmL9i4DOD4Ggnn6Sy12/uRGU
RcEqt1HzAa8Jc2raD86uCbMZE+nJZ1oWSQ2KWq9B7ED1owA8/7ONFPq7Hc3RvEVw
YiBTHdNsIl2W2GPG6H1hmGKG0YCYPh5f3tzJNv+xf++Yyl7xmGGmRRGbyq2Idys/
fG35F7wlCHZmkLLw/iqmp0Oc7VNKBB17eLNk9V/y6ftt1iwkNY5xr1jtZm7Bte34
wGtR14PXQiR0AuPHXwiH24aXfsVdUIwgGDhg8OpGH/aQemIjzQ5ZC+VphbSP5RwS
6ixn0K4tO1Ug3S/TeLk82GGdmXosU00Kd5VHHk611FzUu4vTXRO01xisaGcQBJNm
h6nW3kqb
-----END CERTIFICATE-----
# With tcltls 1.6.7
$ ./tls.tcl
establishing connection
importing socket
handshaking
callback: info sock1ca0f20 handshake start {before/connect initialization}
callback: info sock1ca0f20 connect loop {before/connect initialization}
callback: info sock1ca0f20 connect loop {SSLv2/v3 write client hello A}
callback: info sock1ca0f20 connect exit {SSLv2/v3 read server hello A}
handshake: returned 0
handshaking
callback: info sock1ca0f20 connect loop {unknown state}
callback: verify sock1ca0f20 2 {sha1_hash B69ABB0BF41433F4E27434BF6628CE1EA1CAA704 subject {CN=FlightAware Root,OU=Operations,O=FlightAware LLC,L=Houston,ST=TX,C=US} issuer {CN=FlightAware Root,OU=Operations,O=FlightAware LLC,L=Houston,ST=TX,C=US} notBefore {Dec 9 16:50:04 2015 GMT} notAfter {Dec 4 16:50:04 2035 GMT} serial A9FE756D9E6B94B4} 1 {}
callback: verify sock1ca0f20 1 {sha1_hash D191B12012733E764CA27D5DFB88336499C9C7C1 subject {CN=FlightAware Intermediate,OU=Operations,O=FlightAware LLC,ST=TX,C=US} issuer {CN=FlightAware Root,OU=Operations,O=FlightAware LLC,L=Houston,ST=TX,C=US} notBefore {Dec 9 16:59:51 2015 GMT} notAfter {Dec 6 16:59:51 2025 GMT} serial 2048} 1 {}
callback: verify sock1ca0f20 0 {sha1_hash ED69EEEF3FEE10E7DDD1BEC93C10EDCDF88989A1 subject {CN=*.flightaware.com,OU=Operations,O=FlightAware LLC,L=Houston,ST=Texas,C=US} issuer {CN=FlightAware Intermediate,OU=Operations,O=FlightAware LLC,ST=TX,C=US} notBefore {Dec 11 16:33:41 2015 GMT} notAfter {Dec 11 16:33:41 2019 GMT} serial 2049} 1 {}
callback: info sock1ca0f20 connect loop {unknown state}
callback: info sock1ca0f20 connect loop {unknown state}
callback: info sock1ca0f20 connect loop {unknown state}
callback: info sock1ca0f20 connect loop {unknown state}
callback: info sock1ca0f20 connect loop {unknown state}
callback: info sock1ca0f20 connect loop {unknown state}
callback: info sock1ca0f20 connect loop {unknown state}
callback: info sock1ca0f20 connect loop {unknown state}
callback: info sock1ca0f20 connect exit {unknown state}
callback: info sock1ca0f20 connect exit {unknown state}
handshake: returned 0
handshaking
callback: info sock1ca0f20 connect loop {unknown state}
callback: info sock1ca0f20 connect loop {unknown state}
callback: info sock1ca0f20 handshake done {SSL negotiation finished successfully}
callback: info sock1ca0f20 connect exit {SSL negotiation finished successfully}
handshake: returned 1
tls status: sha1_hash ED69EEEF3FEE10E7DDD1BEC93C10EDCDF88989A1 subject {CN=*.flightaware.com,OU=Operations,O=FlightAware LLC,L=Houston,ST=Texas,C=US} issuer {CN=FlightAware Intermediate,OU=Operations,O=FlightAware LLC,ST=TX,C=US} notBefore {Dec 11 16:33:41 2015 GMT} notAfter {Dec 11 16:33:41 2019 GMT} serial 2049 sbits 256 cipher AES256-GCM-SHA384
callback: info sock1ca0f20 alert write {close notify}
# With tcltls 1.7.11
$ ./tls.tcl
establishing connection
importing socket
handshaking
callback: info sock8021d0710 handshake start {before/connect initialization}
callback: info sock8021d0710 connect loop {before/connect initialization}
callback: info sock8021d0710 connect loop {SSLv2/v3 write client hello A}
callback: info sock8021d0710 connect exit {SSLv2/v3 read server hello A}
handshake: returned 1
tls status: sbits 0
#!/usr/bin/env tclsh
package require tls
proc tls_callback {args} {
puts stderr "callback: $args"
}
proc testit {} {
puts stderr "establishing connection"
set s [socket piaware.flightaware.com 1200]
puts stderr "importing socket"
::tls::import $s \
-cipher ALL \
-cafile flightaware-root.cert.pem \
-ssl2 0 \
-ssl3 0 \
-tls1 1 \
-require 1 \
-command tls_callback
fconfigure $s -blocking 0
while {1} {
puts stderr "handshaking"
if {[catch {::tls::handshake $s} result options] == 1} {
puts stderr "handshake: returned error: $result"
if {[lindex $::errorCode 0] == "POSIX" && [lindex $::errorCode 1] == "EAGAIN"} {
set result 0
} else {
return -options $options $result
}
} else {
puts stderr "handshake: returned $result"
}
if {!$result} {
after 500
} else {
break
}
}
puts stderr "tls status: [::tls::status $s]"
}
if {!$tcl_interactive} {
try {
testit
} on error {result} {
puts stderr "Caught error: $result"
puts stderr $::errorInfo
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment