blob: 3832a8b42846e7b1cfa8fb5ec7d0b23e2e546236 [file] [log] [blame]
#!/usr/bin/env python
# This Source Code Form is subject to the terms of the Mozilla Public
# License, v. 2.0. If a copy of the MPL was not distributed with this
# file, You can obtain one at http://mozilla.org/MPL/2.0/.
#
# Copyright 2019 (c) Kalycito Infotech Private Limited
#
import netifaces
import sys
import os
import socket
if len(sys.argv) < 2:
sys.exit('Usage: %s directory to output certificates' % sys.argv[0])
if not os.path.exists(sys.argv[1]):
sys.exit('ERROR: Directory %s was not found!' % sys.argv[1])
keysize = 2048
if len(sys.argv) == 3:
keysize = int(sys.argv[2])
certsdir = os.path.dirname(os.path.abspath(__file__))
print(certsdir)
# Function return TRUE (1) when an IP address is associated with the
# given interface
def is_interface_up(interface):
addr = netifaces.ifaddresses(interface)
return netifaces.AF_INET in addr
# Initialize looping variables
interfaceNum = 0
iteratorValue = 0
# Read the number of interfaces available
numberOfInterfaces = int(format(len(netifaces.interfaces())))
# Traverse through the available network interfaces and store the
# corresponding IP addresses of the network interface in a variable
for interfaceNum in range(0, numberOfInterfaces):
# Function call which returns whether the given
# interface is up or not
check = is_interface_up(netifaces.interfaces()[interfaceNum])
# Check if the interface is up and not the loopback one
# If yes set the IP Address for the environmental variables
if check != 0 and netifaces.interfaces()[interfaceNum] != 'lo':
if iteratorValue == 0:
os.environ['IPADDRESS1'] = netifaces.ifaddresses(netifaces.interfaces()[interfaceNum])[netifaces.AF_INET][0]['addr']
if iteratorValue == 1:
os.environ['IPADDRESS2'] = netifaces.ifaddresses(netifaces.interfaces()[interfaceNum])[netifaces.AF_INET][0]['addr']
iteratorValue = iteratorValue + 1
if iteratorValue == 2:
break
# If there is only one interface available then set the second
# IP address as loopback IP
if iteratorValue < 2:
os.environ['IPADDRESS2'] = "127.0.0.1"
os.environ['HOSTNAME'] = socket.gethostname()
openssl_conf = os.path.join(certsdir, "localhost.cnf")
os.chdir(os.path.abspath(sys.argv[1]))
os.system("""openssl req \
-config {} \
-new \
-nodes \
-x509 -sha256 \
-newkey rsa:{} \
-keyout localhost.key -days 365 \
-subj "/C=DE/O=open62541/CN=open62541Server@localhost"\
-out localhost.crt""".format(openssl_conf, keysize))
os.system("openssl x509 -in localhost.crt -outform der -out server_cert.der")
os.system("openssl rsa -inform PEM -in localhost.key -outform DER -out server_key.der")
os.remove("localhost.key")
os.remove("localhost.crt")
print("Certificates generated in " + sys.argv[1])