HTTPS/Client-authenticated: Difference between revisions
(add C#) |
(→{{header|Run BASIC}}: Moved to HTTPS/Authenticated) |
||
Line 69: | Line 69: | ||
(define-values [I O] (ssl-connect "www.example.com" 443 ctx)) |
(define-values [I O] (ssl-connect "www.example.com" 443 ctx)) |
||
</lang> |
</lang> |
||
=={{header|Run BASIC}}== |
|||
<lang runbasic>html " |
|||
<CENTER><TABLE CELLPADDING=0 CELLSPACING=0 border=1 bgcolor=wheat> |
|||
<TR><TD colspan=2 bgcolor=tan align=center>LOGIN</TD></TR> |
|||
<TR><TD align=right>UserName</TD><TD>" |
|||
TEXTBOX #userName, "" |
|||
html "</TR></TD><TR><TD align=right>Password:</TD><TD>" |
|||
PasswordBox #passWord, "" |
|||
html "</TD></TR><TD align=center colspan=2>" |
|||
button #si, "Signin", [doSignin] |
|||
html " " |
|||
button #ex, "Exit", [exit] |
|||
html "</TD></TR></TABLE>" |
|||
WAIT |
|||
[doSignin] |
|||
loginUserName$ = trim$(#userName contents$()) |
|||
loginPassWord$ = trim$(#passWord contents$()) |
|||
if (loginUserName$ = "admin" and loginPassWord$ = "admin" then |
|||
print "Login ok" |
|||
else |
|||
print "invalid User or Pass" |
|||
cls |
|||
goto [loop] |
|||
end if |
|||
print Platform$ ' OS where Run BASIC is being hosted |
|||
print UserInfo$ ' Information about the user's web browser |
|||
print UserAddress$ ' IP address of the user |
|||
[exit] |
|||
end</lang> |
|||
[[File:ClientAuthorizationRunBasic.png]] |
|||
=={{header|Tcl}}== |
=={{header|Tcl}}== |
Revision as of 23:49, 3 April 2015
You are encouraged to solve this task according to the task description, using any language you may know.
Demonstrate how to connect to a web server over HTTPS where that server requires that the client present a certificate to prove who (s)he is. Unlike with the HTTPS request with authentication task, it is not acceptable to perform the authentication by a username/password or a set cookie.
This task is in general useful for use with webservice clients as it offers a high level of assurance that the client is an acceptable counterparty for the server. For example, Amazon Web Services uses this style of authentication.
C#
<lang csharp> using System; using System.Net;
class Program {
class MyWebClient : WebClient { protected override WebRequest GetWebRequest(Uri address) { HttpWebRequest request = (HttpWebRequest)base.GetWebRequest(address); request.ClientCertificates.Add(new X509Certificate()); return request; } } static void Main(string[] args) { var client = new MyWebClient();
var data = client.DownloadString("https://example.com");
Console.WriteLine(data); }
} </lang>
Lasso
<lang Lasso>local(sslcert = file('myCert.pem')) local(x = curl('https://sourceforge.net'))
- x->set(CURLOPT_SSLCERT, #sslcert->readstring)
- sslcert->close
- x->result->asString</lang>
Mathematica
<lang Mathematica>a = RunThrough["curl -E myCert.pem https://www.example.com", 1] For[ i=0, i < Length[a] , i++, SomeFunction[a]]</lang>
PicoLisp
<lang PicoLisp>(in '(curl "-E" "myCert.pem" "https://www.example.com")
(while (line) (doSomeProcessingWithLine @) ) )</lang>
Python
<lang python>import httplib
connection = httplib.HTTPSConnection('www.example.com',cert_file='myCert.PEM') connection.request('GET','/index.html') response = connection.getresponse() data = response.read() </lang>
Racket
Skeleton code to connect to a server: <lang racket>
- lang racket
(require openssl/mzssl) (define ctx (ssl-make-client-context)) (ssl-set-verify! ctx #t) ; verify the connection (ssl-load-verify-root-certificates! ctx "my-cert.pem") (define-values [I O] (ssl-connect "www.example.com" 443 ctx)) </lang>
Tcl
Uses the Tls package. <lang tcl>package require http package require tls
set cert myCert.p12 http::register https 443 [list \
::tls::socket -certfile $cert -password getPass]
proc getPass {} {
return "myPassword"; # Just a noddy example...
}
- Make a secure authenticated connection
set token [http::geturl https://verysecure.example.com/]
- Now as for conventional use of the “http” package
set data [http::data $token] http::cleanup $token</lang>
- Programming Tasks
- Programming environment operations
- Networking and Web Interaction
- C sharp
- Lasso
- Mathematica
- PicoLisp
- Python
- Racket
- Tcl
- Batch File/Omit
- Brainf***/Omit
- Inform 7/Omit
- Locomotive Basic/Omit
- Lotus 123 Macro Scripting/Omit
- Openscad/Omit
- M4/Omit
- Maxima/Omit
- ML/I/Omit
- PARI/GP/Omit
- PostScript/Omit
- Retro/Omit
- TI-83 BASIC/Omit
- TI-89 BASIC/Omit
- Unlambda/Omit
- Yorick/Omit
- ZX Spectrum Basic/Omit