Dieses Blog durchsuchen

Sonntag, 18. September 2016

https: use node.js spdy to implement http2

Because http2 is the next generation protocoll in the web with all its advantages like performance, better informations etc, we want to implement a simple http2 webserver.

Most of the browser do actually support http2. FF, Safari IE 11 and Opera in the latest version does.

Because all browsers are making ssl / tsl to the encryption standard when using http2, you will need a certificate.

To make things simple we selfsign this certificate and import it to firefox.

Prerequisits

We need some things installed on the local machine.
  • a /etc/hostfile entry for "nodejs.local"
  • a ssl certificate for nodejs.local
  • node.js installed

Get the ssl cert and the server key

Create a projectfolder in your webroot.


Save that cert as server.crt and the server.key to your local project under <projectroot>/etc/certs/

server.crt
-----BEGIN CERTIFICATE-----
MIIDkjCCAnoCCQDEan7YJ4bXPTANBgkqhkiG9w0BAQsFADCBijELMAkGA1UEBhMC
REUxDzANBgNVBAgMBkhlc3NlbjESMBAGA1UEBwwJRnJhbWtmdXJ0MQ4wDAYDVQQK
DAVQRUJPNTEMMAoGA1UECwwDREVWMRUwEwYDVQQDDAxub2RlanMubG9jYWwxITAf
BgkqhkiG9w0BCQEWEnBib2V0aGlnQGdtYWlsLmNvbTAeFw0xNjA5MTgxNDE5MzNa
Fw0xNzA5MTgxNDE5MzNaMIGKMQswCQYDVQQGEwJERTEPMA0GA1UECAwGSGVzc2Vu
MRIwEAYDVQQHDAlGcmFta2Z1cnQxDjAMBgNVBAoMBVBFQk81MQwwCgYDVQQLDANE
RVYxFTATBgNVBAMMDG5vZGVqcy5sb2NhbDEhMB8GCSqGSIb3DQEJARYScGJvZXRo
aWdAZ21haWwuY29tMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEApbX2
E/qIG+bpq9kmciEMmM6o+Qtz7cYNz88W1DSIQMQroMXlE7RDGlmwZV1IQYbhsbns
HXBjUuVZsaAWckZWdcJh7WmDQrztXzKBjj40wJEoKD3NjE2IKyNNZfLZcnfNbKk6
EFN5o85/StfCNofQsFpZD4JXXuYmk7oEyNdtLe4sB100AdpFXIxgDgoBLcYHC65+
GSkxsiwVuthJHZlnvzn64UU9JLnccwyLEADJk+q6jtfsRc1MK+c1H7BbERfxNGoA
eVexQ+fPgiTzQjV0LjyGcWKsHE6RuTvAUJj0B1qM3dTQJAnIC0I4YHbUcMwfUtrK
g7xvDo4704X+/Scr6QIDAQABMA0GCSqGSIb3DQEBCwUAA4IBAQCIEoisBqRNoF7C
/QT4O395vrgnZubhX/hERh/gXiqaodvQ3d48ZnJ0KmPOTdYQG4UWFZ/aPNOcPfJX
v9xkZslgGuG3Q4QqA+FrMfs8j/m56rQwcQQTvjL5nj9de4pkPibtEyDAj+X+J7Vi
CoZtI3MLgqpRI4jOQoI7cjuux/vD0UncSV1K4fhBcY32fn21ArEaVQUvTTXGmRid
9E9ZAwrGpfFtjScFDeP3dC2r3qu9Ez1fgCfk7wtYIhW3joKzq4LIcr1uspS1IkyR
ENXjmDHyYSKgBKzIGi0UT8WVeK7frvgmHiW4N+MJf6XOta/YHumLpMWSqm96YIrx
PHyBymfE
-----END CERTIFICATE-----




server.key
-----BEGIN RSA PRIVATE KEY-----
MIIEogIBAAKCAQEApbX2E/qIG+bpq9kmciEMmM6o+Qtz7cYNz88W1DSIQMQroMXl
E7RDGlmwZV1IQYbhsbnsHXBjUuVZsaAWckZWdcJh7WmDQrztXzKBjj40wJEoKD3N
jE2IKyNNZfLZcnfNbKk6EFN5o85/StfCNofQsFpZD4JXXuYmk7oEyNdtLe4sB100
AdpFXIxgDgoBLcYHC65+GSkxsiwVuthJHZlnvzn64UU9JLnccwyLEADJk+q6jtfs
Rc1MK+c1H7BbERfxNGoAeVexQ+fPgiTzQjV0LjyGcWKsHE6RuTvAUJj0B1qM3dTQ
JAnIC0I4YHbUcMwfUtrKg7xvDo4704X+/Scr6QIDAQABAoIBACEtMgxD73Yun//w
5NqatUvurDPYUCh9q4w8eOSZc+ILpHR2ymtMftbKuB9DMtEzsQIFKDmoo6oYEwIV
/Ah6/pprBXIj2szEyH1zvi59U9Bt/203Gm0JpMaGNdvAaDqbs7wakW5tWAAsup2A
XvjN7kEwhX4uaVGtoHGZH5YaU1iLcTT6FnDn6KOOFW2pKvvOX8GUnmRH5zARTwBH
t0olAdch+G3nsFCjvrukOzJWPuJcWJ0c+4Ok3jy4Af4iz3izi6q62ES3pQ2aQPXx
RN7OSLdCvqMNUfDLGaaNF6uJWjvpvy+nfkUsjO++bI018ZjVxyiGVcredM3yD0JY
+CQvclECgYEA0oxKJn29dcVdMcmFZB8d2QC2wJDcIknSeo/aXChXMfusfHDK4efv
OmGq2x/IPoxd7zmQt8U5DZVpQd22cEDMtDdCNum/l0TBpib0OQU/Q5zzsFHi6IL/
piIBzOjpX32uglhhh9qZinv64XYb2sW03FYLt9UQqrJsqOd5kTm5D4UCgYEAyXvK
YwMZ1as6KmPXMJQGcdLs+JLju3Qf811GyXiFWL5s0m92Ckz2+UDzC5Gu0Avqdzan
emqaQY/Bint/ZcyWJvS3gNViuYfpw9GTq4GO7cqPGLKSVqEcnO4rzRzcooqR5RKJ
25Rm7oQci/jhlVk8cv9a62c8xuhvb+ly/K0jLhUCgYAkxAKevg47Zn9jlkEIvrZD
knBXJ/SIuENcy4nh1dmEDOKNyFRlJk8L7sobAW3CHli40WCH9pSD3rdGnSSibW5R
eeTCGgcurv7xuJOk8VmewOV8wI/S8i0aIY4W7gTye8vhTvWY938gQ44HmMw8Y5G1
eAEL1NTYOdfnlqQPy/iY0QKBgCNL7WulCmyVH453iSY4eFyOX/c3/G9Fa6d9qr32
wB2I1pWS8zHgw89somdfcSl/POb/ix11+WoM3hH9ipbx3UgbzN3kA/SOq9QjLeR4
wOpFdwYTmnFUrieLzd6T9M8AyYhA1CfEerfEKyAWTKaWSHG47Fua7VnHNGZ9lihP
yH71AoGAKYK20orZ4SH4Aw1fIwZc/OkVVMb5LD6uLI9MIe5iDNmSo7ndUEj9GW+B
VB9cPf5M/MA7TUEODjHR121lVs8cjGuzzR0WJHv9CqwC8u4S6tOk4EL9UpL76t1L
25fcKNFv1yNT+ms4pPntY7F48M82kGC7rRm5iyy98ogXf28dHSg=
-----END RSA PRIVATE KEY-----

Alternativly you can sign your own cert with openssl

Now open in Firefox:
Settings->Advanced->Certificate and import it under "Cert Authority"



Create a simple webapp using http2

Install spdy and fs
npm install --save fs spdy

Spdy is needed to handly http2 requests and fs will handle our key and certfiles

Create the webserver by saving folling code as index.js in your projectroot
const spdy = require('spdy');
const fs = require('fs');


const options =
{
    key:fs.readFileSync('./etc/certs/server.key'),
    cert: fs.readFileSync('./etc/certs/server.crt')
}

spdy.createServer(options, (req, res)=>
{
    res.writeHead(200);
    res.end('Hello Client');

}).listen(8084);


Run your new http2 server
node index.js


This will bind a simple server on port 8084, so that you can surf http://nodejs.local:8084 and see "Hello Client"

If you open firebug, you will see, that your request will use http 2



This is AWESOME


Keine Kommentare:

Kommentar veröffentlichen