Skip to content

Custom Certificates

tlsx provides powerful options for creating custom certificates tailored to your specific needs.

Certificate Customization Options

When generating certificates with tlsx, you can customize various aspects:

Basic Certificate Properties

  • Domain Names: Primary domain and additional domains
  • Validity Period: How long the certificate will be valid
  • Serial Number: Custom or automatically generated

Certificate Subject Information

  • Common Name (CN): Typically your primary domain
  • Organization (O): Your company or project name
  • Organizational Unit (OU): Department or team
  • Country (C): Two-letter country code
  • State/Province (ST): Your state or province
  • Locality (L): Your city or locality

Advanced Properties

  • Key Size: Strength of the certificate key
  • Subject Alternative Names (SANs): Additional identities
  • Key Usage: Specific constraints on key usage
  • Extended Key Usage: Additional usage constraints

Example: Creating a Fully Customized Certificate

Using the library:

ts
import { generateCertificate } from '@stacksjs/tlsx'

const cert = await generateCertificate({
  domain: 'primary.example.local',
  domains: ['api.example.local', 'admin.example.local'],
  rootCA: existingCA,

  // Certificate validity
  validityDays: 730, // 2 years

  // Certificate subject details
  commonName: 'Example Project Local',
  organizationName: 'My Company, Inc.',
  countryName: 'US',
  stateName: 'California',
  localityName: 'Playa Vista',

  // Advanced options
  altNameIPs: ['127.0.0.1', '192.168.1.100'],
  altNameURIs: ['localhost'],

  // Key usage extensions
  keyUsage: {
    digitalSignature: true,
    keyEncipherment: true,
  },

  extKeyUsage: {
    serverAuth: true,
    clientAuth: true,
  },
})

Using the CLI with a configuration file:

ts
// tls.config.ts
export default {
  domain: 'primary.example.local',
  domains: ['api.example.local', 'admin.example.local'],
  validityDays: 730,
  organizationName: 'My Company, Inc.',
  countryName: 'US',
  stateName: 'California',
  localityName: 'Playa Vista',
  altNameIPs: ['127.0.0.1', '192.168.1.100'],
}

Storage Options

You can also customize where and how certificates are stored:

ts
import { storeCertificate } from '@stacksjs/tlsx'

const certPath = storeCertificate(cert, {
  basePath: '/custom/path/to/certs',
  certPath: 'my-custom-cert.crt',
  keyPath: 'my-custom-key.key',
})

Released under the MIT License.