123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109 |
- #!/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
- import argparse
- parser = argparse.ArgumentParser()
- parser.add_argument('outdir',
- type=str,
- nargs='?',
- default=os.getcwd(),
- metavar='<OutputDirectory>')
- parser.add_argument('-u', '--uri',
- metavar="<ApplicationUri>",
- type=str,
- default="",
- dest="uri")
- parser.add_argument('-k', '--keysize',
- metavar="<KeySize>",
- type=int,
- dest="keysize")
- args = parser.parse_args()
- if not os.path.exists(args.outdir):
- sys.exit('ERROR: Directory %s was not found!' % args.outdir)
- keysize = 2048
- if args.keysize:
- keysize = args.keysize
- if args.uri == "":
- args.uri = "urn:open62541.server.application"
- print("No ApplicationUri given for the certificate. Setting to %s" % args.uri)
- os.environ['URI1'] = args.uri
- certsdir = os.path.dirname(os.path.abspath(__file__))
- # 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(args.outdir))
- 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 " + args.outdir)
|