MOD: initial commit
This commit is contained in:
commit
8510375d68
|
@ -0,0 +1,31 @@
|
||||||
|
# Project specific files
|
||||||
|
sftp-config.json
|
||||||
|
.DS_Store
|
||||||
|
**/var/
|
||||||
|
**/cert_gen/acme.xyz_fl/
|
||||||
|
|
||||||
|
|
||||||
|
# Byte-compiled / optimized / DLL files
|
||||||
|
__pycache__/
|
||||||
|
*.py[cod]
|
||||||
|
*$py.class
|
||||||
|
|
||||||
|
# C extensions
|
||||||
|
*.so
|
||||||
|
|
||||||
|
# Distribution / packaging
|
||||||
|
.Python
|
||||||
|
env/
|
||||||
|
build/
|
||||||
|
develop-eggs/
|
||||||
|
dist/
|
||||||
|
downloads/
|
||||||
|
eggs/
|
||||||
|
.eggs/
|
||||||
|
lib/
|
||||||
|
lib64/
|
||||||
|
parts/
|
||||||
|
sdist/
|
||||||
|
*.egg-info/
|
||||||
|
.installed.cfg
|
||||||
|
*.egg
|
|
@ -0,0 +1,77 @@
|
||||||
|
|
||||||
|
============================
|
||||||
|
Certificate Generation
|
||||||
|
Version 3.x
|
||||||
|
============================
|
||||||
|
|
||||||
|
|
||||||
|
-------------
|
||||||
|
INTRO
|
||||||
|
-------------
|
||||||
|
|
||||||
|
This package contains a set of programs to generate an entire certificate chain of trust
|
||||||
|
and will configure StrongSwan server. .p12 files are generated for client distribution.
|
||||||
|
|
||||||
|
Features:
|
||||||
|
* Certificate Authority (CA) creation
|
||||||
|
* Server and Client certificate generation (based on CA)
|
||||||
|
* CA and Client certificate packaged as .p12 file for easy import to Android (other clients too)
|
||||||
|
* Ubuntu networking configuration scripts (tunneling enabled)
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
---------------------
|
||||||
|
VERSIONS
|
||||||
|
---------------------
|
||||||
|
|
||||||
|
Version 3.1 - MOB Hub PKI
|
||||||
|
* PKI Bootstrap
|
||||||
|
- generate an entire chain-of-trust
|
||||||
|
* PKI Lifecycle
|
||||||
|
- generate certificates during the CA's lifecycle
|
||||||
|
Version 3.0 - CA Intermediate Support
|
||||||
|
* requires openssl (does not require ipsec)
|
||||||
|
* CA Intermediate support
|
||||||
|
-root CA can be generated with 5-10yr expiration, put into cold-storage
|
||||||
|
* small to large organizational support
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
---------------------
|
||||||
|
TODO
|
||||||
|
---------------------
|
||||||
|
* SCEP support
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
---------------------
|
||||||
|
TROUBLESHOOTING
|
||||||
|
---------------------
|
||||||
|
|
||||||
|
1) Look at the error log for detailed information:
|
||||||
|
$ tail -n 40 /var/log/syslog
|
||||||
|
|
||||||
|
2) Check the date/time of the device. A common problem is a certificate date/time valid range issue.
|
||||||
|
Make sure your server date is within the CA, and Server certificate valid date.
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
----------------
|
||||||
|
METHODOLOGY
|
||||||
|
----------------
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
------------
|
||||||
|
HISTORY
|
||||||
|
------------
|
||||||
|
version 3.x
|
||||||
|
* strongswan: new configuration that uses DN (distinguished name) to authenticate clients
|
||||||
|
(previous configs used local IP address for authentication)
|
||||||
|
* certificate generation moved to another repository
|
||||||
|
- separated into two stages
|
||||||
|
stage 1 : pki bootstrap
|
||||||
|
stage 2 : pki lifecycle
|
||||||
|
|
||||||
|
|
|
@ -0,0 +1,82 @@
|
||||||
|
[[[ BeagleBone Black BBB ]]]
|
||||||
|
|
||||||
|
|
||||||
|
[[ Configs ]]
|
||||||
|
|
||||||
|
[ Networking ]
|
||||||
|
USB0: debian@192.168.7.2
|
||||||
|
ETH0: debian@10.10.10.110
|
||||||
|
user: debian
|
||||||
|
pass: temppwd
|
||||||
|
|
||||||
|
screen -L -S bbb /dev/tty.usbserial-AH05JI3A 115200
|
||||||
|
|
||||||
|
|
||||||
|
[ Date / Time ]
|
||||||
|
Fix the date/time of the BeagleBone Black otherwise the certificates won''t work.
|
||||||
|
|
||||||
|
$ date -s '2016-11-09 12:34:56'
|
||||||
|
$ date +%Y%m%d -s "yyyymmdd"
|
||||||
|
$ date +%Y%m%d -s "20100622"
|
||||||
|
|
||||||
|
$ date yymmddhhmmss
|
||||||
|
|
||||||
|
|
||||||
|
[ eMMC ]
|
||||||
|
# Flash the onboard eMMC
|
||||||
|
$ xz -cd bbb.xz | ssh ubuntu@192.168.7.2 'dd of=/dev/mmcblk1 bs=1M'
|
||||||
|
|
||||||
|
# backup eMMC to laptop
|
||||||
|
$ dd if=/dev/mmcblk0 bs=1m | ssh j3g@10.5.1.51 'dd of=~/bbb.img'
|
||||||
|
# compress the .img file
|
||||||
|
$ xz -z bbb.img
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
[[ Software ]]
|
||||||
|
|
||||||
|
[ Drivers ]
|
||||||
|
USB Serial Driver
|
||||||
|
download from my box.com/drivers
|
||||||
|
@ http://www.ftdichip.com/Drivers/VCP.htm
|
||||||
|
|
||||||
|
|
||||||
|
[ Kernel ]
|
||||||
|
Linux Kernel 2.6+ includes IPsec
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
[[ Links ]]
|
||||||
|
|
||||||
|
[ BeageBone Black Wireless ]
|
||||||
|
# general page
|
||||||
|
@ https://beagleboard.org/black-wireless
|
||||||
|
|
||||||
|
# forum
|
||||||
|
@ https://beagleboard.org/discuss#bone_forum_embed
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
[[ Specs ]]
|
||||||
|
@ http://www.armhf.com/boards/beaglebone-black/
|
||||||
|
@ http://elinux.org/BeagleBoardUbuntu
|
||||||
|
|
||||||
|
Ubuntu 14.04 LTS, 4.1.2-bone12.arm
|
||||||
|
Ubuntu Image 2015-07-08
|
||||||
|
|
||||||
|
|
||||||
|
[ Kernel ]
|
||||||
|
# compile the kernel on BBB
|
||||||
|
@ https://help.ubuntu.com/community/Kernel/Compile
|
||||||
|
|
||||||
|
|
||||||
|
[ BBB Linux Source Code ]
|
||||||
|
@ https://github.com/beagleboard/linux
|
||||||
|
|
||||||
|
[ BeagleBone Black Wireless ]
|
||||||
|
1ghz TI AM335x ARM Cortex A8
|
||||||
|
512MB DDR3
|
||||||
|
4GB flash storage internal
|
||||||
|
|
|
@ -0,0 +1,78 @@
|
||||||
|
[[[ BeagleBone Black TI OS Development ]]]
|
||||||
|
|
||||||
|
|
||||||
|
[[ TI Arago 3.03 ]]
|
||||||
|
|
||||||
|
user: root
|
||||||
|
|
||||||
|
|
||||||
|
[ Network Interfaces ]
|
||||||
|
|
||||||
|
eth0 Link encap:Ethernet HWaddr 50:65:83:E4:4F:37
|
||||||
|
UP BROADCAST MULTICAST MTU:1500 Metric:1
|
||||||
|
lo Link encap:Local Loopback
|
||||||
|
UP LOOPBACK RUNNING MTU:65536 Metric:1
|
||||||
|
inet addr:127.0.0.1 Mask:255.0.0.0
|
||||||
|
|
||||||
|
|
||||||
|
screen -L -S bbb /dev/tty.usbserial-AH05JI3A 115200
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
[[ Toolchain - (Linaro GCC-based toolchain) ]]
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
[[ StrongSwan Compile ]]
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
[[ SDK Install ]]
|
||||||
|
|
||||||
|
1) $ ti-processor-sdk-linux-am335x-evm-03.03.00.04-Linux-x86-Install.bin
|
||||||
|
|
||||||
|
2) $ sudo apt-get install u-boot-tools
|
||||||
|
$ sudo ./setup.sh
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
[ Issues ]
|
||||||
|
|
||||||
|
[ uboot-mkimage ]
|
||||||
|
Package uboot-mkimage is not available, but is referred to by another package.
|
||||||
|
This may mean that the package is missing, has been obsoleted, or
|
||||||
|
is only available from another source
|
||||||
|
However the following packages replace it:
|
||||||
|
u-boot-tools:i386 u-boot-tools
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
[[ TI BeableBone Black Dev Board ]]
|
||||||
|
@http://www.ti.com/tool/beaglebk
|
||||||
|
processor: AM335X (1GHz AM3359 Sitara ARM Cortex-A8)
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
[[ Ubuntu LTS 16.04.x ]]
|
||||||
|
release notes: @https://wiki.ubuntu.com/XenialXerus/ReleaseNotes
|
||||||
|
|
||||||
|
SDK requires 16.04.x to work properly
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
[[ PROCESSOR-SDK-LINUX-AM335X 03_03_00_04 ]]
|
||||||
|
|
||||||
|
CPU SDK (AM335X)
|
||||||
|
@http://www.ti.com/tool/processor-sdk-am335x
|
||||||
|
|
||||||
|
XDEV Lab Supported SDK
|
||||||
|
@http://software-dl.ti.com/processor-sdk-linux/esd/AM335X/03_03_00_04/index_FDS.html
|
||||||
|
|
||||||
|
|
||||||
|
Create SD Card ... using SDK
|
||||||
|
@http://processors.wiki.ti.com/index.php/Processor_SDK_Linux_create_SD_card_script
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -0,0 +1,90 @@
|
||||||
|
[[[ BeagleBone Black Wifi ]]]
|
||||||
|
|
||||||
|
|
||||||
|
[[ Config ]]
|
||||||
|
|
||||||
|
|
||||||
|
[ Network Interfaces ]
|
||||||
|
/etc/network/interfaces
|
||||||
|
USB0: debian@192.168.7.2
|
||||||
|
ETH0: debian@192.168.6.1
|
||||||
|
|
||||||
|
|
||||||
|
[ Serial ]
|
||||||
|
# /dev/tty.usbmodem-XXXX
|
||||||
|
# /dev/tty.usbserial-XXXX
|
||||||
|
# /dev/tty.usbserial-AH05JI3A
|
||||||
|
|
||||||
|
|
||||||
|
# connect to serial device, log to a file ("screenlog.0"), name screen "bbb"
|
||||||
|
# ls /dev/tty.usb*
|
||||||
|
$ screen -L -R bbb /dev/tty.usbserial-AH05JI3A 115200
|
||||||
|
|
||||||
|
user: root
|
||||||
|
|
||||||
|
# screen commands
|
||||||
|
detach: Ctrl+A Ctrl+d
|
||||||
|
exit: Ctrl+A Ctrl+\
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
[ WiFi Access Point ]
|
||||||
|
SSID: BeagleBone-4F37
|
||||||
|
Pass: BeagleBone
|
||||||
|
|
||||||
|
"tether" interface
|
||||||
|
IP: 192.168.0.1
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
[[ WiFi Configs ]]
|
||||||
|
|
||||||
|
|
||||||
|
[ Config X ]
|
||||||
|
$ connmanctl
|
||||||
|
|
||||||
|
connmanctl>
|
||||||
|
connmanctl> scan wifi
|
||||||
|
connmanctl> services
|
||||||
|
.. wifi_506583e44f37_2e2e_managed_psk
|
||||||
|
connmanctl> agent on
|
||||||
|
connmanctl> connect wifi_506583e44f37_2e2e_managed_psk
|
||||||
|
Passphrase? 12345Gledhill12345
|
||||||
|
Connected wifi_506583e44f37_2e2e_managed_psk
|
||||||
|
|
||||||
|
|
||||||
|
[ Config XX ]
|
||||||
|
wpa_supplicant -B -i wlan0 -c < (SSID PASS)
|
||||||
|
|
||||||
|
|
||||||
|
[ Config 1 ]
|
||||||
|
$ vim /etc/network/interaces
|
||||||
|
auto wlan0
|
||||||
|
iface wlan0 inet dhcp
|
||||||
|
wpa-ssid {ssid}
|
||||||
|
wpa-psk {password}
|
||||||
|
|
||||||
|
$ sudo dhclient wlan0
|
||||||
|
|
||||||
|
|
||||||
|
[ Config 2 ]
|
||||||
|
$ sudo ifconfig wlan0 up
|
||||||
|
$ sudo iwlist wlan0 scan
|
||||||
|
$ sudo iwconfig wlan0 essid CrystalWifi key s:newsky12
|
||||||
|
$ sudo dhclient wlan0
|
||||||
|
|
||||||
|
[ Turn off]
|
||||||
|
$ sudo ifconfig wlan0 down
|
||||||
|
|
||||||
|
|
||||||
|
[ Config Option 3 ]
|
||||||
|
$ connmanctl
|
||||||
|
#connmanctl> tether wifi disable
|
||||||
|
#connmanctl> enable wifi
|
||||||
|
#connmanctl> scan wifi
|
||||||
|
#connmanctl> services
|
||||||
|
#connmanctl> agent on
|
||||||
|
#connmanctl> connect wifi_*_managed_psk
|
||||||
|
#connmanctl> quit
|
||||||
|
|
||||||
|
|
|
@ -0,0 +1,30 @@
|
||||||
|
[[[ Certificate Dev Notes ]]]
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
[[ Steps ]]
|
||||||
|
* install CA certificate
|
||||||
|
* install CA I certificate
|
||||||
|
|
||||||
|
* install .p12 file for client authentication
|
||||||
|
-push .p12 to /data/media/0/Download
|
||||||
|
* install CA I certificate as truste
|
||||||
|
-push ca_i.crt.pem files to /data/media/0/Download
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
[[ Issues ]]
|
||||||
|
|
||||||
|
[ Client Authentication Failure ]
|
||||||
|
|
||||||
|
1. CANNOT AUTHENTICATE SERVER
|
||||||
|
-install CA I certificate (from .pem file)
|
||||||
|
|
||||||
|
2. CANNOT VALIDATE SERVER CERT (timestamp issue)
|
||||||
|
-"subject certificate invalid (valid from May 1 ...)"
|
||||||
|
-fix time on Android device
|
||||||
|
|
||||||
|
3. CONSTRAINT CHECK FAILED
|
||||||
|
"constraint check failed: identity '192.168.123.129' required"
|
||||||
|
-need to add SAN using v3 extensions
|
||||||
|
|
|
@ -0,0 +1,149 @@
|
||||||
|
[[[ Certificates ]]]
|
||||||
|
|
||||||
|
|
||||||
|
[[ VPN Two-Factor Authentication (2FA) ]]
|
||||||
|
# example for 2FA
|
||||||
|
http://ocserv.gitlab.io/www/recipes-ocserv-2fa.html
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
[[ OpenSSL ]]
|
||||||
|
# openssl ca (command that uses a text database to create CRLs and certificates with serials)
|
||||||
|
@ https://www.openssl.org/docs/manmaster/man1/ca.html
|
||||||
|
|
||||||
|
# opensll x509
|
||||||
|
@ https://www.openssl.org/docs/manmaster/man1/x509.html
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
[[ Android ]]
|
||||||
|
# Android 7.x changes cert installation behavior changes
|
||||||
|
@ https://stackoverflow.com/questions/39215229/how-to-get-charles-proxy-work-with-android-7-nougat
|
||||||
|
|
||||||
|
"What complicates matters is that the Settings -> Security -> Install from storage
|
||||||
|
does not provide an explicit way for the user to specify whether they are installing
|
||||||
|
a client authentication credential (private key + cert chain) or a server authentication
|
||||||
|
trust anchor (just a CA cert -- no private key needed).
|
||||||
|
As a result, the Settings -> Security -> Install from storage flow guesses whether it''s
|
||||||
|
dealing with client/user authentication credential or server authentication trust anchor
|
||||||
|
by assuming that, if a private key is specified, it must be a client/user authentication credential."
|
||||||
|
|
||||||
|
|
||||||
|
[[ StrongSwan Maintenance Cert ]]
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
[[ StrongSwan CA Intermediates ]]
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
[[ Certificate Attributes ]]
|
||||||
|
@ https://superuser.com/questions/738612/openssl-ca-keyusage-extension#738644
|
||||||
|
# example of configuration options
|
||||||
|
@ https://github.com/JW0914/Wikis/blob/master/Scripts%2BConfigs/OpenSSL/openssl.cnf
|
||||||
|
|
||||||
|
pathLenConstraintof == 0
|
||||||
|
"I.e. a pathLenConstraintof 0 does still allow the CA to issue certificates,
|
||||||
|
but these certificates must be end-entity-certificates (the CA flag in BasicConstraints
|
||||||
|
is false - these are the "normal" certificates that are issued to people or organizations)"
|
||||||
|
|
||||||
|
|
||||||
|
pathLenConstraintof > 0
|
||||||
|
"If the pathLenConstraintof a given CA certificate is > 0, then it expresses the number
|
||||||
|
of possible intermediate CA certificates in a path built from an end-entity certificate
|
||||||
|
up to the CA certificate. Let''s say CA X has a pathLenConstraint of 2, the end-entity
|
||||||
|
certificate is issued to EE. Then the following scenarios are valid (I denoting an
|
||||||
|
intermediate CA certificate)"
|
||||||
|
|
||||||
|
VALID
|
||||||
|
X - EE
|
||||||
|
X - I1 - EE
|
||||||
|
X - I1 - I2 - EE
|
||||||
|
|
||||||
|
INVALID
|
||||||
|
X - I1 - I2 - I3 - EE
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
[[ VPN Clients ]]
|
||||||
|
|
||||||
|
[ misc notes ]
|
||||||
|
TUN/TAP
|
||||||
|
"Mac OS X users with OS X 10.6 or older, or using OpenConnect 6.00 or older,
|
||||||
|
will also need to install the Mac OS X tun/tap driver. Newer versions of OpenConnect
|
||||||
|
will use the utun device on OS X which does not require additional kernel modules to
|
||||||
|
be installed."
|
||||||
|
|
||||||
|
|
||||||
|
[ openconnect ]
|
||||||
|
# Support --key-password for GnuTLS PKCS#11 PIN.
|
||||||
|
|
||||||
|
# site
|
||||||
|
@ http://www.infradead.org/openconnect/
|
||||||
|
|
||||||
|
# comments that this works
|
||||||
|
@ https://gist.github.com/moklett/3170636
|
||||||
|
|
||||||
|
# compiling
|
||||||
|
@ http://www.infradead.org/openconnect/building.html
|
||||||
|
|
||||||
|
|
||||||
|
[ tunnelbrick ]
|
||||||
|
@ https://github.com/Tunnelblick/Tunnelblick
|
||||||
|
@ https://www.tunnelblick.net/cInstall.html
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
[[ IKEv2 vs OpenVPN ]]
|
||||||
|
@ https://security.stackexchange.com/questions/105967/ikev2-vs-openvpn
|
||||||
|
@ https://security.stackexchange.com/questions/63330/are-there-any-reasons-for-using-ssl-over-ipsec
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
[[ CA Intermediate ]]
|
||||||
|
|
||||||
|
[ Links ]
|
||||||
|
# nice tutorial site
|
||||||
|
@ https://roll.urown.net/ca/ca_intermed_setup.html
|
||||||
|
#
|
||||||
|
@ https://jamielinux.com/docs/openssl-certificate-authority/create-the-intermediate-pair.html
|
||||||
|
#
|
||||||
|
@ https://smartnets.wordpress.com/2017/04/27/create-certificate-chain-and-sign-certificates-using-openssl/
|
||||||
|
# simple, direct, examples
|
||||||
|
@ https://wiki.cementhorizon.com/display/CH/Example+CA%2C+Intermediate%2C+and+Server+Certificate
|
||||||
|
# Wiki
|
||||||
|
@ https://en.wikipedia.org/wiki/Certificate_signing_request
|
||||||
|
|
||||||
|
|
||||||
|
[ Example Code ]
|
||||||
|
# Generate CSR & CA_I keys
|
||||||
|
$ openssl req -new -newkey rsa:2048 -nodes -out ca_i.csr -keyout ca_i_key_222.key -subj "/C=US/ST=Railroad/L=Train/O=ACME INC./OU=ACME Flyaway/CN=www.acme.xyz"
|
||||||
|
|
||||||
|
|
||||||
|
# Create CA
|
||||||
|
openssl genrsa -out ca.key 4096
|
||||||
|
openssl req -new -x509 -nodes -sha1 -days 1825 -key ca.key -out ca.crt
|
||||||
|
|
||||||
|
# Create Intermediate
|
||||||
|
openssl genrsa -out intermediate.key 4096
|
||||||
|
openssl req -new -sha1 -key intermediate.key -out intermediate.csr
|
||||||
|
|
||||||
|
# CA signs Intermediate
|
||||||
|
openssl x509 -req -days 1825 -in intermediate.csr -CA ca.crt -CAkey ca.key -set_serial 01 -out intermediate.crt
|
||||||
|
|
||||||
|
# Create Server
|
||||||
|
openssl genrsa -out test.example.com.key 4096
|
||||||
|
openssl req -new -key test.example.com.key -out test.example.com.csr
|
||||||
|
|
||||||
|
# Intermediate signs Server
|
||||||
|
openssl x509 -req -days 1825 -in test.example.com.csr -CA intermediate.crt -CAkey intermediate.key -set_serial 01 -out test.example.com.crt
|
||||||
|
|
||||||
|
|
||||||
|
[ Certificate Signing Request ]
|
||||||
|
# "US", "RailRoad", "City", "ACME", "ACME FLyaway", "flyaway.acme.xyz", "admin@acme.xyz"
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -0,0 +1,17 @@
|
||||||
|
[[[ CA Intermediate StrongSwan Config Notes ]]]
|
||||||
|
|
||||||
|
|
||||||
|
[ Info ]
|
||||||
|
* IKEv2/IPsec
|
||||||
|
|
||||||
|
[ Links ]
|
||||||
|
# Configure
|
||||||
|
@ https://www.digitalocean.com/community/tutorials/how-to-set-up-an-ikev2-vpn-server-with-strongswan-on-ubuntu-16-04
|
||||||
|
|
||||||
|
# strongswan ikev2 setup with lets-encrypt certs
|
||||||
|
@ https://github.com/jawj/IKEv2-setup
|
||||||
|
|
||||||
|
# vpn tech info
|
||||||
|
@ https://www.bestvpn.com/vpn-encryption-the-complete-guide/
|
||||||
|
|
||||||
|
|
|
@ -0,0 +1,12 @@
|
||||||
|
[[[ Certificate Code Command & Control ]]]
|
||||||
|
|
||||||
|
|
||||||
|
# show the sections of the package file
|
||||||
|
$ openssl pkcs12 -in ~/cert.p12 -nodes -passin pass:"password"
|
||||||
|
|
||||||
|
# show all textual information
|
||||||
|
$ openssl pkcs12 -in ~/cert.p12 -nodes -passin pass:"password" | \
|
||||||
|
openssl x509 -noout -text
|
||||||
|
openssl x509 -noout -subject
|
||||||
|
|
||||||
|
|
|
@ -0,0 +1,19 @@
|
||||||
|
[[[ Certificate Overlord ]]]
|
||||||
|
|
||||||
|
* GUI with modern design (responsive)
|
||||||
|
-modern form input features: auto complete, highlighting
|
||||||
|
* simple wizard
|
||||||
|
* simple mode for "generate client certificate"
|
||||||
|
* advanced mode for "create template"
|
||||||
|
* uses modern crypto (wolfssl, openssl, can be in FIPS mode)
|
||||||
|
* batch generation from templates
|
||||||
|
* key generation using good random bits
|
||||||
|
* export to .p12 files using password-scheme
|
||||||
|
|
||||||
|
** SCEP support using 3rd party (headless mode)
|
||||||
|
-use the GUI to turn the service on/off
|
||||||
|
-pre-packaged
|
||||||
|
-can use the same CA-I as the GUI, but headless ("keystore")
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -0,0 +1,99 @@
|
||||||
|
[[[ Certificate Strings Notes ]]]
|
||||||
|
|
||||||
|
|
||||||
|
[ Certificat Chain Example Strings ]
|
||||||
|
# look here to find text of a certificate chain for Apple certs
|
||||||
|
@see ss-vpn/source/ss/dev/screenshots/cert_examples
|
||||||
|
|
||||||
|
* "Apple Root CA" : root certificate authority
|
||||||
|
--> "Developer ID Certificate Authority" : Intermediate Certificate Authority
|
||||||
|
--> "Developer ID Installer: Prolific Tech Inc (2MP849R8J5)"
|
||||||
|
|
||||||
|
|
||||||
|
* "Apple Root CA" : root certificate authority
|
||||||
|
Subject Name:
|
||||||
|
"Common Name" : "Apple Root CA"
|
||||||
|
"Organization Unit" : "Apple Certificate Authority"
|
||||||
|
"Organization" : "Apple Inc."
|
||||||
|
"Country" : "US"
|
||||||
|
Issuer Name:
|
||||||
|
"Common Name" : "Apple Root CA"
|
||||||
|
"Organization Unit" : "Apple Certificate Authority"
|
||||||
|
"Organization" : "Apple Inc."
|
||||||
|
"Country" : "US"
|
||||||
|
"Serial Number" : 2
|
||||||
|
"Version" : 3
|
||||||
|
"Sign Alg" : "SHA-1"
|
||||||
|
Extension Key Usage:
|
||||||
|
Critical : "Yes"
|
||||||
|
Usage : "Key Cert Sign, CRL Sign"
|
||||||
|
Extension Basic Constraint:
|
||||||
|
Critical : "Yes"
|
||||||
|
Certificate Authority : "Yes"
|
||||||
|
|
||||||
|
|
||||||
|
--> "Developer ID Certificate Authority" : Intermediate Certificate Authority
|
||||||
|
Subject Name:
|
||||||
|
"Common Name" : "Developer ID Certificate Authority"
|
||||||
|
"Country" : "US"
|
||||||
|
"Organization" : "Apple Inc."
|
||||||
|
"Organization Unit" : "Apple Certificate Authority"
|
||||||
|
Issuer Name:
|
||||||
|
"Country" : "US"
|
||||||
|
"Organization" : "Apple Inc."
|
||||||
|
"Organization Unit" : "Apple Certificate Authority"
|
||||||
|
"Common Name" : "Apple Root CA"
|
||||||
|
"Serial Number" : 2
|
||||||
|
"Version" : 3
|
||||||
|
"Sign Alg" : "SHA-1"
|
||||||
|
Extension Key Usage:
|
||||||
|
Critical : "Yes"
|
||||||
|
Usage : "Digital Signature, Key Cert Sign, CRL Sign"
|
||||||
|
Extension Basic Constraint:
|
||||||
|
Critical : "Yes"
|
||||||
|
Certificate Authority : "Yes"
|
||||||
|
|
||||||
|
|
||||||
|
--> "Developer ID Installer: Prolific Tech Inc (2MP849R8J5)"
|
||||||
|
Subject Name:
|
||||||
|
"Country": "US"
|
||||||
|
"Organization" : "Apple Inc."
|
||||||
|
"Organization Unit" : "Apple Certificate Authority"
|
||||||
|
"Common Name" : "Developer ID Certificate Authority"
|
||||||
|
Issuer Name:
|
||||||
|
"Country": "US"
|
||||||
|
"Organization" : "Apple Inc."
|
||||||
|
"Organization Unit" : "Apple Certificate Authority"
|
||||||
|
"Common Name" : "Apple Root CA"
|
||||||
|
"Serial Number" : 2
|
||||||
|
"Version" : 3
|
||||||
|
"Sign Alg" : "SHA-1"
|
||||||
|
Extension Key Usage:
|
||||||
|
Critical : "Yes"
|
||||||
|
Usage : "Digital Signature"
|
||||||
|
Extension Basic Constraint:
|
||||||
|
Critical : "Yes"
|
||||||
|
Certificate Authority : "No"
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
[ Certificate Serial # ]
|
||||||
|
"
|
||||||
|
In a certificate, the serial number is chosen by the CA which issued the certificate.
|
||||||
|
It is just written in the certificate. The CA can choose the serial number in any way
|
||||||
|
as it sees fit, not necessarily randomly (and it has to fit in 20 bytes). A CA is
|
||||||
|
supposed to choose unique serial numbers, that is, unique for the CA. You cannot count
|
||||||
|
on a serial number being unique worldwide; in the dream world of X.509, it is the pair
|
||||||
|
issuerDN+serial which is unique worldwide (each CA having its own unique distinguished
|
||||||
|
name, and taking care not to reuse serial numbers).
|
||||||
|
|
||||||
|
The thumbprint is a hash value computed over the complete certificate, which includes
|
||||||
|
all its fields, including the signature. That one is unique worldwide, for a given
|
||||||
|
certificate, up to the inherent collision resistance of the used hash function.
|
||||||
|
Microsoft software tends to use SHA-1, for which some theoretical weaknesses are known,
|
||||||
|
but no actual collision has been produced (yet). A collision attack on SHA-1 has now
|
||||||
|
been demonstrated by researchers from CWI and Google.
|
||||||
|
"
|
||||||
|
|
||||||
|
|
|
@ -0,0 +1,95 @@
|
||||||
|
openssl pkcs12 -in ca/ca_i_s.p12 -nodes -passin pass:"password"
|
||||||
|
|
||||||
|
MAC verified OK
|
||||||
|
Bag Attributes
|
||||||
|
localKeyID: 3F 42 B6 D2 5A EB 0E 82 20 D3 30 9E 3A C9 5F 8A 81 8A 4E BC
|
||||||
|
friendlyName: CA Intermediate Mobile Provision
|
||||||
|
subject=/C=OO/O=ACME/OU=ACME Intermediate/CN=01001.i.acme.xyz
|
||||||
|
issuer=/C=OO/O=ACME/CN=root.acme.xyz
|
||||||
|
-----BEGIN CERTIFICATE-----
|
||||||
|
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
|
||||||
|
-----END CERTIFICATE-----
|
||||||
|
Bag Attributes
|
||||||
|
localKeyID: 3F 42 B6 D2 5A EB 0E 82 20 D3 30 9E 3A C9 5F 8A 81 8A 4E BC
|
||||||
|
friendlyName: CA Intermediate Mobile Provision
|
||||||
|
Key Attributes: <No Attributes>
|
||||||
|
-----BEGIN PRIVATE KEY-----
|
||||||
|
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
|
||||||
|
3WcUYO26Cdy4E0fQNkDINROy0rS5RA==
|
||||||
|
-----END PRIVATE KEY-----
|
|
@ -0,0 +1,163 @@
|
||||||
|
openssl pkcs12 -in ca/ca_i_s.p12 -nodes -passin pass:"password"
|
||||||
|
|
||||||
|
MAC verified OK
|
||||||
|
Bag Attributes
|
||||||
|
localKeyID: 6E 5B F0 AF 1A 9A 92 CC D9 A5 51 8E 84 3C F5 7A BE 03 99 72
|
||||||
|
friendlyName: Client 1 VPN Certificate
|
||||||
|
subject=/C=OO/O=ACME/OU=ACME Maintenance/CN=client_m
|
||||||
|
issuer=/C=OO/O=ACME/OU=ACME Intermediate/CN=01002.i.acme.xyz
|
||||||
|
-----BEGIN CERTIFICATE-----
|
||||||
|
MIIFEjCCAvoCAgPpMA0GCSqGSIb3DQEBCwUAMFMxCzAJBgNVBAYTAk9PMQ0wCwYD
|
||||||
|
VQQKDARBQ01FMRowGAYDVQQLDBFBQ01FIEludGVybWVkaWF0ZTEZMBcGA1UEAwwQ
|
||||||
|
MDEwMDIuaS5hY21lLnh5ejAeFw0xODA3MjQwNDAzMDFaFw0xOTA3MjQwNDAzMDFa
|
||||||
|
MEoxCzAJBgNVBAYTAk9PMQ0wCwYDVQQKDARBQ01FMRkwFwYDVQQLDBBBQ01FIE1h
|
||||||
|
aW50ZW5hbmNlMREwDwYDVQQDDAhjbGllbnRfbTCCAiIwDQYJKoZIhvcNAQEBBQAD
|
||||||
|
ggIPADCCAgoCggIBALk8RV65kDzZHVk542YrO0okz8KczdWs0aEIGnjZRyoCoBLa
|
||||||
|
YqFTsR9Nj1Zn1rkEcC22EYZO/GCfeSEfywZGvTI1fyZ4fMPC4hKZ6f1CpdgHw+Zu
|
||||||
|
3seAUtkXg2vtb4WMeCAvIN1KlpjxsIwU89RTAhFlJ9eC5s/tqjfb8Sg6ifrxGzCh
|
||||||
|
FuPsiu/1zIFmgUXmK/sWIX3P7YZShaTSiAlKR4M86ZLIhoK4ezCd9hwTmw5zHlQj
|
||||||
|
ktpQBsbpvmzPUpNfkeocUkF88LmlFCvGxXgKePQgWGXmVC2Rlo3kZUmq+r/6JTJv
|
||||||
|
5QcUU9o4Us/G+FJp24+RDSuHP6wQt86REbD2i4XsKa9ldM5ZDPJqa/7eM3C4nvsg
|
||||||
|
9pxfQHDVTmJPmmHscd1/kHXLCzQdt6sB9EhR9lxsPeOs0Bmk3sZ3J4qjq4kNyMxT
|
||||||
|
wfP5wL3TSSHjVSYuGpBqieuRwYrCPZBUG3OpBrWq/a97kSSkzI/pt1w3ySXkQD1s
|
||||||
|
7ZXHWNYrozdhoTB9TkBxQcoO5ALGz92fV75dAOh93oZMXxcQeJgsKY1aLEkgE/+C
|
||||||
|
NbZSeiWpr6Xf6EgJsR839ucEsDi/yUyOcpGA5peCZzpAnZVF8Ga2rHeer7TlIFR6
|
||||||
|
9vOLV1N5TPW9QJjRygKEtb/ykMHCnh0OFdb8OxNNSfLDTDixfgJBqw3FcFUzAgMB
|
||||||
|
AAEwDQYJKoZIhvcNAQELBQADggIBAASuxNTPgjtRHCYJ2spXpf+sFs0uVkoCzi6R
|
||||||
|
2VxI16a0j5zEC8xS9ras+G39o5Om/U8f/dl2K37nmY9kMVk4LwNPXbWgHdTvZd8p
|
||||||
|
G1j7WjrjnbigbKEiQwyXVDz4u9UHZHmAahyez4cz0juTx9M91LIBU03YALKESF40
|
||||||
|
kL/GAXbfVVtCqUuk4FJwYODRcSB3+7Hz4XxObdlwsQGjNdB3tT/oMG2PCWfdhE0I
|
||||||
|
hazzzq+6UOMDrFvhgpYzrfYr+LR/nggYq0P86q8pwiwnccrflhbJq+Ec318WYeqi
|
||||||
|
d3gx/JAmB5Kqtzabo6C3Us0kxlMkTNmNmQ46gqj+GmA4gSZhXbTk3Q1fjwmfTTGR
|
||||||
|
m90+S/mmkO9HISGxJbcC8wf1dksvdt027BYXoJPNXsrxdmlB+an21r9oiCjoI6r5
|
||||||
|
DD2K/iFGah7cRhSdUlPvi924myshKE0KMSg987sPlDFdy6yNGdqq+blL2FlhlMGz
|
||||||
|
g0OVtWzZKWYgQnPsQ/9AGLoQ+kttQrIgkmTd0SdLhT6DSSvK8VwNb9SwpHsp8X2Y
|
||||||
|
68vCjR8NK6FmtOVwRTaJ/EJSHjKv5VEzVR9uZCxtjKJd1qjfhE8mM6ADz9DVKH8k
|
||||||
|
DFq9kjgmTg2YZlVRBFkexYv/jMqs0PrnY3y4RAyVv0kSPYaAJ10AErhCE/VtZJ5e
|
||||||
|
vCWuFzRQ
|
||||||
|
-----END CERTIFICATE-----
|
||||||
|
Bag Attributes
|
||||||
|
friendlyName: client_m@acme.xyz
|
||||||
|
subject=/C=OO/O=ACME/OU=ACME Intermediate/CN=01002.i.acme.xyz
|
||||||
|
issuer=/C=OO/O=ACME/CN=root.acme.xyz
|
||||||
|
-----BEGIN CERTIFICATE-----
|
||||||
|
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
|
||||||
|
-----END CERTIFICATE-----
|
||||||
|
Bag Attributes: <No Attributes>
|
||||||
|
subject=/C=OO/O=ACME/CN=root.acme.xyz
|
||||||
|
issuer=/C=OO/O=ACME/CN=root.acme.xyz
|
||||||
|
-----BEGIN CERTIFICATE-----
|
||||||
|
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
|
||||||
|
sITp+32xUz86IxAbwYuFb0gn
|
||||||
|
-----END CERTIFICATE-----
|
||||||
|
Bag Attributes
|
||||||
|
localKeyID: 6E 5B F0 AF 1A 9A 92 CC D9 A5 51 8E 84 3C F5 7A BE 03 99 72
|
||||||
|
friendlyName: Client 1 VPN Certificate
|
||||||
|
Key Attributes: <No Attributes>
|
||||||
|
-----BEGIN PRIVATE KEY-----
|
||||||
|
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
|
||||||
|
3+lXPccGI6cmYqFTy8FSzjzQrzuBL5E=
|
||||||
|
-----END PRIVATE KEY-----
|
|
@ -0,0 +1,51 @@
|
||||||
|
[[[ Agile Tasking ]]]
|
||||||
|
|
||||||
|
|
||||||
|
[[ WORKING ]]
|
||||||
|
|
||||||
|
* CA-I serial #s ??
|
||||||
|
X.p12 file for CA-I (to import into M$ products)
|
||||||
|
-.p12 file extractor for MH provisioning
|
||||||
|
* create GUI for cert gen process (electron+crypto-interface)
|
||||||
|
* create certificate installation guide
|
||||||
|
-copy file to sd, select .p12 file, password="password"
|
||||||
|
* can I install certificates from an android application??
|
||||||
|
-can I used knox to install certificates??
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
[[ BACKLOG ]]
|
||||||
|
|
||||||
|
[ ver3 ]
|
||||||
|
* create new "certificate bootstrap" with .cfg parameters for CA ".mil" strings
|
||||||
|
* create new CA generation script that also reads .cfg
|
||||||
|
* create new CA-I generation script that uses a CA
|
||||||
|
-also packages .p12 for distrobution (use random high quality password)
|
||||||
|
* create new client generation script that uses CA-I
|
||||||
|
-just for testing purposes
|
||||||
|
* create new server generation script that uses CA-I
|
||||||
|
-just for testing purposes
|
||||||
|
* update ver3/conf so that ipsec.conf is default
|
||||||
|
-update ipsec_dev.conf to have developer
|
||||||
|
|
||||||
|
|
||||||
|
[ bootstrap cert chain-of-trust ]
|
||||||
|
* select bootstrap generation cpu (beaglebone, raspi)
|
||||||
|
* change strings from "acme.xyz" to ".mil"
|
||||||
|
* generate bootstrap
|
||||||
|
-sneakernet two CA-I
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
[ ver4 ]
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
[[ COMPLETED ]]
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
[[ ISSUES ]]
|
||||||
|
|
||||||
|
|
|
@ -0,0 +1,17 @@
|
||||||
|
|
||||||
|
cat -v screenlog.0 | tr -d '^@^M' >> fartface
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
sed 's/\x00\x0a//g' screenlog.0 > fartface
|
||||||
|
|
||||||
|
sed 's/^@^M//g' screenlog.0 > fartface
|
||||||
|
|
||||||
|
|
||||||
|
@^@^M
|
||||||
|
|
||||||
|
|
||||||
|
tr -d '\b\r^M\000' < screenlog.0 | cat -v >> whyusuck
|
||||||
|
|
||||||
|
cat -v screenlog.0 | tr -d '\b\r'
|
||||||
|
|
|
@ -0,0 +1,10 @@
|
||||||
|
[[[ Samsung Tablets ]]]
|
||||||
|
|
||||||
|
|
||||||
|
[[ Android Recovery (bootloader) ]]
|
||||||
|
|
||||||
|
[ Wipe data / Factory reset ]
|
||||||
|
1. Turn off the device.
|
||||||
|
2. Press and hold the Volume Up key and the Home key, then press and hold the Power key.
|
||||||
|
3. When the Samsung Galaxy Tab E logo screen displays, release only the Power key
|
||||||
|
|
|
@ -0,0 +1,303 @@
|
||||||
|
#!/bin/bash
|
||||||
|
#
|
||||||
|
# ACME Certificate Bootstrap v1.3
|
||||||
|
#
|
||||||
|
# This script will generate all the files necessary to build a certificate chain of trust
|
||||||
|
# using a CA, CA Intermediate, Server, and Client certificates. After the bootstrap the other
|
||||||
|
# helper scripts will generate new client/server certificates
|
||||||
|
#
|
||||||
|
PARAM1=$1
|
||||||
|
|
||||||
|
usage() {
|
||||||
|
echo
|
||||||
|
echo "This script will generate all the files necessary to build a certificate chain of trust"
|
||||||
|
echo "using a CA, CA Intermediate, Server, and Client certificates. After the bootstrap the other"
|
||||||
|
echo "helper scripts will generate new certificates"
|
||||||
|
echo
|
||||||
|
echo "Usage: cert_bootstrap <.cnf file (minus the .cnf)>"
|
||||||
|
echo
|
||||||
|
echo "Example: cert_bootstrap org.acme.xyz"
|
||||||
|
exit 1
|
||||||
|
}
|
||||||
|
|
||||||
|
echo_block() {
|
||||||
|
echo
|
||||||
|
echo
|
||||||
|
echo "***** ***** ***** *****"
|
||||||
|
echo $1
|
||||||
|
echo "***** ***** ***** *****"
|
||||||
|
}
|
||||||
|
|
||||||
|
#
|
||||||
|
# CA generation requires .cnf files
|
||||||
|
# create CA directory
|
||||||
|
# create bash variables to CA
|
||||||
|
# restore script back to original path
|
||||||
|
#
|
||||||
|
app_init() {
|
||||||
|
if [[ -n $PARAM1 ]]; then
|
||||||
|
# need to know the location of the configuration file (expected to be in same dir path as this script)
|
||||||
|
CA_CNF="$CD/ca.cnf"
|
||||||
|
|
||||||
|
# handle the case of having the ".cnf" extension or not
|
||||||
|
if [[ ${PARAM1: -4} == .cnf ]]; then
|
||||||
|
ORG_URL=${PARAM1%.*}
|
||||||
|
S_CNF=${PARAM1}
|
||||||
|
echo "ASDF: ${ORG_URL}, ${S_CNF}"
|
||||||
|
else
|
||||||
|
ORG_URL=$PARAM1
|
||||||
|
S_CNF="${PARAM1}.cnf"
|
||||||
|
echo "ZXCV: ${ORG_URL}, ${S_CNF}"
|
||||||
|
fi
|
||||||
|
|
||||||
|
FQ_S_CNF="${CD}/${S_CNF}"
|
||||||
|
if [[ ! -f $FQ_S_CNF ]] || [[ ! -f $CA_CNF ]]; then
|
||||||
|
usage
|
||||||
|
fi
|
||||||
|
else
|
||||||
|
usage
|
||||||
|
fi
|
||||||
|
|
||||||
|
# Organize
|
||||||
|
#
|
||||||
|
# create a unique path for the server certificate
|
||||||
|
UNIQ_DIR=`date +%Y-%m-%d.%H_%M_%S`
|
||||||
|
UNIQ_DIR="cert-chain_${UNIQ_DIR}"
|
||||||
|
mkdir -p "${UNIQ_DIR}"
|
||||||
|
cd "${UNIQ_DIR}"
|
||||||
|
# FQ_DIR="${CD}/${UNIQ_DIR}"
|
||||||
|
}
|
||||||
|
|
||||||
|
#
|
||||||
|
# IN: UNIQ_ID_CA, SERIAL
|
||||||
|
#
|
||||||
|
one-time-ca() {
|
||||||
|
# params
|
||||||
|
SERIAL="101"
|
||||||
|
UNIQ_ID_CA="${SERIAL}.${ORG_URL}"
|
||||||
|
CA_DIR="ca_${UNIQ_ID_CA}"
|
||||||
|
mkdir $CA_DIR
|
||||||
|
cd $CA_DIR
|
||||||
|
generate_ca $UNIQ_ID_CA $SERIAL
|
||||||
|
FQ_CA_DIR=`pwd`
|
||||||
|
FQ_CA_CERT="${FQ_CA_DIR}/ca_${UNIQ_ID_CA}.crt.pem"
|
||||||
|
FQ_CA_KEYS="${FQ_CA_DIR}/ca_${UNIQ_ID_CA}.keys.pem"
|
||||||
|
cd ..
|
||||||
|
}
|
||||||
|
|
||||||
|
# ***** ***** ***** *****
|
||||||
|
#
|
||||||
|
# CERTIFICATE AUTHORITY
|
||||||
|
#
|
||||||
|
# ***** ***** ***** *****
|
||||||
|
# This function will generate a CA Intermediate
|
||||||
|
# IN: UNIQ_ID_CA, SERIAL
|
||||||
|
#
|
||||||
|
generate_ca() {
|
||||||
|
# params
|
||||||
|
UNIQ_ID_CA=$1
|
||||||
|
SERIAL=$2
|
||||||
|
# encrypt the key
|
||||||
|
#openssl genrsa -aes256 -out ca.keys.pem 4096
|
||||||
|
#openssl genrsa -aes256 -password "pass:password" -out ca.keys.pem 4096
|
||||||
|
|
||||||
|
# key un-protected
|
||||||
|
openssl genrsa -out "ca_${UNIQ_ID_CA}.keys.pem" 4096
|
||||||
|
#
|
||||||
|
# Create Certificate (valid for 10 years, after the entire chain of trust expires)
|
||||||
|
openssl req -config $CA_CNF -new -x509 -sha256 -days 3650 -extensions v3_ca \
|
||||||
|
-subj "/C=OO/O=ACME/CN=root.${UNIQ_ID_CA}" -set_serial ${SERIAL} \
|
||||||
|
-key ca_${UNIQ_ID_CA}.keys.pem -out ca_${UNIQ_ID_CA}.crt.pem
|
||||||
|
|
||||||
|
# verify certificate (output to text file for review)
|
||||||
|
openssl x509 -noout -text -in ca_${UNIQ_ID_CA}.crt.pem > ca_${UNIQ_ID_CA}_cert.info.txt
|
||||||
|
}
|
||||||
|
|
||||||
|
#
|
||||||
|
# Create CA Intermediate
|
||||||
|
#
|
||||||
|
#
|
||||||
|
# This function will generate a CA Intermediate
|
||||||
|
# IN: UNIQ_ID_CA, SERIAL
|
||||||
|
#
|
||||||
|
generate_ca_i() {
|
||||||
|
echo_block "Create CA Intermediate (${UNIQ_ID_CA})"
|
||||||
|
# params
|
||||||
|
UNIQ_ID_CA=$1
|
||||||
|
SERIAL=$2
|
||||||
|
|
||||||
|
openssl genrsa -out "ca_i_${UNIQ_ID_CA}.keys.pem" 4096
|
||||||
|
|
||||||
|
# Create Cert Signing Request (CSR)
|
||||||
|
openssl req -config $CA_CNF -new -sha256 \
|
||||||
|
-subj "/C=OO/O=ACME/OU=ACME Intermediate/CN=${UNIQ_ID_CA}" \
|
||||||
|
-key "ca_i_${UNIQ_ID_CA}.keys.pem" -out "ca_i_${UNIQ_ID_CA}.csr.pem"
|
||||||
|
|
||||||
|
# Create Certificate (valid for ~2 years, after the entire chain of trust expires)
|
||||||
|
# CA signs Intermediate
|
||||||
|
openssl x509 -req -days 750 -extfile $CA_CNF -extensions v3_ca_i \
|
||||||
|
-CA $FQ_CA_CERT -CAkey $FQ_CA_KEYS -set_serial ${SERIAL} \
|
||||||
|
-in "ca_i_${UNIQ_ID_CA}.csr.pem" -out "ca_i_${UNIQ_ID_CA}.crt.pem"
|
||||||
|
|
||||||
|
# Package the Certificate Authority Certificates for distro (windoze needs this)
|
||||||
|
openssl pkcs12 -export -password "pass:password" -inkey "ca_i_${UNIQ_ID_CA}.keys.pem" \
|
||||||
|
-name "CA Intermediate Mobile Provision" -certfile $FQ_CA_CERT \
|
||||||
|
-in "ca_i_${UNIQ_ID_CA}.crt.pem" -out "ca_i_${UNIQ_ID_CA}.p12"
|
||||||
|
|
||||||
|
# verify certificate (output to text file for review)
|
||||||
|
openssl x509 -noout -text -in "ca_i_${UNIQ_ID_CA}.crt.pem" > "ca_i_${UNIQ_ID_CA}_crt_info.txt"
|
||||||
|
|
||||||
|
# create certifiate chain
|
||||||
|
cat $FQ_CA_CERT "ca_i_${UNIQ_ID_CA}.crt.pem" > "ca_cert-chain_${UNIQ_ID_CA}.crts.pem"
|
||||||
|
}
|
||||||
|
#
|
||||||
|
# Generate a Server Certificate
|
||||||
|
# IN: UNIQ_ID, UNIQ_ID_CA, SERIAL
|
||||||
|
#
|
||||||
|
generate_server() {
|
||||||
|
echo_block "Generate Server Certificates (${UNIQ_ID})"
|
||||||
|
# params
|
||||||
|
UNIQ_ID=$1
|
||||||
|
UNIQ_ID_CA=$2
|
||||||
|
SERIAL=$3
|
||||||
|
|
||||||
|
openssl genrsa -out "server_${UNIQ_ID}.keys.pem" 4096
|
||||||
|
|
||||||
|
openssl req -new -config $FQ_S_CNF -key "server_${UNIQ_ID}.keys.pem" \
|
||||||
|
-subj "/C=OO/O=ACME/OU=ACME Standard/CN=${UNIQ_ID}" \
|
||||||
|
-out "server_${UNIQ_ID}.csr.pem"
|
||||||
|
|
||||||
|
# Intermediate signs Server
|
||||||
|
openssl x509 -req -days 365 -extfile $FQ_S_CNF -extensions v3_server \
|
||||||
|
-CA "ca_i_${UNIQ_ID_CA}.crt.pem" -CAkey "ca_i_${UNIQ_ID_CA}.keys.pem" -set_serial ${SERIAL} \
|
||||||
|
-in "server_${UNIQ_ID}.csr.pem" -out "server_${UNIQ_ID}.crt.pem"
|
||||||
|
|
||||||
|
# Package the Certificates
|
||||||
|
openssl pkcs12 -export -password "pass:password" -inkey "server_${UNIQ_ID}.keys.pem" \
|
||||||
|
-name "Server ${UNIQ_ID} VPN Certificate" -certfile "ca_cert-chain_${UNIQ_ID_CA}.crts.pem" -caname "server_${UNIQ_ID}@acme.xyz" \
|
||||||
|
-in "server_${UNIQ_ID}.crt.pem" -out "server_${UNIQ_ID}.p12"
|
||||||
|
|
||||||
|
# verify certificate (output to text file for review)
|
||||||
|
openssl x509 -noout -text -in "server_${UNIQ_ID}.crt.pem" > "server_${UNIQ_ID}.crt.info.txt"
|
||||||
|
}
|
||||||
|
#
|
||||||
|
# Generate a Client Certificate
|
||||||
|
# IN: UNIQ_ID, UNIQ_ID_CA, SERIAL
|
||||||
|
#
|
||||||
|
generate_client() {
|
||||||
|
echo_block "Generate Client Certificates (${UNIQ_ID})"
|
||||||
|
# params
|
||||||
|
UNIQ_ID=$1
|
||||||
|
UNIQ_ID_CA=$2
|
||||||
|
SERIAL=$3
|
||||||
|
|
||||||
|
openssl genrsa -out "client_${UNIQ_ID}.keys.pem" 4096
|
||||||
|
|
||||||
|
openssl req -new -key "client_${UNIQ_ID}.keys.pem" \
|
||||||
|
-subj "/C=OO/O=ACME/OU=ACME Standard/CN=client_${UNIQ_ID}" \
|
||||||
|
-out "client_${UNIQ_ID}.csr.pem"
|
||||||
|
# Intermediate signs Client
|
||||||
|
openssl x509 -req -days 365 \
|
||||||
|
-CA "ca_i_${UNIQ_ID_CA}.crt.pem" -CAkey "ca_i_${UNIQ_ID_CA}.keys.pem" -set_serial ${SERIAL} \
|
||||||
|
-in "client_${UNIQ_ID}.csr.pem" -out "client_${UNIQ_ID}.crt.pem"
|
||||||
|
|
||||||
|
# Package the Certificates
|
||||||
|
openssl pkcs12 -export -password "pass:password" -inkey "client_${UNIQ_ID}.keys.pem" \
|
||||||
|
-name "Client ${UNIQ_ID} VPN Certificate" -certfile "ca_cert-chain_${UNIQ_ID_CA}.crts.pem" -caname "client_${UNIQ_ID}@acme.xyz" \
|
||||||
|
-in "client_${UNIQ_ID}.crt.pem" -out "client_${UNIQ_ID}.p12"
|
||||||
|
|
||||||
|
# verify certificate (output to text file for review)
|
||||||
|
openssl x509 -noout -text -in "client_${UNIQ_ID}.crt.pem" > "client_${UNIQ_ID}.info.txt"
|
||||||
|
}
|
||||||
|
|
||||||
|
#
|
||||||
|
# Organize the files into logical folders based on serial #
|
||||||
|
#
|
||||||
|
organize() {
|
||||||
|
# cert info
|
||||||
|
mkdir docs
|
||||||
|
mv *.txt docs/
|
||||||
|
|
||||||
|
# move all files to folders
|
||||||
|
mkdir ca-i
|
||||||
|
mv ca_i*.pem ca-i/
|
||||||
|
|
||||||
|
mkdir servers
|
||||||
|
mv server_*.pem servers/
|
||||||
|
|
||||||
|
mkdir clients
|
||||||
|
mv client*.pem clients/
|
||||||
|
}
|
||||||
|
|
||||||
|
#
|
||||||
|
# Generate a PKI chain
|
||||||
|
# - the certificate chain is unique based on the serial #
|
||||||
|
# - generate a new CA I
|
||||||
|
# - generate two server certificates
|
||||||
|
# - generate two client certificates
|
||||||
|
#
|
||||||
|
# INPUT: BASE SERIAL #, LOOP NUM
|
||||||
|
#
|
||||||
|
gen_pki_certs() {
|
||||||
|
B_SERIAL=$1
|
||||||
|
NUM_CERTS=$2
|
||||||
|
|
||||||
|
# Create CA Intermediate
|
||||||
|
UNIQ_ID_CA="${B_SERIAL}.${ORG_URL}"
|
||||||
|
generate_ca_i $UNIQ_ID_CA $B_SERIAL
|
||||||
|
|
||||||
|
# Server Certificates
|
||||||
|
for NUM in $(seq 1 $2)
|
||||||
|
do
|
||||||
|
generate_server "$((B_SERIAL+NUM)).${ORG_URL}" $UNIQ_ID_CA $((B_SERIAL+NUM))
|
||||||
|
done
|
||||||
|
|
||||||
|
# Client Certificates
|
||||||
|
for NUM in $(seq 1 $2)
|
||||||
|
do
|
||||||
|
generate_client "$((B_SERIAL+NUM)).${ORG_URL}" $UNIQ_ID_CA $((B_SERIAL+NUM))
|
||||||
|
done
|
||||||
|
}
|
||||||
|
|
||||||
|
#
|
||||||
|
# INPUT: SERIAL #, LOOP NUM
|
||||||
|
#
|
||||||
|
gen_pki() {
|
||||||
|
SERIAL=$1
|
||||||
|
|
||||||
|
mkdir "ca_i_${SERIAL}.${ORG_URL}"
|
||||||
|
cd "ca_i_${SERIAL}.${ORG_URL}"
|
||||||
|
|
||||||
|
gen_pki_certs $SERIAL $2
|
||||||
|
organize
|
||||||
|
|
||||||
|
cd ..
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
main() {
|
||||||
|
CD=`pwd`
|
||||||
|
|
||||||
|
app_init
|
||||||
|
one-time-ca
|
||||||
|
gen_pki 10001 2
|
||||||
|
gen_pki 50001 5
|
||||||
|
gen_pki 80001 10
|
||||||
|
|
||||||
|
cd "${CD}"
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
# ***** ***** ***** ***** ***** ***** ***** ***** ***** ***** ***** *****
|
||||||
|
#
|
||||||
|
# main execution begins here (because all the functions have to be defined)
|
||||||
|
#
|
||||||
|
# ***** ***** ***** ***** ***** ***** ***** ***** ***** ***** ***** *****
|
||||||
|
|
||||||
|
main
|
||||||
|
|
||||||
|
# ***** ***** ***** *****
|
||||||
|
#
|
||||||
|
#
|
||||||
|
#
|
||||||
|
# ***** ***** ***** *****
|
|
@ -0,0 +1,56 @@
|
||||||
|
#
|
||||||
|
#
|
||||||
|
# IMPORTANT INFO
|
||||||
|
#
|
||||||
|
#
|
||||||
|
[ v3_server ]
|
||||||
|
# Extensions for server certificates (`man x509v3_config`).
|
||||||
|
basicConstraints = CA:FALSE
|
||||||
|
nsCertType = server
|
||||||
|
nsComment = "ACME Generated"
|
||||||
|
subjectKeyIdentifier = hash
|
||||||
|
authorityKeyIdentifier = keyid,issuer:always
|
||||||
|
keyUsage = critical, digitalSignature, keyEncipherment
|
||||||
|
extendedKeyUsage = serverAuth
|
||||||
|
subjectAltName = IP:192.168.1.3
|
||||||
|
#subjectAltName = @san_info
|
||||||
|
|
||||||
|
[ san_info ]
|
||||||
|
IP = 192.168.1.3
|
||||||
|
|
||||||
|
|
||||||
|
#
|
||||||
|
#
|
||||||
|
# FORCED TO INCLUDE THIS JUNK
|
||||||
|
#
|
||||||
|
#
|
||||||
|
[ req ]
|
||||||
|
# Options for the `req` tool (`man req`).
|
||||||
|
default_bits = 4096
|
||||||
|
distinguished_name = req_distinguished_name
|
||||||
|
string_mask = utf8only
|
||||||
|
|
||||||
|
# SHA-1 is deprecated, so use SHA-2 instead.
|
||||||
|
default_md = sha256
|
||||||
|
|
||||||
|
# Extension to add when the -x509 option is used.
|
||||||
|
#x509_extensions = v3_ca
|
||||||
|
|
||||||
|
[ req_distinguished_name ]
|
||||||
|
# See <https://en.wikipedia.org/wiki/Certificate_signing_request>.
|
||||||
|
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
|
||||||
|
|
||||||
|
# Optionally, specify some defaults.
|
||||||
|
countryName_default = US
|
||||||
|
stateOrProvinceName_default = State51
|
||||||
|
localityName_default =
|
||||||
|
0.organizationName_default = ACME R&D
|
||||||
|
organizationalUnitName_default =
|
||||||
|
emailAddress_default =
|
||||||
|
|
|
@ -0,0 +1,113 @@
|
||||||
|
# Root CA configuration file.
|
||||||
|
|
||||||
|
[ ca ]
|
||||||
|
# `man ca`
|
||||||
|
default_ca = CA_default
|
||||||
|
|
||||||
|
[ CA_default ]
|
||||||
|
# SHA-1 is deprecated, so use SHA-2 instead.
|
||||||
|
default_md = sha256
|
||||||
|
|
||||||
|
name_opt = ca_default
|
||||||
|
cert_opt = ca_default
|
||||||
|
default_days = 375
|
||||||
|
preserve = no
|
||||||
|
policy = policy_strict
|
||||||
|
|
||||||
|
[ policy_strict ]
|
||||||
|
# The root CA should only sign intermediate certificates that match.
|
||||||
|
# See the POLICY FORMAT section of `man ca`.
|
||||||
|
countryName = match
|
||||||
|
stateOrProvinceName = match
|
||||||
|
organizationName = match
|
||||||
|
organizationalUnitName = optional
|
||||||
|
commonName = supplied
|
||||||
|
emailAddress = optional
|
||||||
|
|
||||||
|
[ policy_loose ]
|
||||||
|
# Allow the intermediate CA to sign a more diverse range of certificates.
|
||||||
|
# See the POLICY FORMAT section of the `ca` man page.
|
||||||
|
countryName = optional
|
||||||
|
stateOrProvinceName = optional
|
||||||
|
localityName = optional
|
||||||
|
organizationName = optional
|
||||||
|
organizationalUnitName = optional
|
||||||
|
commonName = supplied
|
||||||
|
emailAddress = optional
|
||||||
|
|
||||||
|
[ req ]
|
||||||
|
# Options for the `req` tool (`man req`).
|
||||||
|
default_bits = 4096
|
||||||
|
distinguished_name = req_distinguished_name
|
||||||
|
string_mask = utf8only
|
||||||
|
|
||||||
|
# SHA-1 is deprecated, so use SHA-2 instead.
|
||||||
|
default_md = sha256
|
||||||
|
|
||||||
|
# Extension to add when the -x509 option is used.
|
||||||
|
x509_extensions = v3_ca
|
||||||
|
|
||||||
|
[ req_distinguished_name ]
|
||||||
|
# See <https://en.wikipedia.org/wiki/Certificate_signing_request>.
|
||||||
|
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
|
||||||
|
|
||||||
|
# Optionally, specify some defaults.
|
||||||
|
countryName_default = US
|
||||||
|
stateOrProvinceName_default = State51
|
||||||
|
localityName_default =
|
||||||
|
0.organizationName_default = ACME R&D
|
||||||
|
organizationalUnitName_default =
|
||||||
|
emailAddress_default =
|
||||||
|
|
||||||
|
[ v3_ca ]
|
||||||
|
# Extensions for a typical CA (`man x509v3_config`).
|
||||||
|
basicConstraints = critical, CA:true
|
||||||
|
keyUsage = critical, cRLSign, digitalSignature, keyCertSign
|
||||||
|
subjectKeyIdentifier = hash
|
||||||
|
authorityKeyIdentifier = keyid:always,issuer
|
||||||
|
|
||||||
|
[ v3_ca_i ]
|
||||||
|
# Extensions for a typical intermediate CA (`man x509v3_config`).
|
||||||
|
basicConstraints = critical, CA:true, pathlen:0
|
||||||
|
keyUsage = critical, cRLSign, digitalSignature, keyCertSign
|
||||||
|
subjectKeyIdentifier = hash
|
||||||
|
authorityKeyIdentifier = keyid:always,issuer
|
||||||
|
|
||||||
|
[ usr_cert ]
|
||||||
|
# Extensions for client certificates (`man x509v3_config`).
|
||||||
|
basicConstraints = CA:FALSE
|
||||||
|
nsCertType = client, email
|
||||||
|
nsComment = "ACME Generated"
|
||||||
|
subjectKeyIdentifier = hash
|
||||||
|
authorityKeyIdentifier = keyid,issuer
|
||||||
|
keyUsage = critical, nonRepudiation, digitalSignature, keyEncipherment
|
||||||
|
extendedKeyUsage = clientAuth, emailProtection
|
||||||
|
|
||||||
|
[ server_cert ]
|
||||||
|
# Extensions for server certificates (`man x509v3_config`).
|
||||||
|
basicConstraints = CA:FALSE
|
||||||
|
nsCertType = server
|
||||||
|
nsComment = "ACME Generated"
|
||||||
|
subjectKeyIdentifier = hash
|
||||||
|
authorityKeyIdentifier = keyid,issuer:always
|
||||||
|
keyUsage = critical, digitalSignature, keyEncipherment
|
||||||
|
extendedKeyUsage = serverAuth
|
||||||
|
#subjectAltName = "192.168.123.129"
|
||||||
|
|
||||||
|
[ crl_ext ]
|
||||||
|
# Extension for CRLs (`man x509v3_config`).
|
||||||
|
authorityKeyIdentifier=keyid:always
|
||||||
|
|
||||||
|
[ ocsp ]
|
||||||
|
# Extension for OCSP signing certificates (`man ocsp`).
|
||||||
|
basicConstraints = CA:FALSE
|
||||||
|
subjectKeyIdentifier = hash
|
||||||
|
authorityKeyIdentifier = keyid,issuer
|
||||||
|
keyUsage = critical, digitalSignature
|
||||||
|
extendedKeyUsage = critical, OCSPSigning
|
|
@ -0,0 +1,55 @@
|
||||||
|
#
|
||||||
|
#
|
||||||
|
# IMPORTANT INFO
|
||||||
|
#
|
||||||
|
#
|
||||||
|
[ v3_server ]
|
||||||
|
# Extensions for server certificates (`man x509v3_config`).
|
||||||
|
basicConstraints = CA:FALSE
|
||||||
|
nsCertType = server
|
||||||
|
nsComment = "ACME Corp"
|
||||||
|
subjectKeyIdentifier = hash
|
||||||
|
authorityKeyIdentifier = keyid,issuer:always
|
||||||
|
keyUsage = critical, digitalSignature, keyEncipherment
|
||||||
|
extendedKeyUsage = serverAuth
|
||||||
|
subjectAltName = @alt_names
|
||||||
|
#subjectAltName = IP:192.168.123.129
|
||||||
|
|
||||||
|
[ alt_names ]
|
||||||
|
DNS.1 = "skunkworks.acme.xyz"
|
||||||
|
|
||||||
|
#
|
||||||
|
#
|
||||||
|
# FORCED TO INCLUDE THIS JUNK
|
||||||
|
#
|
||||||
|
#
|
||||||
|
[ req ]
|
||||||
|
# Options for the `req` tool (`man req`).
|
||||||
|
default_bits = 4096
|
||||||
|
distinguished_name = req_distinguished_name
|
||||||
|
string_mask = utf8only
|
||||||
|
|
||||||
|
# SHA-1 is deprecated, so use SHA-2 instead.
|
||||||
|
default_md = sha256
|
||||||
|
|
||||||
|
# Extension to add when the -x509 option is used.
|
||||||
|
#x509_extensions = v3_ca
|
||||||
|
|
||||||
|
[ req_distinguished_name ]
|
||||||
|
# See <https://en.wikipedia.org/wiki/Certificate_signing_request>.
|
||||||
|
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
|
||||||
|
|
||||||
|
# Optionally, specify some defaults.
|
||||||
|
countryName_default = US
|
||||||
|
stateOrProvinceName_default = State51
|
||||||
|
localityName_default =
|
||||||
|
0.organizationName_default = ACME R&D
|
||||||
|
organizationalUnitName_default =
|
||||||
|
emailAddress_default =
|
||||||
|
|
|
@ -0,0 +1,80 @@
|
||||||
|
#!/bin/bash
|
||||||
|
#
|
||||||
|
# Create CA Intermediate
|
||||||
|
#
|
||||||
|
#
|
||||||
|
# This function will generate a CA Intermediate
|
||||||
|
# IN: UNIQ_ID_CA, SERIAL
|
||||||
|
#
|
||||||
|
PARAM1=$1
|
||||||
|
PARAM2=$2
|
||||||
|
|
||||||
|
usage() {
|
||||||
|
echo
|
||||||
|
echo "Generate a new CA Intermediate certificate"
|
||||||
|
echo
|
||||||
|
echo "This program will generate a new certificate authority (CA) intermediate"
|
||||||
|
echo "It requires a CA certificate used to sign CA Intermediate"
|
||||||
|
echo "Requires the file \"ca.pem\" that is used to sign the certificates"
|
||||||
|
echo ""
|
||||||
|
echo ""
|
||||||
|
echo ""
|
||||||
|
echo
|
||||||
|
echo " usage: gen_ca-i.sh <Org URL> <Serial>"
|
||||||
|
echo
|
||||||
|
echo " example: gen_ca-i.sh skunkworks.acme.xyz \\"
|
||||||
|
echo " 10052 \\"
|
||||||
|
echo
|
||||||
|
exit 1
|
||||||
|
}
|
||||||
|
|
||||||
|
error_no_ca_file() {
|
||||||
|
echo
|
||||||
|
echo "ERROR: missing ca.pem"
|
||||||
|
echo
|
||||||
|
usage
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
generate_ca_i() {
|
||||||
|
echo_block "Create CA Intermediate (${UNIQ_ID_CA})"
|
||||||
|
# params
|
||||||
|
UNIQ_ID_CA=$1
|
||||||
|
SERIAL=$2
|
||||||
|
|
||||||
|
openssl genrsa -out "ca_i_${UNIQ_ID_CA}.keys.pem" 4096
|
||||||
|
|
||||||
|
# Create Cert Signing Request (CSR)
|
||||||
|
openssl req -config $CA_CNF -new -sha256 \
|
||||||
|
-subj "/C=OO/O=ACME/OU=ACME Intermediate/CN=${UNIQ_ID_CA}" \
|
||||||
|
-key "ca_i_${UNIQ_ID_CA}.keys.pem" -out "ca_i_${UNIQ_ID_CA}.csr.pem"
|
||||||
|
|
||||||
|
# Create Certificate (valid for ~2 years, after the entire chain of trust expires)
|
||||||
|
# CA signs Intermediate
|
||||||
|
openssl x509 -req -days 750 -extfile $CA_CNF -extensions v3_ca_i \
|
||||||
|
-CA $FQ_CA_CERT -CAkey $FQ_CA_KEYS -set_serial ${SERIAL} \
|
||||||
|
-in "ca_i_${UNIQ_ID_CA}.csr.pem" -out "ca_i_${UNIQ_ID_CA}.crt.pem"
|
||||||
|
|
||||||
|
# Package the Certificate Authority Certificates for distro (windoze needs this)
|
||||||
|
openssl pkcs12 -export -password "pass:password" -inkey "ca_i_${UNIQ_ID_CA}.keys.pem" \
|
||||||
|
-name "CA Intermediate Mobile Provision" -certfile $FQ_CA_CERT \
|
||||||
|
-in "ca_i_${UNIQ_ID_CA}.crt.pem" -out "ca_i_${UNIQ_ID_CA}.p12"
|
||||||
|
|
||||||
|
# verify certificate (output to text file for review)
|
||||||
|
openssl x509 -noout -text -in "ca_i_${UNIQ_ID_CA}.crt.pem" > "ca_i_${UNIQ_ID_CA}_crt_info.txt"
|
||||||
|
|
||||||
|
# create certifiate chain
|
||||||
|
cat $FQ_CA_CERT "ca_i_${UNIQ_ID_CA}.crt.pem" > "ca_cert-chain_${UNIQ_ID_CA}.crts.pem"
|
||||||
|
}
|
||||||
|
|
||||||
|
main() {
|
||||||
|
if [[ ! -f ca-i.pem ]]
|
||||||
|
error_no_ca_file
|
||||||
|
if [[ -n $PARAM1 ]] || [[ -n $PARAM2 ]]; then
|
||||||
|
generate_ca_i $PARAM1 $PARAM2
|
||||||
|
else
|
||||||
|
usage
|
||||||
|
fi
|
||||||
|
}
|
||||||
|
|
||||||
|
main
|
|
@ -0,0 +1,56 @@
|
||||||
|
#
|
||||||
|
#
|
||||||
|
# IMPORTANT INFO
|
||||||
|
#
|
||||||
|
#
|
||||||
|
[ v3_server ]
|
||||||
|
# Extensions for server certificates (`man x509v3_config`).
|
||||||
|
basicConstraints = CA:FALSE
|
||||||
|
nsCertType = server
|
||||||
|
nsComment = "ACME Generated"
|
||||||
|
subjectKeyIdentifier = hash
|
||||||
|
authorityKeyIdentifier = keyid,issuer:always
|
||||||
|
keyUsage = critical, digitalSignature, keyEncipherment
|
||||||
|
extendedKeyUsage = serverAuth
|
||||||
|
subjectAltName = IP:192.168.1.3
|
||||||
|
#subjectAltName = @san_info
|
||||||
|
|
||||||
|
[ san_info ]
|
||||||
|
IP = 192.168.1.3
|
||||||
|
|
||||||
|
|
||||||
|
#
|
||||||
|
#
|
||||||
|
# FORCED TO INCLUDE THIS JUNK
|
||||||
|
#
|
||||||
|
#
|
||||||
|
[ req ]
|
||||||
|
# Options for the `req` tool (`man req`).
|
||||||
|
default_bits = 4096
|
||||||
|
distinguished_name = req_distinguished_name
|
||||||
|
string_mask = utf8only
|
||||||
|
|
||||||
|
# SHA-1 is deprecated, so use SHA-2 instead.
|
||||||
|
default_md = sha256
|
||||||
|
|
||||||
|
# Extension to add when the -x509 option is used.
|
||||||
|
#x509_extensions = v3_ca
|
||||||
|
|
||||||
|
[ req_distinguished_name ]
|
||||||
|
# See <https://en.wikipedia.org/wiki/Certificate_signing_request>.
|
||||||
|
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
|
||||||
|
|
||||||
|
# Optionally, specify some defaults.
|
||||||
|
countryName_default = US
|
||||||
|
stateOrProvinceName_default = State51
|
||||||
|
localityName_default =
|
||||||
|
0.organizationName_default = ACME R&D
|
||||||
|
organizationalUnitName_default =
|
||||||
|
emailAddress_default =
|
||||||
|
|
|
@ -0,0 +1,113 @@
|
||||||
|
# Root CA configuration file.
|
||||||
|
|
||||||
|
[ ca ]
|
||||||
|
# `man ca`
|
||||||
|
default_ca = CA_default
|
||||||
|
|
||||||
|
[ CA_default ]
|
||||||
|
# SHA-1 is deprecated, so use SHA-2 instead.
|
||||||
|
default_md = sha256
|
||||||
|
|
||||||
|
name_opt = ca_default
|
||||||
|
cert_opt = ca_default
|
||||||
|
default_days = 375
|
||||||
|
preserve = no
|
||||||
|
policy = policy_strict
|
||||||
|
|
||||||
|
[ policy_strict ]
|
||||||
|
# The root CA should only sign intermediate certificates that match.
|
||||||
|
# See the POLICY FORMAT section of `man ca`.
|
||||||
|
countryName = match
|
||||||
|
stateOrProvinceName = match
|
||||||
|
organizationName = match
|
||||||
|
organizationalUnitName = optional
|
||||||
|
commonName = supplied
|
||||||
|
emailAddress = optional
|
||||||
|
|
||||||
|
[ policy_loose ]
|
||||||
|
# Allow the intermediate CA to sign a more diverse range of certificates.
|
||||||
|
# See the POLICY FORMAT section of the `ca` man page.
|
||||||
|
countryName = optional
|
||||||
|
stateOrProvinceName = optional
|
||||||
|
localityName = optional
|
||||||
|
organizationName = optional
|
||||||
|
organizationalUnitName = optional
|
||||||
|
commonName = supplied
|
||||||
|
emailAddress = optional
|
||||||
|
|
||||||
|
[ req ]
|
||||||
|
# Options for the `req` tool (`man req`).
|
||||||
|
default_bits = 4096
|
||||||
|
distinguished_name = req_distinguished_name
|
||||||
|
string_mask = utf8only
|
||||||
|
|
||||||
|
# SHA-1 is deprecated, so use SHA-2 instead.
|
||||||
|
default_md = sha256
|
||||||
|
|
||||||
|
# Extension to add when the -x509 option is used.
|
||||||
|
x509_extensions = v3_ca
|
||||||
|
|
||||||
|
[ req_distinguished_name ]
|
||||||
|
# See <https://en.wikipedia.org/wiki/Certificate_signing_request>.
|
||||||
|
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
|
||||||
|
|
||||||
|
# Optionally, specify some defaults.
|
||||||
|
countryName_default = US
|
||||||
|
stateOrProvinceName_default = State51
|
||||||
|
localityName_default =
|
||||||
|
0.organizationName_default = ACME R&D
|
||||||
|
organizationalUnitName_default =
|
||||||
|
emailAddress_default =
|
||||||
|
|
||||||
|
[ v3_ca ]
|
||||||
|
# Extensions for a typical CA (`man x509v3_config`).
|
||||||
|
basicConstraints = critical, CA:true
|
||||||
|
keyUsage = critical, cRLSign, digitalSignature, keyCertSign
|
||||||
|
subjectKeyIdentifier = hash
|
||||||
|
authorityKeyIdentifier = keyid:always,issuer
|
||||||
|
|
||||||
|
[ v3_ca_i ]
|
||||||
|
# Extensions for a typical intermediate CA (`man x509v3_config`).
|
||||||
|
basicConstraints = critical, CA:true, pathlen:0
|
||||||
|
keyUsage = critical, cRLSign, digitalSignature, keyCertSign
|
||||||
|
subjectKeyIdentifier = hash
|
||||||
|
authorityKeyIdentifier = keyid:always,issuer
|
||||||
|
|
||||||
|
[ usr_cert ]
|
||||||
|
# Extensions for client certificates (`man x509v3_config`).
|
||||||
|
basicConstraints = CA:FALSE
|
||||||
|
nsCertType = client, email
|
||||||
|
nsComment = "ACME Generated"
|
||||||
|
subjectKeyIdentifier = hash
|
||||||
|
authorityKeyIdentifier = keyid,issuer
|
||||||
|
keyUsage = critical, nonRepudiation, digitalSignature, keyEncipherment
|
||||||
|
extendedKeyUsage = clientAuth, emailProtection
|
||||||
|
|
||||||
|
[ server_cert ]
|
||||||
|
# Extensions for server certificates (`man x509v3_config`).
|
||||||
|
basicConstraints = CA:FALSE
|
||||||
|
nsCertType = server
|
||||||
|
nsComment = "ACME Generated"
|
||||||
|
subjectKeyIdentifier = hash
|
||||||
|
authorityKeyIdentifier = keyid,issuer:always
|
||||||
|
keyUsage = critical, digitalSignature, keyEncipherment
|
||||||
|
extendedKeyUsage = serverAuth
|
||||||
|
#subjectAltName = "192.168.123.129"
|
||||||
|
|
||||||
|
[ crl_ext ]
|
||||||
|
# Extension for CRLs (`man x509v3_config`).
|
||||||
|
authorityKeyIdentifier=keyid:always
|
||||||
|
|
||||||
|
[ ocsp ]
|
||||||
|
# Extension for OCSP signing certificates (`man ocsp`).
|
||||||
|
basicConstraints = CA:FALSE
|
||||||
|
subjectKeyIdentifier = hash
|
||||||
|
authorityKeyIdentifier = keyid,issuer
|
||||||
|
keyUsage = critical, digitalSignature
|
||||||
|
extendedKeyUsage = critical, OCSPSigning
|
|
@ -0,0 +1,55 @@
|
||||||
|
#
|
||||||
|
#
|
||||||
|
# IMPORTANT INFO
|
||||||
|
#
|
||||||
|
#
|
||||||
|
[ v3_server ]
|
||||||
|
# Extensions for server certificates (`man x509v3_config`).
|
||||||
|
basicConstraints = CA:FALSE
|
||||||
|
nsCertType = server
|
||||||
|
nsComment = "ACME Corp"
|
||||||
|
subjectKeyIdentifier = hash
|
||||||
|
authorityKeyIdentifier = keyid,issuer:always
|
||||||
|
keyUsage = critical, digitalSignature, keyEncipherment
|
||||||
|
extendedKeyUsage = serverAuth
|
||||||
|
subjectAltName = @alt_names
|
||||||
|
#subjectAltName = IP:192.168.123.129
|
||||||
|
|
||||||
|
[ alt_names ]
|
||||||
|
DNS.1 = "skunkworks.acme.xyz"
|
||||||
|
|
||||||
|
#
|
||||||
|
#
|
||||||
|
# FORCED TO INCLUDE THIS JUNK
|
||||||
|
#
|
||||||
|
#
|
||||||
|
[ req ]
|
||||||
|
# Options for the `req` tool (`man req`).
|
||||||
|
default_bits = 4096
|
||||||
|
distinguished_name = req_distinguished_name
|
||||||
|
string_mask = utf8only
|
||||||
|
|
||||||
|
# SHA-1 is deprecated, so use SHA-2 instead.
|
||||||
|
default_md = sha256
|
||||||
|
|
||||||
|
# Extension to add when the -x509 option is used.
|
||||||
|
#x509_extensions = v3_ca
|
||||||
|
|
||||||
|
[ req_distinguished_name ]
|
||||||
|
# See <https://en.wikipedia.org/wiki/Certificate_signing_request>.
|
||||||
|
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
|
||||||
|
|
||||||
|
# Optionally, specify some defaults.
|
||||||
|
countryName_default = US
|
||||||
|
stateOrProvinceName_default = State51
|
||||||
|
localityName_default =
|
||||||
|
0.organizationName_default = ACME R&D
|
||||||
|
organizationalUnitName_default =
|
||||||
|
emailAddress_default =
|
||||||
|
|
|
@ -0,0 +1,116 @@
|
||||||
|
#!/bin/bash
|
||||||
|
#
|
||||||
|
# ACME Certificate Authority Generation v1.0
|
||||||
|
#
|
||||||
|
#
|
||||||
|
PARAM1=$1
|
||||||
|
|
||||||
|
usage() {
|
||||||
|
echo
|
||||||
|
echo "This script will generate all the files necessary to build a certificate chain of trust"
|
||||||
|
echo "using a CA, CA Intermediate, Server, and Client certificates. After the bootstrap the other"
|
||||||
|
echo "helper scripts will generate new certificates"
|
||||||
|
echo
|
||||||
|
echo "Usage: cert_bootstrap <.cnf file (minus the .cnf)>"
|
||||||
|
echo
|
||||||
|
echo "Example: cert_bootstrap org.acme.xyz"
|
||||||
|
exit 1
|
||||||
|
}
|
||||||
|
|
||||||
|
echo_block() {
|
||||||
|
echo
|
||||||
|
echo
|
||||||
|
echo "***** ***** ***** *****"
|
||||||
|
echo $1
|
||||||
|
echo "***** ***** ***** *****"
|
||||||
|
}
|
||||||
|
|
||||||
|
#
|
||||||
|
# CA generation requires .cnf files
|
||||||
|
# create CA directory
|
||||||
|
# create bash variables to CA
|
||||||
|
# restore script back to original path
|
||||||
|
#
|
||||||
|
app_init() {
|
||||||
|
if [[ -n $PARAM1 ]]; then
|
||||||
|
# need to know the location of the configuration file (expected to be in same dir path as this script)
|
||||||
|
CA_CNF="$CD/ca.cnf"
|
||||||
|
|
||||||
|
# handle the case of having the ".cnf" extension or not
|
||||||
|
if [[ ${PARAM1: -4} == .cnf ]]; then
|
||||||
|
ORG_URL=${PARAM1%.*}
|
||||||
|
S_CNF=${PARAM1}
|
||||||
|
echo "ASDF: ${ORG_URL}, ${S_CNF}"
|
||||||
|
else
|
||||||
|
ORG_URL=$PARAM1
|
||||||
|
S_CNF="${PARAM1}.cnf"
|
||||||
|
echo "ZXCV: ${ORG_URL}, ${S_CNF}"
|
||||||
|
fi
|
||||||
|
|
||||||
|
FQ_S_CNF="${CD}/${S_CNF}"
|
||||||
|
if [[ ! -f $FQ_S_CNF ]] || [[ ! -f $CA_CNF ]]; then
|
||||||
|
usage
|
||||||
|
fi
|
||||||
|
else
|
||||||
|
usage
|
||||||
|
fi
|
||||||
|
|
||||||
|
# Organize
|
||||||
|
#
|
||||||
|
# create a unique path for the server certificate
|
||||||
|
UNIQ_DIR=`date +%Y-%m-%d.%H_%M_%S`
|
||||||
|
UNIQ_DIR="cert-chain_${UNIQ_DIR}"
|
||||||
|
mkdir -p "${UNIQ_DIR}"
|
||||||
|
cd "${UNIQ_DIR}"
|
||||||
|
# FQ_DIR="${CD}/${UNIQ_DIR}"
|
||||||
|
}
|
||||||
|
|
||||||
|
#
|
||||||
|
# IN: UNIQ_ID_CA, SERIAL
|
||||||
|
#
|
||||||
|
one-time-ca() {
|
||||||
|
# params
|
||||||
|
SERIAL="101"
|
||||||
|
UNIQ_ID_CA="${SERIAL}.${ORG_URL}"
|
||||||
|
CA_DIR="ca_${UNIQ_ID_CA}"
|
||||||
|
mkdir $CA_DIR
|
||||||
|
cd $CA_DIR
|
||||||
|
generate_ca $UNIQ_ID_CA $SERIAL
|
||||||
|
FQ_CA_DIR=`pwd`
|
||||||
|
FQ_CA_CERT="${FQ_CA_DIR}/ca_${UNIQ_ID_CA}.crt.pem"
|
||||||
|
FQ_CA_KEYS="${FQ_CA_DIR}/ca_${UNIQ_ID_CA}.keys.pem"
|
||||||
|
cd ..
|
||||||
|
}
|
||||||
|
|
||||||
|
# ***** ***** ***** *****
|
||||||
|
#
|
||||||
|
# CERTIFICATE AUTHORITY
|
||||||
|
#
|
||||||
|
# ***** ***** ***** *****
|
||||||
|
# This function will generate a CA Intermediate
|
||||||
|
# IN: UNIQ_ID_CA, SERIAL
|
||||||
|
#
|
||||||
|
generate_ca() {
|
||||||
|
# params
|
||||||
|
UNIQ_ID_CA=$1
|
||||||
|
SERIAL=$2
|
||||||
|
# encrypt the key
|
||||||
|
#openssl genrsa -aes256 -out ca.keys.pem 4096
|
||||||
|
#openssl genrsa -aes256 -password "pass:password" -out ca.keys.pem 4096
|
||||||
|
|
||||||
|
# key un-protected
|
||||||
|
openssl genrsa -out "ca_${UNIQ_ID_CA}.keys.pem" 4096
|
||||||
|
#
|
||||||
|
# Create Certificate (valid for 10 years, after the entire chain of trust expires)
|
||||||
|
openssl req -config $CA_CNF -new -x509 -sha256 -days 3650 -extensions v3_ca \
|
||||||
|
-subj "/C=OO/O=ACME/CN=root.${UNIQ_ID_CA}" -set_serial ${SERIAL} \
|
||||||
|
-key ca_${UNIQ_ID_CA}.keys.pem -out ca_${UNIQ_ID_CA}.crt.pem
|
||||||
|
|
||||||
|
# verify certificate (output to text file for review)
|
||||||
|
openssl x509 -noout -text -in ca_${UNIQ_ID_CA}.crt.pem > ca_${UNIQ_ID_CA}_cert.info.txt
|
||||||
|
}
|
||||||
|
|
||||||
|
main() {
|
||||||
|
|
||||||
|
}
|
||||||
|
|
|
@ -0,0 +1,62 @@
|
||||||
|
#!/bin/bash
|
||||||
|
#
|
||||||
|
# Create CA Intermediate
|
||||||
|
#
|
||||||
|
#
|
||||||
|
# This function will generate a CA Intermediate
|
||||||
|
# IN: UNIQ_ID_CA, SERIAL
|
||||||
|
#
|
||||||
|
PARAM1=$1
|
||||||
|
PARAM2=$2
|
||||||
|
|
||||||
|
usage() {
|
||||||
|
echo
|
||||||
|
echo "Generate a new certificate"
|
||||||
|
echo
|
||||||
|
echo "This program will generate a new certificate authority intermediate"
|
||||||
|
echo "Requires the file ca-i.pem that is used to sign the certificates"
|
||||||
|
echo "The script requires a CA Intermediate certificate used to sign the client"
|
||||||
|
echo ""
|
||||||
|
echo ""
|
||||||
|
echo ""
|
||||||
|
echo
|
||||||
|
echo "Generate a new certificate"
|
||||||
|
echo " usage: gen_server.sh <CA Intermediate> <Org URL> <Serial>"
|
||||||
|
echo
|
||||||
|
echo " example: gen_server.sh ca_i_skunkworks.acme.xyz_10001.crt.pem \\"
|
||||||
|
echo " skunkworks.acme.xyz \\"
|
||||||
|
echo " 10052 \\"
|
||||||
|
echo
|
||||||
|
exit 1
|
||||||
|
}
|
||||||
|
|
||||||
|
#
|
||||||
|
# Generate a Server Certificate
|
||||||
|
# IN: ${SERIAL}, ${UNIQ_ID}
|
||||||
|
#
|
||||||
|
generate_server() {
|
||||||
|
openssl genrsa -out "server_${UNIQ_ID}.keys.pem" 4096
|
||||||
|
|
||||||
|
openssl req -new -config $FQ_S_CNF -key "server_${UNIQ_ID}.keys.pem" \
|
||||||
|
-subj "/C=OO/O=ACME/OU=ACME Standard/CN=${UNIQ_ID}" \
|
||||||
|
-out "server_${UNIQ_ID}.csr.pem"
|
||||||
|
|
||||||
|
# Intermediate signs Server
|
||||||
|
openssl x509 -req -days 365 -extfile $FQ_S_CNF -extensions v3_server \
|
||||||
|
-CA "ca_i_${UNIQ_ID_CA}.crt.pem" -CAkey "ca_i_${UNIQ_ID_CA}.keys.pem" -set_serial ${SERIAL} \
|
||||||
|
-in "server_${UNIQ_ID}.csr.pem" -out "server_${UNIQ_ID}.crt.pem"
|
||||||
|
|
||||||
|
# verify certificate (output to text file for review)
|
||||||
|
openssl x509 -noout -text -in "server_${UNIQ_ID}.crt.pem" > "server_${UNIQ_ID}.crt.info.txt"
|
||||||
|
}
|
||||||
|
|
||||||
|
# if all argument strings are empty, then continue execution
|
||||||
|
if [[ -n $1 ]] && [[ -n $2 ]] && [[ -n $3 ]]; then
|
||||||
|
UNIQ_ID_CA=$1
|
||||||
|
ORG_URL=$2
|
||||||
|
SERIAL=$3
|
||||||
|
UNIQ_ID="${ORG_URL}_${SERIAL}"
|
||||||
|
generate_server
|
||||||
|
else
|
||||||
|
usage
|
||||||
|
fi
|
|
@ -0,0 +1,58 @@
|
||||||
|
#!/bin/bash
|
||||||
|
#
|
||||||
|
# Create CA Intermediate
|
||||||
|
#
|
||||||
|
#
|
||||||
|
# This function will generate a CA Intermediate
|
||||||
|
# IN: UNIQ_ID_CA, SERIAL
|
||||||
|
#
|
||||||
|
PARAM1=$1
|
||||||
|
PARAM2=$2
|
||||||
|
|
||||||
|
usage() {
|
||||||
|
echo
|
||||||
|
echo "Generate a new certificate"
|
||||||
|
echo
|
||||||
|
echo "This program will generate a new certificate authority intermediate"
|
||||||
|
echo "Requires the file ca-i.pem that is used to sign the certificates"
|
||||||
|
echo "The script requires a CA Intermediate certificate used to sign the client"
|
||||||
|
echo ""
|
||||||
|
echo ""
|
||||||
|
echo ""
|
||||||
|
echo
|
||||||
|
echo "Generate a new certificate"
|
||||||
|
echo " usage: gen_server.sh <CA Intermediate> <Org URL> <Serial>"
|
||||||
|
echo
|
||||||
|
echo " example: gen_server.sh ca_i_skunkworks.acme.xyz_10001.crt.pem \\"
|
||||||
|
echo " skunkworks.acme.xyz \\"
|
||||||
|
echo " 10052 \\"
|
||||||
|
echo
|
||||||
|
exit 1
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
generate_client() {
|
||||||
|
echo_block "Generate Client Certificates (${UNIQ_ID})"
|
||||||
|
# params
|
||||||
|
UNIQ_ID=$1
|
||||||
|
UNIQ_ID_CA=$2
|
||||||
|
SERIAL=$3
|
||||||
|
|
||||||
|
openssl genrsa -out "client_${UNIQ_ID}.keys.pem" 4096
|
||||||
|
|
||||||
|
openssl req -new -key "client_${UNIQ_ID}.keys.pem" \
|
||||||
|
-subj "/C=OO/O=ACME/OU=ACME Standard/CN=client_${UNIQ_ID}" \
|
||||||
|
-out "client_${UNIQ_ID}.csr.pem"
|
||||||
|
# Intermediate signs Client
|
||||||
|
openssl x509 -req -days 365 \
|
||||||
|
-CA "ca_i_${UNIQ_ID_CA}.crt.pem" -CAkey "ca_i_${UNIQ_ID_CA}.keys.pem" -set_serial ${SERIAL} \
|
||||||
|
-in "client_${UNIQ_ID}.csr.pem" -out "client_${UNIQ_ID}.crt.pem"
|
||||||
|
|
||||||
|
# Package the Certificates
|
||||||
|
openssl pkcs12 -export -password "pass:password" -inkey "client_${UNIQ_ID}.keys.pem" \
|
||||||
|
-name "Client ${UNIQ_ID} VPN Certificate" -certfile "ca_cert-chain_${UNIQ_ID_CA}.crts.pem" -caname "client_${UNIQ_ID}@acme.xyz" \
|
||||||
|
-in "client_${UNIQ_ID}.crt.pem" -out "client_${UNIQ_ID}.p12"
|
||||||
|
|
||||||
|
# verify certificate (output to text file for review)
|
||||||
|
openssl x509 -noout -text -in "client_${UNIQ_ID}.crt.pem" > "client_${UNIQ_ID}.info.txt"
|
||||||
|
}
|
Loading…
Reference in New Issue