blob: 4108c79ae1bb64861d2d3dbed052dccf21aab75f [file] [log] [blame]
#
# Copyright 2019 NXP
# SPDX-License-Identifier: Apache-2.0
#
#
# Create Keys for OPC UA demo
#
# Preconditions
# - Openssl installed
#
import os
import sys
import logging
import re
import subprocess
def run(cmd_str, ignore_result=0, exp_retcode=0):
print("Running command: %s" %cmd_str)
pipes = subprocess.Popen(
cmd_str,
stdout=subprocess.PIPE,
stderr=subprocess.PIPE,
shell=True,
)
std_out, std_err = pipes.communicate()
std_out = std_out.strip()
std_err = std_err.strip()
if not ignore_result:
if pipes.returncode != exp_retcode:
print("Command execution failed.")
else:
print("Command execution was successful.")
assert pipes.returncode == exp_retcode
cur_dir = os.path.abspath(os.path.dirname(__file__))
if len(sys.argv) == 2:
hostname = sys.argv[1]
EXT_CNF = os.path.join(cur_dir, '..', 'credentials', 'extensions_new.cnf')
f= open('%s' %EXT_CNF,"w+")
f.write("basicConstraints=CA:TRUE \n")
ip_address_match = re.match("^(\d{0,3})\.(\d{0,3})\.(\d{0,3})\.(\d{0,3})$", hostname)
if ip_address_match:
f.write("subjectAltName=URI:\"urn:open62541:%s\",IP:\"%s\"" % (hostname, hostname))
else:
f.write("subjectAltName=URI:\"urn:open62541:%s\",DNS:\"%s\"" % (hostname, hostname))
f.close()
else:
EXT_CNF = os.path.join(cur_dir, '..', 'credentials', 'extensions.cnf')
CA_KEY_LEN = 2048
RSA_KEY_LEN = 2048
ROOTCA_CERT_SUB = "/OU=NXP Plug Trust CA/CN=NXP RootCAvRxxx"
CERT_VALIDITY = 4380 # 12 years
ROOT_CA_KEY = os.path.join(cur_dir, '..', 'credentials', 'open62541_rootCA_key_pair.pem')
ROOT_CA_CERT_CER = os.path.join(cur_dir, '..', 'credentials', 'open62541_rootCA_cert.cer')
ROOT_CA_CERT_DER = os.path.join(cur_dir, '..', 'credentials', 'open62541_rootCA_cert.der')
ROOT_CA_CERT_SRL = os.path.join(cur_dir, '..', 'credentials', 'open62541_rootCA_cert.srl')
SERVER_KEY = os.path.join(cur_dir, '..', 'credentials', 'open62541_server_key_pair.pem')
SERVER_CERT_CER = os.path.join(cur_dir, '..', 'credentials', 'open62541_server_cert.cer')
SERVER_CERT_DER = os.path.join(cur_dir, '..', 'credentials', 'open62541_server_cert.der')
SERVER_CERT_CSR = os.path.join(cur_dir, '..', 'credentials', 'open62541_server.csr')
SERVER_CERT_SUB = "/CN=NXP_SE050_OPEN62541_SERVER"
CLIENT_KEY = os.path.join(cur_dir, '..', 'credentials', 'open62541_client_key_pair.pem')
CLIENT_CERT_CER = os.path.join(cur_dir, '..', 'credentials', 'open62541_client_cert.cer')
CLIENT_CERT_DER = os.path.join(cur_dir, '..', 'credentials', 'open62541_client_cert.der')
CLIENT_CERT_CSR = os.path.join(cur_dir, '..', 'credentials', 'open62541_client.csr')
CLIENT_CERT_SUB = "/CN=NXP_SE050_OPEN62541_CLIENT"
CLIENT_CONF = os.path.join(cur_dir, '..', 'credentials', 'client.conf')
if sys.platform.startswith("win"):
openssl = os.path.join(cur_dir, '..', '..', '..', 'ext', 'openssl', 'bin', 'openssl.exe')
openssl_config_file = os.path.join(cur_dir, '..', '..', '..', 'ext', 'openssl', 'ssl', 'openssl.cnf')
os.environ['OPENSSL_CONF'] = openssl_config_file
else:
openssl = 'openssl'
# Create root CA key pair
cmd_str = "\"%s\" genrsa -out \"%s\" \"%s\"" % (openssl, ROOT_CA_KEY, CA_KEY_LEN)
run(cmd_str)
#Create rootCA certificate
cmd_str = "\"%s\" req -x509 -new -nodes -key \"%s\" -subj \"%s\" -days \"%s\" -out \"%s\"" % (openssl, ROOT_CA_KEY, ROOTCA_CERT_SUB, CERT_VALIDITY, ROOT_CA_CERT_CER)
run(cmd_str)
# Create server key pair
cmd_str = "\"%s\" genrsa -out \"%s\" \"%s\"" % (openssl, SERVER_KEY, RSA_KEY_LEN)
run(cmd_str)
# Create certificate signing request for server
cmd_str = "\"%s\" req -new -key \"%s\" -subj \"%s\" -out \"%s\" " % (openssl, SERVER_KEY, SERVER_CERT_SUB, SERVER_CERT_CSR)
run(cmd_str)
# Sign and create server certificate
cmd_str = "\"%s\" x509 -req -extfile \"%s\" -sha256 -days \"%s\" -in \"%s\" -CAcreateserial -CA \"%s\" -CAkey \"%s\" -out \"%s\" " % (openssl, EXT_CNF, CERT_VALIDITY, SERVER_CERT_CSR, ROOT_CA_CERT_CER, ROOT_CA_KEY, SERVER_CERT_CER)
run(cmd_str)
# Convert root ca certificate to DER format
cmd_str = "\"%s\" x509 -in \"%s\" -outform DER -out \"%s\" " % (openssl, ROOT_CA_CERT_CER, ROOT_CA_CERT_DER)
run(cmd_str)
# Convert server certificate to DER format
cmd_str = "\"%s\" x509 -in \"%s\" -outform DER -out \"%s\" " % (openssl, SERVER_CERT_CER, SERVER_CERT_DER)
run(cmd_str)
# create client certificate (CA signed)
# Create client key pair
#cmd_str = "\"%s\" genrsa -out \"%s\" \"%s\"" % (openssl, CLIENT_KEY, RSA_KEY_LEN)
#run(cmd_str)
# Create certificate signing request for client
#cmd_str = "\"%s\" req -new -key \"%s\" -subj \"%s\" -out \"%s\" " % (openssl, CLIENT_KEY, CLIENT_CERT_SUB, CLIENT_CERT_CSR)
#run(cmd_str)
# Sign and create client certificate
#cmd_str = "\"%s\" x509 -req -extfile \"%s\" -sha256 -days \"%s\" -in \"%s\" -CAcreateserial -CA \"%s\" -CAkey \"%s\" -out \"%s\" " % (openssl, CLIENT_EXT_CNF, CERT_VALIDITY, CLIENT_CERT_CSR, ROOT_CA_CERT_CER, ROOT_CA_KEY, CLIENT_CERT_CER)
#run(cmd_str)
# Convert client certificate to DER format
#cmd_str = "\"%s\" x509 -in \"%s\" -outform DER -out \"%s\" " % (openssl, CLIENT_CERT_CER, CLIENT_CERT_DER)
#run(cmd_str)
# create client certificate (self signed)
cmd_str = "\"%s\" genrsa -out \"%s\" \"%s\"" % (openssl, CLIENT_KEY, RSA_KEY_LEN)
run(cmd_str)
#Create rootCA certificate
cmd_str = "\"%s\" req -x509 -new -nodes -key \"%s\" -subj \"%s\" -days \"%s\" -out \"%s\" -config \"%s\" " % (openssl, CLIENT_KEY, CLIENT_CERT_SUB, CERT_VALIDITY, CLIENT_CERT_CER, CLIENT_CONF)
run(cmd_str)
# Convert client certificate to DER format
cmd_str = "\"%s\" x509 -in \"%s\" -outform DER -out \"%s\" " % (openssl, CLIENT_CERT_CER, CLIENT_CERT_DER)
run(cmd_str)
#os.remove('.rnd')
os.remove(SERVER_CERT_CSR)
os.remove(SERVER_CERT_CER)
#os.remove(CLIENT_CERT_CSR)
os.remove(CLIENT_CERT_CER)
os.remove(ROOT_CA_CERT_CER)
#os.remove(ROOT_CA_CERT_SRL)
if len(sys.argv) == 2:
os.remove(EXT_CNF)
print("##############################################################")
print("# #")
print("# Program Completed Successfully #")
print("# #")
print("##############################################################")