init project
This commit is contained in:
+19
@@ -0,0 +1,19 @@
|
||||
image: node:latest
|
||||
|
||||
stages:
|
||||
- build
|
||||
- test
|
||||
|
||||
job1:
|
||||
stage: build
|
||||
script:
|
||||
- npm install
|
||||
tags:
|
||||
- npm
|
||||
|
||||
job2:
|
||||
stage: test
|
||||
script:
|
||||
- npm test
|
||||
tags:
|
||||
- npm
|
||||
+1
@@ -0,0 +1 @@
|
||||
node_modules
|
||||
+4
@@ -0,0 +1,4 @@
|
||||
test:
|
||||
@./node_modules/.bin/mocha
|
||||
|
||||
.PHONY: test
|
||||
+51
@@ -0,0 +1,51 @@
|
||||
# split-ca
|
||||
|
||||
Simple node.js module to split a single certificate authority chain file (bundle, ca-bundle, ca-chain, etc.) into an array, as expected by the node.js tls api
|
||||
|
||||
## Installation
|
||||
|
||||
`npm install split-ca`
|
||||
|
||||
## Usage
|
||||
|
||||
Usage will depend on your server module of choice, but most https modules require an options hash with `ca`, `key`, and `cert`. Simply give split-ca the filepath of your bundle file.
|
||||
|
||||
```js
|
||||
var https = require('https');
|
||||
var fs = require('fs');
|
||||
|
||||
var splitca = require('split-ca');
|
||||
|
||||
var options = {
|
||||
ca: splitca("path/to/ca_bundle_file"),
|
||||
key:fs.readFileSync("path/to/server_key_file"),
|
||||
cert:fs.readFileSync("path/to/server_cert_file"),
|
||||
requestCert: true,
|
||||
rejectUnauthorized: true
|
||||
};
|
||||
|
||||
https.createServer(options, function (req, res) {
|
||||
res.writeHead(200);
|
||||
res.end("hello world\n");
|
||||
}).listen(8000);
|
||||
```
|
||||
|
||||
## Args
|
||||
|
||||
`split-ca('filepath','split-string','encoding')`
|
||||
|
||||
#### `filepath`
|
||||
|
||||
A standard node path to your object. An error is thrown if the file cannot be parsed, is not formatted properly.
|
||||
|
||||
#### `split-string`
|
||||
|
||||
Optional. Defaults to `"\n"`, can be replaced with anything.
|
||||
|
||||
#### `encoding`
|
||||
|
||||
Optional. Defaults to `"utf-8"`, can be replaced with anything accepted by node's `fs` module.
|
||||
|
||||
## Credits
|
||||
|
||||
Thanks to [Benjie Gillam](https://twitter.com/Benjie) for the [blog post and sample code](http://www.benjiegillam.com/2012/06/node-dot-js-ssl-certificate-chain/) that was unashamedly ripped for this module.
|
||||
+27
@@ -0,0 +1,27 @@
|
||||
var fs = require('fs');
|
||||
|
||||
module.exports = function (filepath, split, encoding) {
|
||||
split = typeof split !== 'undefined' ? split : "\n";
|
||||
encoding = typeof encoding !== 'undefined' ? encoding : "utf8";
|
||||
|
||||
var ca = [];
|
||||
var chain = fs.readFileSync(filepath, encoding);
|
||||
if(chain.indexOf("-END CERTIFICATE-") < 0 || chain.indexOf("-BEGIN CERTIFICATE-") < 0){
|
||||
throw Error("File does not contain 'BEGIN CERTIFICATE' or 'END CERTIFICATE'");
|
||||
}
|
||||
chain = chain.split(split);
|
||||
var cert = [];
|
||||
var _i, _len;
|
||||
for (_i = 0, _len = chain.length; _i < _len; _i++) {
|
||||
var line = chain[_i];
|
||||
if (!(line.length !== 0)) {
|
||||
continue;
|
||||
}
|
||||
cert.push(line);
|
||||
if (line.match(/-END CERTIFICATE-/)) {
|
||||
ca.push(cert.join(split));
|
||||
cert = [];
|
||||
}
|
||||
}
|
||||
return ca;
|
||||
}
|
||||
+38
@@ -0,0 +1,38 @@
|
||||
{
|
||||
"name": "split-ca",
|
||||
"version": "1.0.1",
|
||||
"description": "Simple module to split a single certificate authority chain file (aka: bundle, ca-bundle, ca-chain, etc.) into an array, as expected by the node.js tls api.",
|
||||
"main": "index.js",
|
||||
"scripts": {
|
||||
"test": "make test"
|
||||
},
|
||||
"repository": {
|
||||
"type": "git",
|
||||
"url": "https://github.com/bushong1/split-ca.git"
|
||||
},
|
||||
"keywords": [
|
||||
"nodejs",
|
||||
"ca",
|
||||
"chain",
|
||||
"ssl",
|
||||
"tls",
|
||||
"https",
|
||||
"certificate",
|
||||
"authority",
|
||||
"bundle",
|
||||
"ca-bundle",
|
||||
"ca-chain",
|
||||
"split",
|
||||
"server"
|
||||
],
|
||||
"author": "Charles Bushong",
|
||||
"license": "ISC",
|
||||
"bugs": {
|
||||
"url": "https://github.com/bushong1/split-ca/issues"
|
||||
},
|
||||
"homepage": "https://github.com/bushong1/split-ca",
|
||||
"devDependencies": {
|
||||
"chai": "^1.10.0",
|
||||
"mocha": "^2.1.0"
|
||||
}
|
||||
}
|
||||
+16
@@ -0,0 +1,16 @@
|
||||
MIIGzDCCBLSgAwIBAgIBATANBgkqhkiG9w0BAQUFADCBpjELMAkGA1UEBhMCVVMx
|
||||
DjAMBgNVBAgTBVRleGFzMRQwEgYDVQQHEwtTYW4gQW50b25pbzEaMBgGA1UEChMR
|
||||
R2xvYmFsU0NBUEUsIEluYy4xFDASBgNVBAsTC0VuZ2luZWVyaW5nMRUwEwYDVQQD
|
||||
EwxtaWtlLXJvb3QtY2ExKDAmBgkqhkiG9w0BCQEWGW1oYW1iaWRnZUBnbG9iYWxz
|
||||
Y2FwZS5jb20wHhcNMTAxMTE4MjEyMzA4WhcNMTUxMTE3MjEyMzA4WjCBmDELMAkG
|
||||
A1UEBhMCVVMxDjAMBgNVBAgTBVRleGFzMRowGAYDVQQKExFHbG9iYWxTQ0FQRSwg
|
||||
SW5jLjEUMBIGA1UECxMLRW5naW5lZXJpbmcxHTAbBgNVBAMTFG1pa2UtaW50ZXJt
|
||||
ZWRpYXRlLWNhMSgwJgYJKoZIhvcNAQkBFhltaGFtYmlkZ2VAZ2xvYmFsc2NhcGUu
|
||||
Y29tMIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEAsF+vlQfZnssDsqFx
|
||||
IXCGHST1jiTHJGGHiiwc9Qb1NPDbyvcdNXvcfkdyYjd8VlYyo3/jnj6xx3PxzJhG
|
||||
NmnBGJ0I7h/RFJaG7nmGfeWUHCLsVjGfQeEjC++d6zzE3unPOiLVIhv9abD6kISa
|
||||
hLdltOBcT19mqg1yG4Q4XExjeYmSYGFiDIdv+WwwUssTyPdppaaWcsjNaFcmuopU
|
||||
RfmcfULPFwvFN6LsgvSTYwYe9l8421fA5c+WiR1JomjGuJT/0sITpzQRCenWi0S0
|
||||
WZuftT61+fU0/OxINhgO4yK6C1eOoaxmoEG2oVm2o4Bjy9ceYN2UqdRGt8t/23/h
|
||||
Wog3vEwdoHqghrjeiGWWs98qfzINKokiMd7APcxdkZ1SzyvOEWht4V3/XedleiMx
|
||||
8WGjbVtRg/k4Hgf2TGwxcw==
|
||||
+18
@@ -0,0 +1,18 @@
|
||||
-----BEGIN CERTIFICATE-----
|
||||
MIIGzDCCBLSgAwIBAgIBATANBgkqhkiG9w0BAQUFADCBpjELMAkGA1UEBhMCVVMx
|
||||
DjAMBgNVBAgTBVRleGFzMRQwEgYDVQQHEwtTYW4gQW50b25pbzEaMBgGA1UEChMR
|
||||
R2xvYmFsU0NBUEUsIEluYy4xFDASBgNVBAsTC0VuZ2luZWVyaW5nMRUwEwYDVQQD
|
||||
EwxtaWtlLXJvb3QtY2ExKDAmBgkqhkiG9w0BCQEWGW1oYW1iaWRnZUBnbG9iYWxz
|
||||
Y2FwZS5jb20wHhcNMTAxMTE4MjEyMzA4WhcNMTUxMTE3MjEyMzA4WjCBmDELMAkG
|
||||
A1UEBhMCVVMxDjAMBgNVBAgTBVRleGFzMRowGAYDVQQKExFHbG9iYWxTQ0FQRSwg
|
||||
SW5jLjEUMBIGA1UECxMLRW5naW5lZXJpbmcxHTAbBgNVBAMTFG1pa2UtaW50ZXJt
|
||||
ZWRpYXRlLWNhMSgwJgYJKoZIhvcNAQkBFhltaGFtYmlkZ2VAZ2xvYmFsc2NhcGUu
|
||||
Y29tMIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEAsF+vlQfZnssDsqFx
|
||||
IXCGHST1jiTHJGGHiiwc9Qb1NPDbyvcdNXvcfkdyYjd8VlYyo3/jnj6xx3PxzJhG
|
||||
NmnBGJ0I7h/RFJaG7nmGfeWUHCLsVjGfQeEjC++d6zzE3unPOiLVIhv9abD6kISa
|
||||
hLdltOBcT19mqg1yG4Q4XExjeYmSYGFiDIdv+WwwUssTyPdppaaWcsjNaFcmuopU
|
||||
RfmcfULPFwvFN6LsgvSTYwYe9l8421fA5c+WiR1JomjGuJT/0sITpzQRCenWi0S0
|
||||
WZuftT61+fU0/OxINhgO4yK6C1eOoaxmoEG2oVm2o4Bjy9ceYN2UqdRGt8t/23/h
|
||||
Wog3vEwdoHqghrjeiGWWs98qfzINKokiMd7APcxdkZ1SzyvOEWht4V3/XedleiMx
|
||||
8WGjbVtRg/k4Hgf2TGwxcw==
|
||||
-----END CERTIFICATE-----
|
||||
+13
@@ -0,0 +1,13 @@
|
||||
-----BEGIN CERTIFICATE-----
|
||||
MIIG4jCCBMqgAwIBAgIJAJjguYVnU08GMA0GCSqGSIb3DQEBBQUAMIGmMQswCQYD
|
||||
VQQGEwJVUzEOMAwGA1UECBMFVGV4YXMxFDASBgNVBAcTC1NhbiBBbnRvbmlvMRow
|
||||
GAYDVQQKExFHbG9iYWxTQ0FQRSwgSW5jLjEUMBIGA1UECxMLRW5naW5lZXJpbmcx
|
||||
FTATBgNVBAMTDG1pa2Utcm9vdC1jYTEoMCYGCSqGSIb3DQEJARYZbWhhbWJpZGdl
|
||||
QGdsb2JhbHNjYXBlLmNvbTAeFw0xMDExMTgyMTE5NDdaFw0xNTExMTcyMTE5NDda
|
||||
MIGmMQswCQYDVQQGEwJVUzEOMAwGA1UECBMFVGV4YXMxFDASBgNVBAcTC1NhbiBB
|
||||
bnRvbmlvMRowGAYDVQQKExFHbG9iYWxTQ0FQRSwgSW5jLjEUMBIGA1UECxMLRW5n
|
||||
aW5lZXJpbmcxFTATBgNVBAMTDG1pa2Utcm9vdC1jYTEoMCYGCSqGSIb3DQEJARYZ
|
||||
bWhhbWJpZGdlQGdsb2JhbHNjYXBlLmNvbTCCAiIwDQYJKoZIhvcNAQEBBQADggIP
|
||||
xYK3mO1034kBdDxmVoBeEwfjWWPyC/uyFGwCNZCzoAQGMxNAnj33NBiCLHJRo1Z5
|
||||
BxirSSMxOT4LEkmkOhuTyKB0TJZf+8wP8pK5BsO3xjO+uM1K3LY=
|
||||
-----END CERTIFICATE-----
|
||||
+31
@@ -0,0 +1,31 @@
|
||||
-----BEGIN CERTIFICATE-----
|
||||
MIIGzDCCBLSgAwIBAgIBATANBgkqhkiG9w0BAQUFADCBpjELMAkGA1UEBhMCVVMx
|
||||
DjAMBgNVBAgTBVRleGFzMRQwEgYDVQQHEwtTYW4gQW50b25pbzEaMBgGA1UEChMR
|
||||
R2xvYmFsU0NBUEUsIEluYy4xFDASBgNVBAsTC0VuZ2luZWVyaW5nMRUwEwYDVQQD
|
||||
EwxtaWtlLXJvb3QtY2ExKDAmBgkqhkiG9w0BCQEWGW1oYW1iaWRnZUBnbG9iYWxz
|
||||
Y2FwZS5jb20wHhcNMTAxMTE4MjEyMzA4WhcNMTUxMTE3MjEyMzA4WjCBmDELMAkG
|
||||
A1UEBhMCVVMxDjAMBgNVBAgTBVRleGFzMRowGAYDVQQKExFHbG9iYWxTQ0FQRSwg
|
||||
SW5jLjEUMBIGA1UECxMLRW5naW5lZXJpbmcxHTAbBgNVBAMTFG1pa2UtaW50ZXJt
|
||||
ZWRpYXRlLWNhMSgwJgYJKoZIhvcNAQkBFhltaGFtYmlkZ2VAZ2xvYmFsc2NhcGUu
|
||||
Y29tMIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEAsF+vlQfZnssDsqFx
|
||||
IXCGHST1jiTHJGGHiiwc9Qb1NPDbyvcdNXvcfkdyYjd8VlYyo3/jnj6xx3PxzJhG
|
||||
NmnBGJ0I7h/RFJaG7nmGfeWUHCLsVjGfQeEjC++d6zzE3unPOiLVIhv9abD6kISa
|
||||
hLdltOBcT19mqg1yG4Q4XExjeYmSYGFiDIdv+WwwUssTyPdppaaWcsjNaFcmuopU
|
||||
RfmcfULPFwvFN6LsgvSTYwYe9l8421fA5c+WiR1JomjGuJT/0sITpzQRCenWi0S0
|
||||
WZuftT61+fU0/OxINhgO4yK6C1eOoaxmoEG2oVm2o4Bjy9ceYN2UqdRGt8t/23/h
|
||||
Wog3vEwdoHqghrjeiGWWs98qfzINKokiMd7APcxdkZ1SzyvOEWht4V3/XedleiMx
|
||||
8WGjbVtRg/k4Hgf2TGwxcw==
|
||||
-----END CERTIFICATE-----
|
||||
-----BEGIN CERTIFICATE-----
|
||||
MIIG4jCCBMqgAwIBAgIJAJjguYVnU08GMA0GCSqGSIb3DQEBBQUAMIGmMQswCQYD
|
||||
VQQGEwJVUzEOMAwGA1UECBMFVGV4YXMxFDASBgNVBAcTC1NhbiBBbnRvbmlvMRow
|
||||
GAYDVQQKExFHbG9iYWxTQ0FQRSwgSW5jLjEUMBIGA1UECxMLRW5naW5lZXJpbmcx
|
||||
FTATBgNVBAMTDG1pa2Utcm9vdC1jYTEoMCYGCSqGSIb3DQEJARYZbWhhbWJpZGdl
|
||||
QGdsb2JhbHNjYXBlLmNvbTAeFw0xMDExMTgyMTE5NDdaFw0xNTExMTcyMTE5NDda
|
||||
MIGmMQswCQYDVQQGEwJVUzEOMAwGA1UECBMFVGV4YXMxFDASBgNVBAcTC1NhbiBB
|
||||
bnRvbmlvMRowGAYDVQQKExFHbG9iYWxTQ0FQRSwgSW5jLjEUMBIGA1UECxMLRW5n
|
||||
aW5lZXJpbmcxFTATBgNVBAMTDG1pa2Utcm9vdC1jYTEoMCYGCSqGSIb3DQEJARYZ
|
||||
bWhhbWJpZGdlQGdsb2JhbHNjYXBlLmNvbTCCAiIwDQYJKoZIhvcNAQEBBQADggIP
|
||||
xYK3mO1034kBdDxmVoBeEwfjWWPyC/uyFGwCNZCzoAQGMxNAnj33NBiCLHJRo1Z5
|
||||
BxirSSMxOT4LEkmkOhuTyKB0TJZf+8wP8pK5BsO3xjO+uM1K3LY=
|
||||
-----END CERTIFICATE-----
|
||||
+1
@@ -0,0 +1 @@
|
||||
!.gitignore
|
||||
+45
@@ -0,0 +1,45 @@
|
||||
var expect = require("chai").expect;
|
||||
var fs = require("fs");
|
||||
var split_ca = require("../index.js");
|
||||
|
||||
describe('split', function(){
|
||||
var emptyFile = "test/certs/empty.ca";
|
||||
var missingFile = "test/certs/missing.ca";
|
||||
var unreadableFile = "test/certs/unreadable.ca";
|
||||
var garbageFile = "test/certs/garbage.ca";
|
||||
var ca0file = "test/certs/split0.ca";
|
||||
var ca1file = "test/certs/split1.ca";
|
||||
var caBundleFile = "test/certs/test-chain.bundle";
|
||||
var ca0 = fs.readFileSync(ca0file,"utf8").toString().replace(/\n$/, '');
|
||||
var ca1 = fs.readFileSync(ca1file,"utf8").toString().replace(/\n$/, '');
|
||||
describe('multiple ca chain', function(){
|
||||
it('should return an array of CA chain strings', function(){
|
||||
var split = split_ca(caBundleFile);
|
||||
expect(split).to.be.an("array");
|
||||
expect(split).to.have.members([ca0, ca1]);
|
||||
});
|
||||
});
|
||||
describe('single ca chain', function(){
|
||||
it('should return an array of one CA string', function(){
|
||||
var split = split_ca(ca1file);
|
||||
expect(split).to.be.an("array");
|
||||
expect(split).to.have.members([ca1]);
|
||||
expect(split).to.not.have.members([ca0]);
|
||||
});
|
||||
});
|
||||
describe('empty file', function(){
|
||||
it('should throw a bad file error', function(){
|
||||
expect(function(){split_ca(emptyFile)}).to.throw(Error);
|
||||
});
|
||||
});
|
||||
describe('directory instead of file', function(){
|
||||
it('should throw a bad file error', function(){
|
||||
expect(function(){split_ca(unreadableFile)}).to.throw(Error);
|
||||
});
|
||||
});
|
||||
describe('garbage file', function(){
|
||||
it('should throw a bad file error', function(){
|
||||
expect(function(){ split_ca(garbageFile)}).to.throw(Error);
|
||||
});
|
||||
});
|
||||
});
|
||||
Reference in New Issue
Block a user