|
|
|
|
|
Ssl
Action : jss.ssl (Category : jss, Name : ssl, By : kikonf)
Complete Name : jss.ssl.by.kikonf Version : 5.0 License : Modified BSD License Purpose of the jss category : Easy to customize. This category use in background the Java Keytools ® command to create and configure SSL JKS keystores (keys, certificates and PKCS12 keys). You can use it to manage your JKS keystores, keys and csr requests. Purpose of this ssl plugin : Manages Java SSL keystore and certficates The following shows the main Source Code File for the Action : jss.ssl Toggle lines
## Copyright (c) 2008, Patrick Germain Placidoux
## All rights reserved.
##
## This file is part of Kiko Public Software.
##
## Kiko Public Software is released under the modified BSD License,
## which should accompany it or any part of it in the file "COPYING".
## If you do not have this file you can access the license
## through the WWW at http://www.kickconf.com/license/bsd/license.txt.
##
## Home: http://www.kickconf.com
## Contact: kickconf@gmx.com
from actions.jss.tools import *
class Ssl(jssAction):
def inject(self):
self_funct='inject'
# Get top nodes
ssl_node = self.getTop()
ssl_attrs = ssl_node.getAttrs()
self.verbose(name=ssl_attrs.name, dir=ssl_attrs.dir)
from os import path
indent=self.getIndent() + 3*' '
## Clearing Variables
doc=dop12=False
# Cert infos
cert_label=None
cert_format=None
cert_path=None
# p12 infos
p12_kname=None
p12_kpassword=None
p12_password=None
p12_expire=None
p12_alg=None
p12_dn=None
p12_label=None
cert_attrs = None
if ssl_node.hasNode('cert'):
cert_attrs = ssl_node.getNode('cert')[0].getAttrs()
p12_attrs = None
if ssl_node.hasNode('p12'):
p12_attrs = ssl_node.getNode('p12')[0].getAttrs()
## Feeding Variables
# keystore infos
dir=ssl_attrs.dir
name=ssl_attrs.name
password=ssl_attrs.password
expire=ssl_attrs.expire
# - Required Self Sign Certificate infos
sclabel=ssl_attrs.sclabel
scpath=path.realpath(path.normpath(dir + '/' + ssl_attrs.scfile))
scpassword=ssl_attrs.scpassword
scexpire=ssl_attrs.scexpire
scalg=ssl_attrs.scalg
scdn=ssl_attrs.scdn
scsize=ssl_attrs.scsize
# Cert infos
if cert_attrs != None:
doc=True
cert_label=cert_attrs.label
cert_format=cert_attrs.format
cert_path=path.realpath(path.normpath(dir + '/' + cert_attrs.file))
# P12 infos
if p12_attrs != None:
dop12=True
p12_kname=p12_attrs.name
p12_kpassword=p12_attrs.kpassword
p12_password=p12_attrs.password
p12_expire=p12_attrs.expire
p12_dn=p12_attrs.dn
p12_label=p12_attrs.label
p12_alg=p12_attrs.alg
## Checks ##
if not path.isdir(dir):raise xception.kikonfActionSystemException(self, self_funct, 'The keystore directory: ' + dir + ' should exist !')
## Call
self.mkSslKeys(dir, name,
expire=expire, password=password,
sclabel=sclabel, scpath=scpath, scpassword=scpassword, scexpire=scexpire, scalg=scalg, scdn=scdn,
scsize=scsize,
doc=doc, cert_label=cert_label, cert_format=cert_format, cert_path=cert_path,
dop12=dop12, p12_kname=p12_kname, p12_kpassword=p12_kpassword, p12_password=p12_password, p12_expire=p12_expire, p12_alg=p12_alg, p12_dn=p12_dn, p12_label=p12_label,
indent=indent
)
def mkSslKeys(self, dir, name,
expire=0, password=None,
sclabel=None, scpath=None, scpassword=None, scexpire=0, scalg=None, scdn=None,
scsize=0,
doc=False, cert_label=None, cert_format=None, cert_path=None,
dop12=False, p12_kname=None, p12_kpassword=None, p12_password=None, p12_expire=0, p12_alg=None, p12_dn=None, p12_label=None,
indent=''
):
self_funct='mkSslKeys'
from os import path
doPrint=False
if self.getVerbose()>=5:doPrint=True
kpath=path.realpath(path.normpath(dir + '/' + name + '.jks'))
keytool_cde = '\"' + path.realpath(path.normpath(self.getCAttr('software_jss_home') + '/bin/keytool' + self.getBinarySufix())) + '\"'
if not path.isfile(kpath):
verbose('keystore and Self Sign Certificate at:' + kpath + ' creating.', level=self.getVerbose(), ifLevel=4, indent=indent, logFile=self.getLogFile())
## Creating keystore and Self sig 509 cert
cde=keytool_cde + ' -genkey -dname ' + scdn + ' -alias ' + sclabel + ' -keystore ' + kpath + ' -storepass ' + password + ' -keypass ' + scpassword + ' -keyalg ' + scalg + ' -validity ' + str(scexpire)
#-- Infos:
# -keyalg dft sha1, md5/sha1/sha224/sha256/sha384/sha512
# exec:
ret, stdout, sdterr=subprocess(cde, doPrint=doPrint)
if verbose>=5:
print stdout
print sdterr
print
if ret!=0:raise xception.kikonfActionSystemException(self, self_funct, 'Failed Creating the keytsore !')
verbose('keystore and Self Sign Certificate at:' + kpath + ' created.\n', level=self.getVerbose(), ifLevel=3, indent=indent, logFile=self.getLogFile())
## Extracting Self Sign cert
verbose('Self Sign Certificate: ' + sclabel + ' extracting.', level=self.getVerbose(), ifLevel=4, indent=indent, logFile=self.getLogFile())
cde=keytool_cde + ' -export -alias ' + sclabel + ' -keystore ' + kpath + ' -storepass ' + password + ' -keypass ' + scpassword + ' -file ' + scpath + ' -rfc'
# exec:
ret, stdout, sdterr=subprocess(cde, doPrint=doPrint)
if verbose>=5:
print stdout
print sdterr
print
if ret!=0:raise xception.kikonfActionSystemException(self, self_funct, 'Failed Extracting the Self Sign Certificate !')
verbose('Self Sign Certificate: ' + sclabel + ' extracted.\n', level=self.getVerbose(), ifLevel=3, indent=indent, logFile=self.getLogFile())
else:
verbose('Pre-existing keytstore at:' + kpath + ' retreived.\n', level=self.getVerbose(), ifLevel=4, indent=indent, logFile=self.getLogFile())
## Receiving the personal Cert
if doc:
if not path.isfile(cert_path):raise xception.kikonfActionSystemException(self, self_funct, 'Unable to find the Certificate file at:' + cert_path + ' please check your action file !')
verbose('Certificate:' + cert_path + ' receiving.', level=self.getVerbose(), ifLevel=4, indent=indent, logFile=self.getLogFile())
cde=keytool_cde + ' -import -noprompt -trustcacerts -alias ' + cert_label + ' -file ' + cert_path + ' -keystore ' + kpath + ' -storepass ' + password
# exec:
ret, stdout, sdterr=subprocess(cde, doPrint=doPrint)
if verbose>=5:
print stdout
print sdterr
print
if ret!=0:raise xception.kikonfActionSystemException(self, self_funct, 'Failed receiving Certificate into keytsore !')
verbose('Certificate:' + cert_path + ' received.\n', level=self.getVerbose(), ifLevel=3, indent=indent, logFile=self.getLogFile())
## PKCS12 cert
if dop12:
p12_kpath=path.realpath(path.normpath(dir + '/' + p12_kname + '.p12'))
p12_cpath=path.realpath(path.normpath(dir + '/' + p12_label + '.cert'))
verbose('PKCS12 Keystore: ' + p12_kpath + ' creating.', level=self.getVerbose(), ifLevel=4, indent=indent, logFile=self.getLogFile())
cde=keytool_cde + ' -v -genkey -dname ' + p12_dn + ' -alias ' + p12_label + ' -keystore ' + p12_kpath + ' -storepass ' + p12_kpassword + ' -keypass ' + p12_password + ' -keyalg ' + p12_alg + ' -validity ' + str(p12_expire) + ' -storetype PKCS12'
# exec:
ret, stdout, sdterr=subprocess(cde, doPrint=doPrint)
if verbose>=5:
print stdout
print sdterr
print
if ret!=0:raise xception.kikonfActionSystemException(self, self_funct, 'Failed Creating PKCS12 key !')
verbose('PKCS12 Keystore: ' + p12_kpath + ' created.\n', level=self.getVerbose(), ifLevel=3, indent=indent, logFile=self.getLogFile())
verbose('PKCS12 Certicate: ' + p12_cpath + ' exporting.', level=self.getVerbose(), ifLevel=4, indent=indent, logFile=self.getLogFile())
cde=keytool_cde + ' -export -alias ' + p12_label + ' -keystore ' + p12_kpath + ' -storepass ' + p12_kpassword + ' -storetype PKCS12 -rfc -file ' + p12_cpath
# exec:
ret, stdout, sdterr=subprocess(cde, doPrint=doPrint)
if verbose>=5:
print stdout
print sdterr
print
if ret!=0:raise xception.kikonfActionSystemException(self, self_funct, 'Failed Exporting PKCS12 Certificate !')
verbose('PKCS12 Certicate: ' + p12_cpath + ' exported.\n', level=self.getVerbose(), ifLevel=3, indent=indent, logFile=self.getLogFile())
verbose('PKCS12 Certicate: ' + p12_cpath + ' importing.', level=self.getVerbose(), ifLevel=4, indent=indent, logFile=self.getLogFile())
cde=keytool_cde + ' -import -noprompt -alias ' + p12_label + ' -file ' + p12_cpath + ' -keystore ' + kpath + ' -storepass ' + password
# exec:
ret, stdout, sdterr=subprocess(cde, doPrint=doPrint)
if verbose>=5:
print stdout
print sdterr
print
if ret!=0:raise xception.kikonfActionSystemException(self, self_funct, 'Failed Importing PKCS12 Certificate !')
verbose('PKCS12 Certicate: ' + p12_cpath + ' imported.\n', level=self.getVerbose(), ifLevel=3, indent=indent, logFile=self.getLogFile())
if self.getVerbose()>=4:
verbose('Keystore: ' + kpath + ' listing.', level=self.getVerbose(), ifLevel=4, indent=indent, logFile=self.getLogFile())
cde=keytool_cde + ' -list' + ' -keystore ' + kpath + ' -storepass ' + password
# exec:
ret, stdout, sdterr=subprocess(cde, doPrint=doPrint)
if verbose>=5:
print stdout
print sdterr
print
if ret!=0:raise xception.kikonfActionSystemException(self, self_funct, 'Failed listing keystore !')
verbose('Keystore: ' + kpath + ' listed.\n', level=self.getVerbose(), ifLevel=3, indent=indent, logFile=self.getLogFile())
def getBinarySufix(self):
if getOsType()=='windows':sufix='.exe'
else:sufix='.sh'
return sufix
def verbose(self, name=None, dir=None):
verbose('JSSE keysStore:' + name + ', at path:' + str(dir) + '.', level=self.getVerbose(), ifLevel=2, indent=self.getIndent(), logFile=self.getLogFile())
Trademarks :
|