コード例 #1
0
function create_default_certificates(done) {

    var base_name = certificateDir;

    var hostname = config.hostname;
    console.log(" hostname = ", hostname);

    var clientURN = makeApplicationUrn(hostname, "NodeOPCUA-Client");
    var serverURN = makeApplicationUrn(hostname, "NodeOPCUA-Server");
    var discoveryServerURN = makeApplicationUrn(hostname, "NodeOPCUA-DiscoveryServer");

    var task1 = [

        displayTitle.bind(null, "Create  Application Certificate for Server & its private key"),
        __create_default_certificates.bind(null, base_name, "client_", clientURN),

        displayTitle.bind(null, "Create  Application Certificate for Client & its private key"),
        __create_default_certificates.bind(null, base_name, "server_", serverURN),

        displayTitle.bind(null, "Create  Application Certificate for DiscoveryServer & its private key"),
        __create_default_certificates.bind(null, base_name, "discoveryServer_", discoveryServerURN)

    ];
    async.series(task1, done);
}
コード例 #2
0
function createCertificateFromCommandLine() {

    //example : node bin\crypto_create_CA.js --new --selfSigned --applicationUri urn:localhost:MyProduct --prefix aa --force

    assert(_.isString(argv.applicationUri));
    // urn:COMPUTERNAME:PRODUCT

    assert(argv.applicationUri.length < 64);
    var options = {
        applicationUri: argv.applicationUri || makeApplicationUrn(get_fully_qualified_domain_name(), "NodeOPCUA-Server")
    };

    assert(_.isString(argv.prefix));
    options.prefix = argv.prefix;
    options.privateKey = argv.privateKey;
    options.selfSigned = argv.selfSigned;

    createNewCertificate(options,function(){
        console.log("Done ...");
    });
}
コード例 #3
0
/**
 *
 * @param options
 * @param options.commonName       {String}
 * @param options.organization     {String}
 * @param options.organizationUnit {String}
 * @param options.locality         {String}
 * @param options.state            {String}
 * @param options.country          {String}
 *
 * @param options.applicationUri   {Numbers}
 * @param options.domainNames      {Array<String>}
 * @param options.ipAddresses      {Array<String>}
 * @param options.keySize          {Numbers}
 *
 * @param options.startDate        {Date}= today
 * @param options.validity         {Number} number of days for validation [15*360 =15 years]
 * @param options.selfSigned       {Boolean}
 *
 * @param options.prefix           {String} "new_certificate";
 *
 * @param options.privateKey       {String} the privateKey filename or null, if private key need to be generated
 * @param callback {Function}
 */
function createNewCertificate(options,callback ) {

    assert(_.isFunction(callback));


    var tasks = [
        install_prerequisite.bind(null),
        find_openssl.bind(null),
        construct_CertificateAuthority.bind(null)
    ];


    var base_name =  make_path(__dirname, "../certificates/");

    // -----------------------------------------------------------------------------
    // Subject
    // -----------------------------------------------------------------------------
    options.commonName       = options.commonName       || config.commonName;
    options.organization     = options.organization     || config.organization;
    options.organizationUnit = options.organizationUnit || config.organizationUnit;
    options.locality         = options.locality         || config.locality;
    options.state            = options.state            || config.state;
    options.country          = options.country          || config.country;

    assert(options.country.length === 2);

    // -----------------------------------------------------------------------------
    // OPCUA Information
    // -----------------------------------------------------------------------------
    options.applicationUri = options.applicationUri || makeApplicationUrn(hostname, "NodeOPCUA-Client");
    options.domainNames   = [
        "localhost", "oursel.homenet.org"
    ];
    options.ipAddresses = options.ipAddresses || [];

    // -----------------------------------------------------------------------------
    // Certificate settings
    // -----------------------------------------------------------------------------
    options.keySize = options.keySize || config.keySize; // bits
    assert(options.keySize === 1024 || options.keySize === 2048 || options.keySize === 4096);
    options.validity = options.validity || config.validity;

    options.selfSigned = !!(options.selfSigned);
    options.startDate = options.startDate || today;

    assert(options.startDate instanceof Date);
    assert(_.isNumber(options.validity));


    var private_key;

    if (options.privateKey) {

        options.privateKey = make_path(process.cwd(),options.privateKey);

        if (!fs.existsSync(options.privateKey)) {
            throw new Error("Cannot find public key ",options.privateKey);
        }
        private_key  = options.privateKey;
        console.log("          reusing private key : ",private_key);

    } else {
        options.prefix = options.prefix || "new_certificate_XX";
        private_key  = make_path(base_name, options.prefix +  "_private_key.pem");

        tasks.push(createPrivateKey.bind(null, private_key, options.keySize));
    }

    var certificate  =  make_path(base_name, options.prefix + "_certificate.pem");


    //xx getPublicKeyFromPrivateKey.bind(null, private_key, public_key),
    tasks = tasks.concat([

        _createCertificate.bind(null,options.selfSigned ,certificate, private_key,options.applicationUri,options.startDate,options.validity),

        displayTitle.bind(null, " Result"),

        function(callback) {

            console.log("  private key : ",private_key.cyan);
            //xx console.log("  public  key : ", public_key.cyan);
            console.log("  certificate : ",certificate.cyan);
            callback();
        }
    ]);
    async.series(tasks, callback);
}