Excluded admin-code/*SECRETS.inc (real Nitrokey HSM PINs in the public source repo) — SECRETS.inc.example template added in their place. Rotation/history-purge ruling pending in #783. legacy-* trees exempt from lint/pointer checks (historical verbatim code). https://projects.knownelement.com/issues/769#note-4152
This commit is contained in:
@@ -7,7 +7,7 @@
|
||||
# they don't need this file.
|
||||
|
||||
# Project-specific overrides for check-rules.sh
|
||||
export PROJECT_DOC_EXEMPT ?= AGENTS.md STATUS.md WORKING.md README.md ADOPTING.md LICENSE .env.example questions-v1.md BASELINE-PROMPT.md PATTERNS.md
|
||||
export PROJECT_DOC_EXEMPT ?= legacy-* AGENTS.md STATUS.md WORKING.md README.md ADOPTING.md LICENSE .env.example questions-v1.md BASELINE-PROMPT.md PATTERNS.md
|
||||
export PROJECT_DISCOURSE_HOST ?= community.turnsys.com
|
||||
|
||||
.PHONY: setup validate fast lint test garden up down status clean help
|
||||
|
||||
@@ -0,0 +1,6 @@
|
||||
# Port provenance
|
||||
|
||||
Imported from KNEL/TSYS-CA@master (2026-09-04) per OQ2 ruling (#769). The two
|
||||
*SECRETS.inc files were excluded — they contained real Nitrokey HSM PINs in
|
||||
the public source repo (security ticket #783, founder rotation decision
|
||||
pending). Legacy repo now carries a redirect README.
|
||||
@@ -0,0 +1,9 @@
|
||||
# TSYS CA
|
||||
|
||||
## Repo description
|
||||
|
||||
## Repo issues
|
||||
https://projects.knownelement.com/project/reachableceo-vptechnicaloperations/kanban
|
||||
|
||||
## Repo discussion
|
||||
https://community.turnsys.com/c/chiefoperationsandfinanceofficer/vptechnicaloperations/20
|
||||
@@ -0,0 +1,11 @@
|
||||
PKI CA Scripts
|
||||
==============
|
||||
|
||||
**FAILURE TO FOLLOW SECURITY PROCEDURES CAN AND WILL RESULT IN CONSEQUENCES UP TO AND INCLUDING LEGAL ACTION. YOU ARE WARNED.**
|
||||
|
||||
These scripts facilitate the creation of a root certificate authority and one intermediate certificate.
|
||||
|
||||
These scripts have only been tested on the live-build Debian 9 environment.
|
||||
|
||||
|
||||
|
||||
@@ -0,0 +1,6 @@
|
||||
#!/bin/bash
|
||||
# TEMPLATE ONLY — real values lived in *SECRETS.inc which were EXCLUDED from
|
||||
# this port after a secret-scan (Nitrokey SO PIN + USER PIN; see #783).
|
||||
# Populate at deploy time from ~/.creds or the secrets store — never commit.
|
||||
export SECRET_SOPIN=""
|
||||
export SECRET_USER_PIN=""
|
||||
@@ -0,0 +1,5 @@
|
||||
#!/bin/bash
|
||||
|
||||
# This resets the counters on the HSM and ensures the PIN is what we want for now.
|
||||
sc-hsm-tool --initialize --so-pin 1636511164917894 --pin 712583
|
||||
sc-hsm-tool
|
||||
@@ -0,0 +1,226 @@
|
||||
#!/bin/bash
|
||||
###########################################################################
|
||||
#user Variables
|
||||
#Must changes these variables
|
||||
###########################################################################
|
||||
|
||||
|
||||
###########################################################################
|
||||
#Program Variables #
|
||||
#Dont change these variables unless you know what you are doing) #
|
||||
###########################################################################
|
||||
|
||||
# Which OpenSSL config file are we using for this
|
||||
export OPENSSL_CONF=$PWD/openssl.cnf
|
||||
|
||||
# Changed because this device is already previously initialized.
|
||||
export FACTORY_DEFAULT_SOPIN="1636511164917894"
|
||||
|
||||
#OEM Default SOPIN
|
||||
#export FACTORY_DEFAULT_SOPIN="3537363231383830"
|
||||
|
||||
###########################################################################
|
||||
#Function definitions #
|
||||
###########################################################################
|
||||
|
||||
function exit_error()
|
||||
{
|
||||
echo
|
||||
echo " FATAL ERROR: $1"
|
||||
echo " Script aborted."
|
||||
echo
|
||||
echo "-------------------------------------------------------------------------------"
|
||||
|
||||
exit 1
|
||||
}
|
||||
|
||||
###########################################################################
|
||||
# Preflight work, exit on any errors #
|
||||
###########################################################################
|
||||
|
||||
# Banner and instructions for the user.
|
||||
/usr/bin/clear
|
||||
echo "==============================================================================="
|
||||
echo " Offline Root CA Generator"
|
||||
echo
|
||||
echo "FAILURE TO FOLLOW SECURITY PROCEDURES CAN AND WILL RESULT IN CONSEQUENCES UP TO"
|
||||
echo "AND INCLUDING LEGAL ACTION. YOU ARE WARNED."
|
||||
echo
|
||||
echo " Right now, you should be sitting inside the SCIF, reading this on the computer formerly contained in the safe. Before we begin, ensure that the only devices plugged into this machine are:"
|
||||
echo
|
||||
echo " * The *RED* PNY 8GB USB thumbdrive, with a GREEN 'PKI' tag."
|
||||
echo " * The *ORANGE* USB Thumbdrive that was in the safe with the former."
|
||||
echo
|
||||
|
||||
echo " When the process begins, you will be prompted to insert the 'R' HSM USB device, and you will then be prompted for the USER PIN set for the device a total of THREE times."
|
||||
echo
|
||||
echo "You may hit CTRL-C now to cancel execution of this script."
|
||||
echo
|
||||
read -p "==============================================================================="
|
||||
|
||||
#Check for prerequiste packages
|
||||
echo "Preflight: Checking installed packages"
|
||||
echo "-------------------------------------------------------------------------------"
|
||||
echo
|
||||
|
||||
PKG_LIST="libccid pcscd pcsc-tools opensc libengine-pkcs11-openssl openssl"
|
||||
|
||||
for pkg in $PKG_LIST; do
|
||||
echo -n "Checking for package $pkg: ";
|
||||
if [ $(dpkg -l | grep $pkg -c) -lt 1 ]; then
|
||||
echo "missing!"
|
||||
exit_error "Required package '$pkg' is not installed."
|
||||
else
|
||||
echo "found.";
|
||||
fi
|
||||
done
|
||||
echo
|
||||
|
||||
echo "-------------------------------------------------------------------------------"
|
||||
echo "Preflight: Checking configuration file"
|
||||
echo "-------------------------------------------------------------------------------"
|
||||
echo
|
||||
# Load in the SECRET variables
|
||||
. ./offline-SECRETS.inc
|
||||
|
||||
#Check the SOPIN
|
||||
if [ $SECRET_SOPIN = "0000000000000000" ] ; then
|
||||
exit_error "SOPIN is still default. Check offline-SECRETS.inc."
|
||||
fi
|
||||
|
||||
export SECRET_SOPIN_LENGTH=$(echo $SECRET_SOPIN|wc -c)
|
||||
|
||||
if [ $SECRET_SOPIN_LENGTH -lt 17 ]; then
|
||||
exit_error "HSM SOPIN is too short. Check offline-SECRETS.inc."
|
||||
fi
|
||||
|
||||
#Check the USERPIN
|
||||
if [ "$SECRET_USER_PIN" = "0000000000000000" ] ; then
|
||||
exit_error "USER PIN is still default. Check offline-SECRETS.inc."
|
||||
fi
|
||||
|
||||
export SECRET_USERPIN_LENGTH=$(echo $SECRET_USER_PIN|wc -c)
|
||||
|
||||
if [ $SECRET_USERPIN_LENGTH -lt 7 ]; then
|
||||
exit_error "USER PIN is too short. Check offline-SECRETS.inc."
|
||||
fi
|
||||
|
||||
echo
|
||||
echo "Length and content check complete."
|
||||
echo
|
||||
|
||||
#Create directories to hold the bits
|
||||
echo "-------------------------------------------------------------------------------"
|
||||
echo "Preflight: Creating certificate directory structure"
|
||||
echo "-------------------------------------------------------------------------------"
|
||||
|
||||
if [ -d "ca" ]; then
|
||||
exit_error "Certificate directory exists. Please remove manually."
|
||||
fi
|
||||
|
||||
mkdir -vp ca/root/{certs,crl,csr,newcerts}
|
||||
mkdir -vp ca/{client,server}/{certs,csr,pfx,private}
|
||||
touch ca/root/database
|
||||
echo 1000 | tee ca/root/{serial,crlnumber}
|
||||
chmod -v 700 ca/{client,server}/private
|
||||
echo
|
||||
|
||||
echo "-------------------------------------------------------------------------------"
|
||||
echo "Preflight: Verifying absence of HSM"
|
||||
echo "-------------------------------------------------------------------------------"
|
||||
echo
|
||||
|
||||
# Detect HSMs and prompt until gone.
|
||||
DETECTLOOP=1;
|
||||
while [ $DETECTLOOP = 1 ]; do
|
||||
if [ $(pkcs11-tool --module /usr/lib/x86_64-linux-gnu/opensc-pkcs11.so -L 2>&1 | grep -c Slot) -gt 0 ]; then
|
||||
read -p "WARNING: There is a hardware security module plugged into this machine. Please remove it now, and press ENTER."
|
||||
echo
|
||||
else
|
||||
DETECTLOOP=0
|
||||
fi
|
||||
done
|
||||
|
||||
echo "No existing HSM present."
|
||||
echo
|
||||
echo "-------------------------------------------------------------------------------"
|
||||
|
||||
echo "==============================================================================="
|
||||
echo "Offline Root CA Generation"
|
||||
echo "==============================================================================="
|
||||
echo
|
||||
|
||||
############################################################################
|
||||
#offline Root HSM Stuff
|
||||
############################################################################
|
||||
|
||||
read -p "Insert the Nitrokey HSM tagged as 'R' and press ENTER to continue."
|
||||
echo
|
||||
|
||||
# Trust, but verify
|
||||
if [ $(pkcs11-tool --module /usr/lib/x86_64-linux-gnu/opensc-pkcs11.so -L 2>&1 | grep -c Slot) -lt 1 ]; then
|
||||
exit_error "No Hardware HSM found."
|
||||
fi
|
||||
|
||||
echo "Device found:"
|
||||
echo
|
||||
#List the nitrokey
|
||||
pkcs11-tool --module /usr/lib/x86_64-linux-gnu/opensc-pkcs11.so -L
|
||||
echo
|
||||
|
||||
#Setup the HSM for use
|
||||
echo "-------------------------------------------------------------------------------"
|
||||
echo "Setting up the HSM for first use."
|
||||
echo "-------------------------------------------------------------------------------"
|
||||
echo
|
||||
|
||||
sc-hsm-tool --initialize --so-pin $FACTORY_DEFAULT_SOPIN --pin $SECRET_USER_PIN
|
||||
pkcs11-tool --module /usr/lib/x86_64-linux-gnu/opensc-pkcs11.so --login --login-type so --so-pin $FACTORY_DEFAULT_SOPIN --change-pin --new-pin $SECRET_SOPIN
|
||||
|
||||
#Create root key
|
||||
echo "-------------------------------------------------------------------------------"
|
||||
echo "Creating offline root key"
|
||||
echo "-------------------------------------------------------------------------------"
|
||||
echo
|
||||
pkcs11-tool --module /usr/lib/x86_64-linux-gnu/opensc-pkcs11.so --login --keypairgen --key-type EC:prime256v1 --label root
|
||||
if [ "$?" -ne 0 ]; then exit_error "Key creation failed"; fi
|
||||
|
||||
#Create self-signed root certificate
|
||||
echo "-------------------------------------------------------------------------------"
|
||||
echo "Creating self-signed offline root certificate"
|
||||
echo "-------------------------------------------------------------------------------"
|
||||
echo
|
||||
|
||||
openssl req -engine pkcs11 -keyform engine -key label_root -new -extensions ext_root -out ca/root/certs/root.cert.pem -x509 -subj '/C=US/ST=Texas/O=TurnNetSystems/OU=Certificate Services/CN=TSYS Root CA' -days 10249
|
||||
if [ "$?" -ne 0 ]; then exit_error "Certificate creation failed."; fi
|
||||
|
||||
echo "Changing permissions on root.cert.pm for sanity's sake"
|
||||
chmod -v 444 ca/root/certs/root.cert.pem
|
||||
|
||||
#Verify root cert
|
||||
echo "-------------------------------------------------------------------------------"
|
||||
echo "Verifying root certificate generation"
|
||||
echo "-------------------------------------------------------------------------------"
|
||||
echo
|
||||
openssl x509 -noout -text -in ca/root/certs/root.cert.pem
|
||||
if [ "$?" -ne 0 ]; then exit_error "Verification failed."; fi
|
||||
|
||||
#Import root cert to root HSM
|
||||
echo "-------------------------------------------------------------------------------"
|
||||
echo "Importing offline root cert to HSM"
|
||||
echo "-------------------------------------------------------------------------------"
|
||||
echo
|
||||
openssl x509 -in ca/root/certs/root.cert.pem -out ca/root/certs/root.cert.der -outform der
|
||||
pkcs11-tool --module /usr/lib/x86_64-linux-gnu/opensc-pkcs11.so --login --write-object ca/root/certs/root.cert.der --type cert --label root
|
||||
if [ "$?" -ne 0 ]; then exit_error "Import failed."; fi
|
||||
|
||||
echo "-------------------------------------------------------------------------------"
|
||||
echo "Visual certificate confirmation"
|
||||
echo "-------------------------------------------------------------------------------"
|
||||
echo
|
||||
pkcs11-tool --module /usr/lib/x86_64-linux-gnu/opensc-pkcs11.so -L -O
|
||||
echo
|
||||
|
||||
echo "Done."
|
||||
echo
|
||||
echo "-------------------------------------------------------------------------------"
|
||||
@@ -0,0 +1,257 @@
|
||||
#!/bin/bash
|
||||
###########################################################################
|
||||
#user Variables
|
||||
#Must changes these variables
|
||||
###########################################################################
|
||||
|
||||
|
||||
###########################################################################
|
||||
#Program Variables #
|
||||
#Dont change these variables unless you know what you are doing) #
|
||||
###########################################################################
|
||||
|
||||
# Which OpenSSL config file are we using for this
|
||||
export OPENSSL_CONF=$PWD/openssl.cnf
|
||||
|
||||
# Changed because this device is already previously initialized.
|
||||
export FACTORY_DEFAULT_SOPIN="1636511164917894"
|
||||
|
||||
#OEM Default SOPIN
|
||||
#export FACTORY_DEFAULT_SOPIN="3537363231383830"
|
||||
|
||||
###########################################################################
|
||||
#Function definitions #
|
||||
###########################################################################
|
||||
|
||||
function exit_error()
|
||||
{
|
||||
echo
|
||||
echo " FATAL ERROR: $1"
|
||||
echo " Script aborted."
|
||||
echo
|
||||
echo "-------------------------------------------------------------------------------"
|
||||
|
||||
exit 1
|
||||
}
|
||||
|
||||
###########################################################################
|
||||
# Preflight work, exit on any errors #
|
||||
###########################################################################
|
||||
|
||||
# Banner and instructions for the user.
|
||||
/usr/bin/clear
|
||||
echo "==============================================================================="
|
||||
echo " Intermediate CA Generator"
|
||||
echo
|
||||
echo "FAILURE TO FOLLOW SECURITY PROCEDURES CAN AND WILL RESULT IN CONSEQUENCES UP TO"
|
||||
echo "AND INCLUDING LEGAL ACTION. YOU ARE WARNED."
|
||||
echo
|
||||
echo " Right now, you should be sitting inside the SCIF, reading this on the computer formerly contained in the safe. Before we begin, ensure that the only devices plugged into this machine are:"
|
||||
echo
|
||||
echo " * The *RED* PNY 8GB USB thumbdrive, with a GREEN 'PKI' tag."
|
||||
echo " * The *ORANGE* USB Thumbdrive that was in the safe with the former."
|
||||
echo
|
||||
echo " This process involves swapping between two different NitroKey HSM devices. Please ensure that you use the correct User PIN with the correct Nitrokey when prompted by the software, otherwise this process will fail."
|
||||
|
||||
echo
|
||||
echo "You may hit CTRL-C now to cancel execution of this script."
|
||||
echo
|
||||
read -p "==============================================================================="
|
||||
|
||||
#Check for prerequiste packages
|
||||
echo "Preflight: Checking installed packages"
|
||||
echo "-------------------------------------------------------------------------------"
|
||||
echo
|
||||
|
||||
PKG_LIST="libccid pcscd pcsc-tools opensc libengine-pkcs11-openssl openssl"
|
||||
|
||||
for pkg in $PKG_LIST; do
|
||||
echo -n "Checking for package $pkg: ";
|
||||
if [ $(dpkg -l | grep $pkg -c) -lt 1 ]; then
|
||||
echo "missing!"
|
||||
exit_error "Required package '$pkg' is not installed."
|
||||
else
|
||||
echo "found.";
|
||||
fi
|
||||
done
|
||||
echo
|
||||
|
||||
echo "-------------------------------------------------------------------------------"
|
||||
echo "Preflight: Checking configuration file"
|
||||
echo "-------------------------------------------------------------------------------"
|
||||
echo
|
||||
|
||||
# Load in the SECRET variables
|
||||
. ./online-SECRETS.inc
|
||||
|
||||
#Check the SOPIN
|
||||
if [ $SECRET_SOPIN = "0000000000000000" ] ; then
|
||||
exit_error "SOPIN is still default. Check offline-SECRETS.inc."
|
||||
fi
|
||||
|
||||
export SECRET_SOPIN_LENGTH=$(echo $SECRET_SOPIN|wc -c)
|
||||
|
||||
if [ $SECRET_SOPIN_LENGTH -lt 17 ]; then
|
||||
exit_error "HSM SOPIN is too short. Check offline-SECRETS.inc."
|
||||
fi
|
||||
|
||||
#Check the USERPIN
|
||||
if [ "$SECRET_USER_PIN" = "0000000000000000" ] ; then
|
||||
exit_error "USER PIN is still default. Check offline-SECRETS.inc."
|
||||
fi
|
||||
|
||||
export SECRET_USERPIN_LENGTH=$(echo $SECRET_USER_PIN|wc -c)
|
||||
|
||||
if [ $SECRET_USERPIN_LENGTH -lt 7 ]; then
|
||||
exit_error "USER PIN is too short. Check offline-SECRETS.inc."
|
||||
fi
|
||||
|
||||
echo "Length and content check complete."
|
||||
echo
|
||||
|
||||
#Create directories to hold the bits
|
||||
echo "-------------------------------------------------------------------------------"
|
||||
echo "Preflight: Creating certificate directory structure"
|
||||
echo "-------------------------------------------------------------------------------"
|
||||
echo
|
||||
|
||||
mkdir -vp ca/intermediate/{certs,crl,csr,newcerts}
|
||||
mkdir -vp ca/{client,server}/{certs,csr,pfx,private}
|
||||
touch ca/intermediate/database
|
||||
echo 1000 | tee ca/intermediate/{serial,crlnumber}
|
||||
chmod -v 700 ca/{client,server}/private
|
||||
echo
|
||||
|
||||
echo "-------------------------------------------------------------------------------"
|
||||
echo "Preflight: Verifying absence of HSM"
|
||||
echo "-------------------------------------------------------------------------------"
|
||||
echo
|
||||
|
||||
# Detect HSMs and prompt until gone.
|
||||
DETECTLOOP=1;
|
||||
while [ $DETECTLOOP = 1 ]; do
|
||||
if [ $(pkcs11-tool --module /usr/lib/x86_64-linux-gnu/opensc-pkcs11.so -L 2>&1 | grep -c Slot) -gt 0 ]; then
|
||||
read -p "WARNING: There is a hardware security module plugged into this machine. Please remove it now, and press ENTER."
|
||||
echo
|
||||
else
|
||||
DETECTLOOP=0
|
||||
fi
|
||||
done
|
||||
|
||||
echo "No existing HSM present."
|
||||
echo
|
||||
echo "-------------------------------------------------------------------------------"
|
||||
|
||||
echo "==============================================================================="
|
||||
echo "Intermediate CA Generation"
|
||||
echo "==============================================================================="
|
||||
echo
|
||||
|
||||
############################################################################
|
||||
#offline Root HSM Stuff
|
||||
############################################################################
|
||||
|
||||
read -p "Insert the INTERMEDIATE Nitrokey HSM (tagged as 'I') and press ENTER."
|
||||
echo
|
||||
|
||||
# Trust, but verify
|
||||
if [ $(pkcs11-tool --module /usr/lib/x86_64-linux-gnu/opensc-pkcs11.so -L 2>&1 | grep -c Slot) -lt 1 ]; then
|
||||
exit_error "No Hardware HSM found."
|
||||
fi
|
||||
|
||||
echo "Device found:"
|
||||
echo
|
||||
#List the nitrokey
|
||||
pkcs11-tool --module /usr/lib/x86_64-linux-gnu/opensc-pkcs11.so -L
|
||||
echo
|
||||
|
||||
#Setup the HSM for use
|
||||
echo "-------------------------------------------------------------------------------"
|
||||
echo "Setting up the HSM for first use."
|
||||
echo "-------------------------------------------------------------------------------"
|
||||
echo
|
||||
|
||||
pkcs11-tool --module /usr/lib/x86_64-linux-gnu/opensc-pkcs11.so --login --login-type so --so-pin $FACTORY_DEFAULT_SOPIN --change-pin --new-pin $SECRET_SOPIN
|
||||
sc-hsm-tool --initialize --so-pin $SECRET_SOPIN --pin $SECRET_USER_PIN
|
||||
|
||||
|
||||
echo "-------------------------------------------------------------------------------"
|
||||
echo "Creating intermediate key"
|
||||
echo "-------------------------------------------------------------------------------"
|
||||
echo
|
||||
|
||||
pkcs11-tool --module /usr/lib/x86_64-linux-gnu/opensc-pkcs11.so --login --keypairgen --key-type EC:prime256v1 --label intermediate
|
||||
if [ "$?" -ne 0 ]; then exit_error "Key creation failed"; fi
|
||||
|
||||
echo
|
||||
echo "-------------------------------------------------------------------------------"
|
||||
echo "Creating intermediate certificate CSR"
|
||||
echo "-------------------------------------------------------------------------------"
|
||||
echo
|
||||
openssl req -engine pkcs11 -keyform engine -new -key label_intermediate -out ca/intermediate/csr/intermediate.csr.pem -days 10240 -subj '/C=US/ST=Texas/O=TurnNetSystems/OU=Certificate Services/CN=TSYS Intermediate CA'
|
||||
if [ "$?" -ne 0 ]; then exit_error "Create CSR failed"; fi
|
||||
|
||||
echo
|
||||
echo "-------------------------------------------------------------------------------"
|
||||
echo "Signing intermediate certificate"
|
||||
echo "-------------------------------------------------------------------------------"
|
||||
echo
|
||||
|
||||
echo "Please REMOVE the INTERMEDIATE Nitrokey (marked 'I')"
|
||||
echo "and INSERT the ROOT Nitrokey (marked 'R')"
|
||||
read -p " and press ENTER to continue."
|
||||
|
||||
openssl ca -engine pkcs11 -keyform engine -name ca_root -extensions ext_intermediate -notext -in ca/intermediate/csr/intermediate.csr.pem -out ca/intermediate/certs/intermediate.cert.pem
|
||||
if [ "$?" -ne 0 ]; then exit_error "Certificate signing failed."; fi
|
||||
|
||||
echo
|
||||
echo "-------------------------------------------------------------------------------"
|
||||
echo "Verifying intermediate certificate"
|
||||
echo "-------------------------------------------------------------------------------"
|
||||
echo
|
||||
|
||||
openssl x509 -noout -text -in ca/intermediate/certs/intermediate.cert.pem
|
||||
if [ "$?" -ne 0 ]; then exit_error "Verification failed."; fi
|
||||
openssl verify -CAfile ca/root/certs/root.cert.pem ca/intermediate/certs/intermediate.cert.pem
|
||||
if [ "$?" -ne 0 ]; then exit_error "Verification failed."; fi
|
||||
|
||||
echo
|
||||
echo "-------------------------------------------------------------------------------"
|
||||
echo "Store Root and Intermediate Certificates on HSM"
|
||||
echo "-------------------------------------------------------------------------------"
|
||||
echo
|
||||
|
||||
echo "Please REMOVE the ROOT Nitrokey (marked 'R')"
|
||||
echo "and INSERT the INTERMEDIATE Nitrokey (marked 'I')"
|
||||
read -p " and press ENTER to continue."
|
||||
|
||||
openssl x509 -in ca/intermediate/certs/intermediate.cert.pem -out ca/intermediate/certs/intermediate.cert.der -outform der
|
||||
if [ "$?" -ne 0 ]; then exit_error "Certificate conversion failed"; fi
|
||||
|
||||
pkcs11-tool --module /usr/lib/x86_64-linux-gnu/opensc-pkcs11.so --login --write-object ca/root/certs/root.cert.der --type cert --label root
|
||||
if [ "$?" -ne 0 ]; then exit_error "Failed to store root certificate"; fi
|
||||
|
||||
pkcs11-tool --module /usr/lib/x86_64-linux-gnu/opensc-pkcs11.so --login --write-object ca/intermediate/certs/intermediate.cert.der --type cert --label intermediate
|
||||
if [ "$?" -ne 0 ]; then exit_error "Failed to store intermediate certificate"; fi
|
||||
|
||||
echo
|
||||
echo "-------------------------------------------------------------------------------"
|
||||
echo "Creating chain certificate"
|
||||
echo "-------------------------------------------------------------------------------"
|
||||
echo
|
||||
|
||||
cat ca/intermediate/certs/intermediate.cert.pem ca/root/certs/root.cert.pem > ca/intermediate/certs/chain.cert.pem
|
||||
chmod 444 ca/intermediate/certs/chain.cert.pem
|
||||
|
||||
|
||||
echo
|
||||
echo "-------------------------------------------------------------------------------"
|
||||
echo "Visual verification"
|
||||
echo "-------------------------------------------------------------------------------"
|
||||
echo
|
||||
pkcs11-tool --module /usr/lib/x86_64-linux-gnu/opensc-pkcs11.so -L -O
|
||||
|
||||
echo
|
||||
echo "Done."
|
||||
echo
|
||||
echo "-------------------------------------------------------------------------------"
|
||||
Binary file not shown.
@@ -0,0 +1,115 @@
|
||||
openssl_conf = openssl_init
|
||||
[ openssl_init ]
|
||||
engines = engines
|
||||
[ ca ]
|
||||
default_ca = ca_intermediate
|
||||
[ ca_root ]
|
||||
dir = ca/root
|
||||
certs = $dir/certs
|
||||
crl_dir = $dir/crl
|
||||
new_certs_dir = $dir/newcerts
|
||||
database = $dir/database
|
||||
serial = $dir/serial
|
||||
crlnumber = $dir/crlnumber
|
||||
private_key = label_root
|
||||
certificate = $dir/certs/root.cert.pem
|
||||
crl = $dir/crl/root.crl.pem
|
||||
crl_extensions = ext_crl
|
||||
default_md = sha256
|
||||
name_opt = ca_default
|
||||
cert_opt = ca_default
|
||||
default_crl_days = 30
|
||||
default_days = 3650
|
||||
preserve = no
|
||||
policy = policy_strict
|
||||
[ ca_intermediate ]
|
||||
dir = intermediate
|
||||
certs = $dir/certs
|
||||
crl_dir = $dir/crl
|
||||
new_certs_dir = $dir/newcerts
|
||||
database = $dir/database
|
||||
serial = $dir/serial
|
||||
crlnumber = $dir/crlnumber
|
||||
private_key = label_intermediate
|
||||
certificate = $dir/certs/intermediate.cert.pem
|
||||
crl = $dir/crl/intermediate.crl.pem
|
||||
crl_extensions = ext_crl
|
||||
default_md = sha256
|
||||
name_opt = ca_default
|
||||
cert_opt = ca_default
|
||||
default_crl_days = 30
|
||||
default_days = 375
|
||||
preserve = no
|
||||
policy = policy_loose
|
||||
[ policy_strict ]
|
||||
countryName = match
|
||||
stateOrProvinceName = match
|
||||
organizationName = match
|
||||
organizationalUnitName = optional
|
||||
commonName = supplied
|
||||
emailAddress = optional
|
||||
[ policy_loose ]
|
||||
countryName = optional
|
||||
stateOrProvinceName = optional
|
||||
localityName = optional
|
||||
organizationName = optional
|
||||
organizationalUnitName = optional
|
||||
commonName = supplied
|
||||
emailAddress = optional
|
||||
[ req ]
|
||||
default_bits = 2048
|
||||
string_mask = utf8only
|
||||
default_md = sha256
|
||||
distinguished_name = req_distinguished_name
|
||||
[ req_distinguished_name ]
|
||||
countryName = Country Name (2 letter code)
|
||||
stateOrProvinceName = State or Province Name
|
||||
localityName = Locality Name
|
||||
0.organizationName = Organization Name
|
||||
organizationalUnitName = Organizational Unit Name
|
||||
commonName = Common Name
|
||||
emailAddress = Email Address
|
||||
[ ext_root ]
|
||||
subjectKeyIdentifier = hash
|
||||
authorityKeyIdentifier = keyid:always, issuer
|
||||
basicConstraints = critical, CA:true
|
||||
keyUsage = critical, digitalSignature, cRLSign, keyCertSign
|
||||
[ ext_intermediate ]
|
||||
subjectKeyIdentifier = hash
|
||||
authorityKeyIdentifier = keyid:always, issuer
|
||||
basicConstraints = critical, CA:true, pathlen:0
|
||||
keyUsage = critical, digitalSignature, cRLSign, keyCertSign
|
||||
[ ext_client ]
|
||||
basicConstraints = CA:FALSE
|
||||
nsCertType = client, email
|
||||
nsComment = "OpenSSL Generated Client Certificate"
|
||||
subjectKeyIdentifier = hash
|
||||
authorityKeyIdentifier = keyid, issuer
|
||||
keyUsage = critical, nonRepudiation, digitalSignature, keyEncipherment
|
||||
extendedKeyUsage = clientAuth, emailProtection
|
||||
[ ext_server ]
|
||||
basicConstraints = CA:FALSE
|
||||
nsCertType = server
|
||||
nsComment = "OpenSSL Generated Server Certificate"
|
||||
subjectKeyIdentifier = hash
|
||||
authorityKeyIdentifier = keyid, issuer:always
|
||||
keyUsage = critical, digitalSignature, keyEncipherment
|
||||
extendedKeyUsage = serverAuth
|
||||
[ ext_crl ]
|
||||
authorityKeyIdentifier = keyid:always
|
||||
[ ext_ocsp ]
|
||||
basicConstraints = CA:FALSE
|
||||
subjectKeyIdentifier = hash
|
||||
authorityKeyIdentifier = keyid, issuer
|
||||
keyUsage = critical, digitalSignature
|
||||
extendedKeyUsage = critical, OCSPSigning
|
||||
|
||||
[ engines ]
|
||||
pkcs11 = engine_pkcs11
|
||||
|
||||
[ engine_pkcs11 ]
|
||||
engine_id = pkcs11
|
||||
dynamic_path = /usr/lib/x86_64-linux-gnu/engines-1.1/pkcs11.so
|
||||
MODULE_PATH = /usr/lib/x86_64-linux-gnu/opensc-pkcs11.so
|
||||
|
||||
init = 1
|
||||
@@ -0,0 +1,14 @@
|
||||
blockdiag {
|
||||
|
||||
"Offline Root CA" -> "Online Long Lived Intermediate CA";
|
||||
"Offline Root CA" -> "Online Long Lived Intermediate CA" -> "TSYS - Corporate CA - USA";
|
||||
"Offline Root CA" -> "Online Long Lived Intermediate CA" -> "TSYS - Corporate CA - International";
|
||||
"Offline Root CA" -> "Online Long Lived Intermediate CA" -> "Suborbital - PocketMesh - General CA - USA";
|
||||
"Offline Root CA" -> "Online Long Lived Intermediate CA" -> "Suborbital - PocketMesh - General CA - International";
|
||||
"Offline Root CA" -> "Online Long Lived Intermediate CA" -> "Suborbital - SkyMesh - General CA - USA";
|
||||
"Offline Root CA" -> "Online Long Lived Intermediate CA" -> "RackRental- General CA - USA";
|
||||
"Offline Root CA" -> "Online Long Lived Intermediate CA" -> "RackRental- International CA";
|
||||
"Offline Root CA" -> "Online Long Lived Intermediate CA" -> "USG CA" -> "RackRental - USG CA";
|
||||
"Offline Root CA" -> "Online Long Lived Intermediate CA" -> "USG CA" -> "Suborbital - PocketMesh - USG CA";
|
||||
"Offline Root CA" -> "Online Long Lived Intermediate CA" -> "USG CA" -> "Suborbital - SkyMesh - USG CA";
|
||||
}
|
||||
Binary file not shown.
|
After Width: | Height: | Size: 22 KiB |
@@ -0,0 +1,28 @@
|
||||
-----BEGIN CERTIFICATE-----
|
||||
MIICNTCCAdygAwIBAgICEAAwCgYIKoZIzj0EAwIwbDELMAkGA1UEBhMCVVMxDjAM
|
||||
BgNVBAgMBVRleGFzMRcwFQYDVQQKDA5UdXJuTmV0U3lzdGVtczEdMBsGA1UECwwU
|
||||
Q2VydGlmaWNhdGUgU2VydmljZXMxFTATBgNVBAMMDFRTWVMgUm9vdCBDQTAeFw0x
|
||||
ODA1MjYwMTM1NTNaFw0yODA1MjMwMTM1NTNaMHQxCzAJBgNVBAYTAlVTMQ4wDAYD
|
||||
VQQIDAVUZXhhczEXMBUGA1UECgwOVHVybk5ldFN5c3RlbXMxHTAbBgNVBAsMFENl
|
||||
cnRpZmljYXRlIFNlcnZpY2VzMR0wGwYDVQQDDBRUU1lTIEludGVybWVkaWF0ZSBD
|
||||
QTBZMBMGByqGSM49AgEGCCqGSM49AwEHA0IABOvDEmYWB9j42XbS8vreHl6V7jx7
|
||||
eAw7uJGx80NwnUxDNsr+mTlSUMB3Z+7ppAG8q56AYaYCmJ0EeLquI4j48cyjZjBk
|
||||
MB0GA1UdDgQWBBS/2ufN7K3FSVsaRdOyVtRD0j+ZhzAfBgNVHSMEGDAWgBREJ92X
|
||||
kahcElWwHaNEYzJ6jbHU+TASBgNVHRMBAf8ECDAGAQH/AgEAMA4GA1UdDwEB/wQE
|
||||
AwIBhjAKBggqhkjOPQQDAgNHADBEAiB0Szlopj/4m5Gh10GM3cJVIKSaIEhpbZn1
|
||||
e9DDh6boWwIgHmZUCaDV1F+3yAHC2Ua+bJPKkmcsmGWc956F76mj21E=
|
||||
-----END CERTIFICATE-----
|
||||
-----BEGIN CERTIFICATE-----
|
||||
MIICMTCCAdigAwIBAgIJAP0coUv+FyQYMAoGCCqGSM49BAMCMGwxCzAJBgNVBAYT
|
||||
AlVTMQ4wDAYDVQQIDAVUZXhhczEXMBUGA1UECgwOVHVybk5ldFN5c3RlbXMxHTAb
|
||||
BgNVBAsMFENlcnRpZmljYXRlIFNlcnZpY2VzMRUwEwYDVQQDDAxUU1lTIFJvb3Qg
|
||||
Q0EwHhcNMTgwNTI2MDEzMjUzWhcNNDYwNjE3MDEzMjUzWjBsMQswCQYDVQQGEwJV
|
||||
UzEOMAwGA1UECAwFVGV4YXMxFzAVBgNVBAoMDlR1cm5OZXRTeXN0ZW1zMR0wGwYD
|
||||
VQQLDBRDZXJ0aWZpY2F0ZSBTZXJ2aWNlczEVMBMGA1UEAwwMVFNZUyBSb290IENB
|
||||
MFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEQwCbkoUzB2WRAP4JgXzBQ/0qrXKV
|
||||
LfSAzr6MH9Y8SsIIgE4YBd3ROiudAcUjIObbfJcgZTmjkDtig+hHRCwMa6NjMGEw
|
||||
HQYDVR0OBBYEFEQn3ZeRqFwSVbAdo0RjMnqNsdT5MB8GA1UdIwQYMBaAFEQn3ZeR
|
||||
qFwSVbAdo0RjMnqNsdT5MA8GA1UdEwEB/wQFMAMBAf8wDgYDVR0PAQH/BAQDAgGG
|
||||
MAoGCCqGSM49BAMCA0cAMEQCICw1tWHkvCwo6FJrmWqLlzrR3AsZaU0Fv7sL2GTE
|
||||
R06yAiBAsiGtwNTaN+L3wgyhMt+ybmNlrDpgqFJVzKrfbGbQCA==
|
||||
-----END CERTIFICATE-----
|
||||
Binary file not shown.
@@ -0,0 +1,14 @@
|
||||
-----BEGIN CERTIFICATE-----
|
||||
MIICNTCCAdygAwIBAgICEAAwCgYIKoZIzj0EAwIwbDELMAkGA1UEBhMCVVMxDjAM
|
||||
BgNVBAgMBVRleGFzMRcwFQYDVQQKDA5UdXJuTmV0U3lzdGVtczEdMBsGA1UECwwU
|
||||
Q2VydGlmaWNhdGUgU2VydmljZXMxFTATBgNVBAMMDFRTWVMgUm9vdCBDQTAeFw0x
|
||||
ODA1MjYwMTM1NTNaFw0yODA1MjMwMTM1NTNaMHQxCzAJBgNVBAYTAlVTMQ4wDAYD
|
||||
VQQIDAVUZXhhczEXMBUGA1UECgwOVHVybk5ldFN5c3RlbXMxHTAbBgNVBAsMFENl
|
||||
cnRpZmljYXRlIFNlcnZpY2VzMR0wGwYDVQQDDBRUU1lTIEludGVybWVkaWF0ZSBD
|
||||
QTBZMBMGByqGSM49AgEGCCqGSM49AwEHA0IABOvDEmYWB9j42XbS8vreHl6V7jx7
|
||||
eAw7uJGx80NwnUxDNsr+mTlSUMB3Z+7ppAG8q56AYaYCmJ0EeLquI4j48cyjZjBk
|
||||
MB0GA1UdDgQWBBS/2ufN7K3FSVsaRdOyVtRD0j+ZhzAfBgNVHSMEGDAWgBREJ92X
|
||||
kahcElWwHaNEYzJ6jbHU+TASBgNVHRMBAf8ECDAGAQH/AgEAMA4GA1UdDwEB/wQE
|
||||
AwIBhjAKBggqhkjOPQQDAgNHADBEAiB0Szlopj/4m5Gh10GM3cJVIKSaIEhpbZn1
|
||||
e9DDh6boWwIgHmZUCaDV1F+3yAHC2Ua+bJPKkmcsmGWc956F76mj21E=
|
||||
-----END CERTIFICATE-----
|
||||
@@ -0,0 +1 @@
|
||||
1000
|
||||
@@ -0,0 +1,9 @@
|
||||
-----BEGIN CERTIFICATE REQUEST-----
|
||||
MIIBMDCB1gIBADB0MQswCQYDVQQGEwJVUzEOMAwGA1UECAwFVGV4YXMxFzAVBgNV
|
||||
BAoMDlR1cm5OZXRTeXN0ZW1zMR0wGwYDVQQLDBRDZXJ0aWZpY2F0ZSBTZXJ2aWNl
|
||||
czEdMBsGA1UEAwwUVFNZUyBJbnRlcm1lZGlhdGUgQ0EwWTATBgcqhkjOPQIBBggq
|
||||
hkjOPQMBBwNCAATrwxJmFgfY+Nl20vL63h5ele48e3gMO7iRsfNDcJ1MQzbK/pk5
|
||||
UlDAd2fu6aQBvKuegGGmApidBHi6riOI+PHMoAAwCgYIKoZIzj0EAwIDSQAwRgIh
|
||||
APnVJ+ccmmmBbpvg4Y+NqOAxkG8j1JRfZivxmmCp4CmQAiEA4geKErqT/UQ5BEOj
|
||||
OnmVupYmsMIFHZhF4GSh84ImN4g=
|
||||
-----END CERTIFICATE REQUEST-----
|
||||
@@ -0,0 +1 @@
|
||||
1000
|
||||
Binary file not shown.
@@ -0,0 +1,14 @@
|
||||
-----BEGIN CERTIFICATE-----
|
||||
MIICMTCCAdigAwIBAgIJAP0coUv+FyQYMAoGCCqGSM49BAMCMGwxCzAJBgNVBAYT
|
||||
AlVTMQ4wDAYDVQQIDAVUZXhhczEXMBUGA1UECgwOVHVybk5ldFN5c3RlbXMxHTAb
|
||||
BgNVBAsMFENlcnRpZmljYXRlIFNlcnZpY2VzMRUwEwYDVQQDDAxUU1lTIFJvb3Qg
|
||||
Q0EwHhcNMTgwNTI2MDEzMjUzWhcNNDYwNjE3MDEzMjUzWjBsMQswCQYDVQQGEwJV
|
||||
UzEOMAwGA1UECAwFVGV4YXMxFzAVBgNVBAoMDlR1cm5OZXRTeXN0ZW1zMR0wGwYD
|
||||
VQQLDBRDZXJ0aWZpY2F0ZSBTZXJ2aWNlczEVMBMGA1UEAwwMVFNZUyBSb290IENB
|
||||
MFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEQwCbkoUzB2WRAP4JgXzBQ/0qrXKV
|
||||
LfSAzr6MH9Y8SsIIgE4YBd3ROiudAcUjIObbfJcgZTmjkDtig+hHRCwMa6NjMGEw
|
||||
HQYDVR0OBBYEFEQn3ZeRqFwSVbAdo0RjMnqNsdT5MB8GA1UdIwQYMBaAFEQn3ZeR
|
||||
qFwSVbAdo0RjMnqNsdT5MA8GA1UdEwEB/wQFMAMBAf8wDgYDVR0PAQH/BAQDAgGG
|
||||
MAoGCCqGSM49BAMCA0cAMEQCICw1tWHkvCwo6FJrmWqLlzrR3AsZaU0Fv7sL2GTE
|
||||
R06yAiBAsiGtwNTaN+L3wgyhMt+ybmNlrDpgqFJVzKrfbGbQCA==
|
||||
-----END CERTIFICATE-----
|
||||
@@ -0,0 +1 @@
|
||||
1000
|
||||
@@ -0,0 +1 @@
|
||||
V 280523013553Z 1000 unknown /C=US/ST=Texas/O=TurnNetSystems/OU=Certificate Services/CN=TSYS Intermediate CA
|
||||
@@ -0,0 +1 @@
|
||||
unique_subject = yes
|
||||
@@ -0,0 +1,14 @@
|
||||
-----BEGIN CERTIFICATE-----
|
||||
MIICNTCCAdygAwIBAgICEAAwCgYIKoZIzj0EAwIwbDELMAkGA1UEBhMCVVMxDjAM
|
||||
BgNVBAgMBVRleGFzMRcwFQYDVQQKDA5UdXJuTmV0U3lzdGVtczEdMBsGA1UECwwU
|
||||
Q2VydGlmaWNhdGUgU2VydmljZXMxFTATBgNVBAMMDFRTWVMgUm9vdCBDQTAeFw0x
|
||||
ODA1MjYwMTM1NTNaFw0yODA1MjMwMTM1NTNaMHQxCzAJBgNVBAYTAlVTMQ4wDAYD
|
||||
VQQIDAVUZXhhczEXMBUGA1UECgwOVHVybk5ldFN5c3RlbXMxHTAbBgNVBAsMFENl
|
||||
cnRpZmljYXRlIFNlcnZpY2VzMR0wGwYDVQQDDBRUU1lTIEludGVybWVkaWF0ZSBD
|
||||
QTBZMBMGByqGSM49AgEGCCqGSM49AwEHA0IABOvDEmYWB9j42XbS8vreHl6V7jx7
|
||||
eAw7uJGx80NwnUxDNsr+mTlSUMB3Z+7ppAG8q56AYaYCmJ0EeLquI4j48cyjZjBk
|
||||
MB0GA1UdDgQWBBS/2ufN7K3FSVsaRdOyVtRD0j+ZhzAfBgNVHSMEGDAWgBREJ92X
|
||||
kahcElWwHaNEYzJ6jbHU+TASBgNVHRMBAf8ECDAGAQH/AgEAMA4GA1UdDwEB/wQE
|
||||
AwIBhjAKBggqhkjOPQQDAgNHADBEAiB0Szlopj/4m5Gh10GM3cJVIKSaIEhpbZn1
|
||||
e9DDh6boWwIgHmZUCaDV1F+3yAHC2Ua+bJPKkmcsmGWc956F76mj21E=
|
||||
-----END CERTIFICATE-----
|
||||
@@ -0,0 +1 @@
|
||||
1001
|
||||
@@ -0,0 +1 @@
|
||||
1000
|
||||
@@ -41,7 +41,7 @@ TODAY="$(date +%Y-%m-%d)"
|
||||
# Runs in Docker so the host stays clean (no native shellcheck required).
|
||||
# ----------------------------------------------------------------------------
|
||||
$RULE_VERBOSE && log_step "Shell scripts (shellcheck)"
|
||||
mapfile -d '' SH_FILES < <(find . -path ./.git -prune -o -path ./.tmp -prune -o -path ./.crush -prune -o -path ./vendor -prune -o -path ./oam/librenms-agent/agent -prune -o -path ./archive -prune -o -path ./node_modules -prune -o \( -name '*.sh' -o -name '*.bash' \) -print0 2>/dev/null)
|
||||
mapfile -d '' SH_FILES < <(find . -path ./.git -prune -o -path ./.tmp -prune -o -path ./.crush -prune -o -path ./vendor -prune -o -path ./oam/librenms-agent/agent -prune -o -path ./archive -prune -o -path ./node_modules -prune -o -path ./legacy-tsys-ca -prune -o \( -name '*.sh' -o -name '*.bash' \) -print0 2>/dev/null)
|
||||
if [ "${#SH_FILES[@]}" -gt 0 ]; then
|
||||
if have shellcheck; then
|
||||
if shellcheck "${SH_FILES[@]}" >/dev/null 2>&1; then
|
||||
@@ -163,7 +163,7 @@ while IFS= read -r -d '' f; do
|
||||
POINTER_MISSING=$((POINTER_MISSING + 1))
|
||||
$RULE_VERBOSE && printf ' %s\n' "$f"
|
||||
fi
|
||||
done < <(find . -path ./.git -prune -o -path ./.crush -prune -o -path ./.tmp -prune -o -path ./vendor -prune -o -path ./archive -prune -o -name '*.md' -print0 2>/dev/null)
|
||||
done < <(find . -path ./.git -prune -o -path ./.crush -prune -o -path ./.tmp -prune -o -path ./vendor -prune -o -path ./archive -prune -o -path "./legacy-*" -prune -o -name "*.md" -print0 2>/dev/null)
|
||||
if [ "$POINTER_MISSING" -eq 0 ]; then
|
||||
check "All non-exempt .md cite Discourse ($DISCOURSE_HOST)" "pass"
|
||||
else
|
||||
|
||||
Reference in New Issue
Block a user