git-svn-id: http://svn.eurecom.fr/openair4G/trunk@7108 818b1a75-f10b-46b9-bf7c-635c3b92a50f
105 lines
3.8 KiB
Bash
Executable File
105 lines
3.8 KiB
Bash
Executable File
#!/bin/bash
|
|
################################################################################
|
|
# OpenAirInterface
|
|
# Copyright(c) 1999 - 2014 Eurecom
|
|
#
|
|
# OpenAirInterface is free software: you can redistribute it and/or modify
|
|
# it under the terms of the GNU General Public License as published by
|
|
# the Free Software Foundation, either version 3 of the License, or
|
|
# (at your option) anylater version.
|
|
#
|
|
#
|
|
# OpenAirInterface is distributed in the hope that it will be useful,
|
|
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
# GNU General Public License for more details.
|
|
#
|
|
# You should have received a copy of the GNU General Public License
|
|
# along with OpenAirInterface.The full GNU General Public License is
|
|
# included in this distribution in the file called "COPYING". If not,
|
|
# see <http://www.gnu.org/licenses/>.
|
|
#
|
|
# Contact Information
|
|
# OpenAirInterface Admin: openair_admin@eurecom.fr
|
|
# OpenAirInterface Tech : openair_tech@eurecom.fr
|
|
# OpenAirInterface Dev : openair4g-devel@eurecom.fr
|
|
#
|
|
# Address : Eurecom, Campus SophiaTech, 450 Route des Chappes, CS 50193 - 06904 Biot Sophia Antipolis cedex, FRANCE
|
|
#
|
|
################################################################################
|
|
# file check_hss_s6a_certificate
|
|
# brief
|
|
# author Lionel Gauthier
|
|
# company Eurecom
|
|
# email: lionel.gauthier@eurecom.fr
|
|
################################
|
|
# include helper functions
|
|
################################
|
|
THIS_SCRIPT_PATH=$(dirname $(readlink -f $0))
|
|
source $THIS_SCRIPT_PATH/build_helper
|
|
|
|
|
|
function _create_hss_certs()
|
|
{
|
|
local freediameter_path=$1
|
|
local fqdn=$2
|
|
|
|
cd /tmp
|
|
rm -rf /tmp/demoCA
|
|
mkdir /tmp/demoCA
|
|
echo 01 > /tmp/demoCA/serial
|
|
touch /tmp/demoCA/index.txt
|
|
|
|
echo "Creating HSS certificate for user '$fqdn'"
|
|
# Create a Root Certification Authority Certificate
|
|
openssl req -new -batch -x509 -days 3650 -nodes -newkey rsa:1024 -out hss.cacert.pem -keyout hss.cakey.pem -subj /CN=$fqdn/C=FR/ST=PACA/L=Aix/O=Eurecom/OU=CM
|
|
|
|
# Generate a Private Key
|
|
openssl genrsa -out hss.key.pem 1024
|
|
|
|
# Generate a CSR (Certificate Signing Request) that will be self-signed
|
|
openssl req -new -batch -out hss.csr.pem -key hss.key.pem -subj /CN=$fqdn/C=FR/ST=PACA/L=Aix/O=Eurecom/OU=CM
|
|
|
|
# Certification authority
|
|
openssl ca -cert hss.cacert.pem -keyfile hss.cakey.pem -in hss.csr.pem -out hss.cert.pem -outdir . -batch
|
|
|
|
if [ ! -d $freediameter_path/etc/freeDiameter ]; then
|
|
echo "Creating non existing directory: $freediameter_path/etc/freeDiameter/"
|
|
sudo mkdir -p $freediameter_path/etc/freeDiameter/
|
|
fi
|
|
|
|
sudo mv hss.cakey.pem hss.cert.pem hss.cacert.pem hss.key.pem $freediameter_path/etc/freeDiameter/
|
|
cd -
|
|
}
|
|
|
|
|
|
#$1 if freediameter path
|
|
#$2 is fqdn
|
|
function main() {
|
|
local freediameter_path=$1
|
|
local fqdn=$2
|
|
if [ -d $freediameter_path/etc/freeDiameter ]; then
|
|
if [ -f $freediameter_path/etc/freeDiameter/hss.cert.pem ]; then
|
|
full_hostname=`cat $freediameter_path/etc/freeDiameter/hss.cert.pem | grep "Subject" | grep "CN" | cut -d '=' -f6`
|
|
if [ a$full_hostname == a$fqdn ]; then
|
|
echo_success "HSS S6A: Found valid certificate in $freediameter_path/etc/freeDiameter"
|
|
return 0
|
|
else
|
|
echo_error "Bad hss fqdn found in cert file: $full_hostname fqdn is $fqdn"
|
|
fi
|
|
fi
|
|
fi
|
|
echo_error "HSS S6A: Did not find valid certificate in $freediameter_path/etc/freeDiameter"
|
|
echo_warning "HSS S6A: generating new certificate in $freediameter_path/etc/freeDiameter..."
|
|
_create_hss_certs $freediameter_path $fqdn
|
|
if [ $# -lt 3 ] ; then
|
|
main $freediameter_path $fqdn 2
|
|
return $?
|
|
else
|
|
echo_error "Could not access to freeDiameter path: $freediameter_path/etc/freeDiameter"
|
|
exit 1
|
|
fi
|
|
}
|
|
|
|
main "$@"
|