Попробовал реализацию TLS на JavaScript.
Установил
github.com/digitalbazaar/forge
Сделал самоподписанный сертификат в pkcs12
openssl req -x509 -newkey rsa:4096 -keyout key.pem -out cert.pem -days 365
openssl pkcs12 -export -out keyStore.p12 -inkey key.pem -in cert.pem
Атрибуты openssl x509 -noout -subject -in cert.pem
subject= /C=AU/ST=Some-State/L=city/O=Internet Widgits Pty Ltd/OU=un/CN=fqdn/emailAddress=email
установил node.js
nodejs.org/en/
сделал файл test.js
var forge = require('node-forge');
var fs = require('fs');
var keyFile = fs.readFileSync("./keyStore.p12", 'binary');
var p12Asn1 = forge.asn1.fromDer(keyFile);
// pkcs12 с паролем
var p12 = forge.pkcs12.pkcs12FromAsn1(p12Asn1, '123456');
var bags = p12.getBags({bagType: forge.pki.oids.certBag});
var bag = bags[forge.pki.oids.certBag][0];
//аттрибуты сертификата
console.log(bag.cert.subject.getField('C').value);
console.log(bag.cert.subject.getField('ST').value);
console.log(bag.cert.subject.getField('L').value);
console.log(bag.cert.subject.getField('O').value);
console.log(bag.cert.subject.getField('OU').value);
console.log(bag.cert.subject.getField('CN').value);
console.log(bag.cert.subject.getField('E').value);
// срок действия сертификата
console.log(bag.cert.validity.notBefore);
console.log(bag.cert.validity.notAfter);
var pki = forge.pki;
// сам сертификат
var pem = pki.certificateToPem(bag.cert);
console.log(pem);
выполнил
node test.js
Получил
AU
Some-State
city
Internet Widgits Pty Ltd
un
fqdn
email
2017-06-03T14:56:50.000Z
2018-06-03T14:56:50.000Z
-----BEGIN CERTIFICATE-----
........................
Теперь, насколько я понимаю,
нужно отослать сертификат на сервер и валидировать его
его посредством
- CA bundle
- intermediate certificates
- CRL списки (Certificate revocation list)
Правильно ?
Буду очень рад продолжению темы.
Размер скомпилированной библиотеки для браузера forge.min.js составляет около 271 kb
Сейчас это уже немного.
Если кто протестирует библиотеку в браузере, просьба отписаться.