npm package discovery and stats viewer.

Discover Tips

  • General search

    [free text search, go nuts!]

  • Package details

    pkg:[package-name]

  • User packages

    @[username]

Sponsor

Optimize Toolset

I’ve always been into building performant and accessible sites, but lately I’ve been taking it extremely seriously. So much so that I’ve been building a tool to help me optimize and monitor the sites that I build to make sure that I’m making an attempt to offer the best experience to those who visit them. If you’re into performant, accessible and SEO friendly sites, you might like it too! You can check it out at Optimize Toolset.

About

Hi, 👋, I’m Ryan Hefner  and I built this site for me, and you! The goal of this site was to provide an easy way for me to check the stats on my npm packages, both for prioritizing issues and updates, and to give me a little kick in the pants to keep up on stuff.

As I was building it, I realized that I was actually using the tool to build the tool, and figured I might as well put this out there and hopefully others will find it to be a fast and useful way to search and browse npm packages as I have.

If you’re interested in other things I’m working on, follow me on Twitter or check out the open source projects I’ve been publishing on GitHub.

I am also working on a Twitter bot for this site to tweet the most popular, newest, random packages from npm. Please follow that account now and it will start sending out packages soon–ish.

Open Software & Tools

This site wouldn’t be possible without the immense generosity and tireless efforts from the people who make contributions to the world and share their work via open source initiatives. Thank you 🙏

© 2024 – Pkg Stats / Ryan Hefner

balena-certificate-client

v1.1.1

Published

Register certificates and A records for a device

Downloads

17

Readme

balena-certificate-client

Client/Server library for registering device certificates.

This library provides a method for creating and retrieving certificates for devices based upon the katapult toolchain and balena-on-balena framework.

It uses the Let's Encrypt platform for generating certificates (which are valid for 90 days). The library simplifies the generation process, including automating the DNS challenges required for wildcarded certificates which the Development Environment utilises, as well as writing A records to match a given IP address where the device is located on an engineer's local subnet.

Usage

BalenaCertificateClient

The library consists of a class which exposes a single method for requesting certificates. A single instance of the class can be used to generate certificates for many different devices, if required.

Constructor Object Arguments:

  • dnsUpdateHost - The hostname where the DNS Update Service is located
  • dnsUpdatePort - The port on which the DNS Update Service is listening
  • authToken - An authorisation token unique to the user requesting the certificates
  • configRoot - An absolute path to where the library should store Let's Encrypt configuration data

BalenaCertificateClient.requestCertificate

This method:

  1. Request a certificate for a given domain/subdomains from Let's Encrypt
  2. Respond to DNS challenges for the domain, assuming it can contact an appropriate DNS Update Service
  3. Retrieve and store the certificate
  4. Create/Update a DNS A record for the specified sub-domain pointing to the local IP of a device

Arguments Object:

  • domain - The parent domain of the certificates to produce
  • subdomains[optional] - An array of subdomains that will be used as Subject Alternative Names (SANs) in the certificate. Note that the first subdomain found will be used as the Common Name (CN). Should no subdomains be passed, the certificate will be created for the domain passed.
  • ip - The IP address of the local device
  • renewing - Must be true if the certificate already exists, else false
  • email - An email address to register with Let's Encrypt for the certificate generation/renewal. This must be valid
  • outputLocation[optional] - If set, the CA, EEC and private key will be written into this location in appropriately named files ([ca|certificate|private-key].pem)

Returns: Object consisting of:

  • ca - A PEM encoded CA certificate that signed the EEC certificate
  • certificate - A PEM encoded EEC certificate
  • privateKey - A PEM encoded private key used to sign the CSR for the EEC certificate

Note: Whilst the object returned includes a privateKey property, the filename requested by an outputLocation parameter to the requestCertificate() method will be saved as private-key.pem.

Usage

import { BalenaCertificateClient } from 'balena-certificate-client';

const certClientInst = new BalenaCertificateClient({
    dnsUpdateHost: 'localhost',
    dnsUpdatePort: 443,
    authToken: '12345',
    configRoot: `${process.cwd()}/config`
});

certClientInst.requestCertificate({
    domain: 'somedomain.io',
    subdomains: [
        '*.1234567890abcdef',
        '*.devices.1234567890abcdef',
    ],
    ip: '1.2.3.4',
    email: '[email protected]',
    renewing: false,
    outputLocation: '/some/other/path'
}).then((certificates) => {
    console.log(certificates.ca);
    console.log(certificates.certificate);
    console.log(certificates.privateKey);
});