Device Security
The default list of valid X509 certificates is specified in a file calledITLFile.tlv. These certificates are used to verify SIP-TLS and HTTPS connections as well as optionally sign configuration files.An archive containing scripts to generate X509 certificates, build
.tlv and .sgn files can be downloaded from the URL below.file_download certutils-4.13.tar.gz (19K) event 29/08/2024 security SHA256:4b801f29cda8de4a5b2ff0c861637739d365176204938214e7a082790b636f72.
mkcert link
mkcert is basic script to generate RSA private keys and self-signed X509 certificates. If you already have certificates they can be used instead, commonName (CN), organizationName (O) and organizationalUnitName (OU) attributes are required. Note: When generating RSA keys the maximum supported size is 2048 bits and when generating EC keys the recommended curves are secp256r1, secp384r1 or secp521r1.1. Create a certificate to sign
ITLFile.tlv. This will have the SAST (System Administrator Security Token) role.~/certutils-X.X$ sudo ./mkcert --common "SAST" --organization "SAST" --unit "SAST" --years 20 /etc/ssl/private/sast.pem
        2. Create a certificate for Asterisk. This will have the
CCM role for SIP-TLS connections. Optionally, this can also have the TFTP role to sign provisioning files.~/certutils-X.X$ sudo ./mkcert --common "Asterisk" --organization "Asterisk" --unit "Asterisk" /etc/asterisk/keys/asterisk.pem
        3. Optionally, create a certificate for Apache with an EC (elliptic curve) key. This will have the
TFTP role for HTTPS provisioning. See Secure Provisioning for more information.~/certutils-X.X$ sudo ./mkcert --common "Apache-EC" --organization "Apache-EC" --unit "Asterisk-EC" --curve secp384r1 /etc/apache/ssl-certs/apache-ec.pem
        4. Optionally, create a certificate for Apache. This will have the
APP-SERVER role for secure XML services.~/certutils-X.X$ sudo ./mkcert --common "Apache" --organization "Apache" --unit "Apache" /etc/apache/ssl-certs/apache.pem
         tlvfile link
tlvfile is used to build or parse .tlv files. Each certificate has a role specifying where it is used and the same certificate can be included multiple times to provide different roles. Valid roles are listed below.| SAST | System Administrator Security Token, signs and verifies .tlv files | 
            
| CCM | Verifies the SIP-TLS connection to Asterisk | 
| TFTP | Signs provisioning files downloaded via HTTP or TFTP (RSA) and verifies HTTPS provisioning connections (EC) | 
| CCM+TFTP | Combined CCM and TFTP roles | 
            
| CAPF | Verifies the SSL connection to the Certificate Authentication Proxy Service | 
| APP-SERVER | Verifies HTTPS connections to phone XML services | 
| TVS | Verifies the SSL connection to the Trust Verification Service | 
Note: Once a phone has installed a
.tlv new versions of that file can only be signed by a previously known certificate with the SAST role. A .tlv can have a maximum of 2 certificates with the SAST role.1. Create an
ITLFile.tlv in the tftpboot provisioning directory, the certificate used to sign the .tlv file is automatically included as providing the SAST role.~/certutils-X.X$ sudo ./tlvfile --build /var/lib/tftpboot/ITLFile.tlv --sast /etc/ssl/private/sast.pem \
  --ccm /etc/asterisk/keys/asterisk.pem --app-server /etc/apache2/ssl-certs/apache.pem
        2. Optionally, the default
ITLFile.tlv can be overridden using a file name based on the MAC address of the phone, eg: ITLSEP58971ECC97C1.tlv.~/certutils-X.X$ sudo ./tlvfile --build /var/lib/tftpboot/ITLSEP58971ECC97C1.tlv --sast /etc/ssl/private/sast.pem \
  --ccm /etc/asterisk/keys/asterisk-1.pem --ccm /etc/asterisk/keys/asterisk-2.pem --filename ITLFile.tlv
        3. Optionally, additional certificates can be included using a file name based on the MAC address of the phone, eg:
CTLSEP58971ECC97C1.tlv.~/certutils-X.X$ sudo ./tlvfile --build /var/lib/tftpboot/CTLSEP58971ECC97C1.tlv --sast /etc/ssl/private/sast.pem \
  --app-server /etc/apache2/ssl-certs/apache-1.pem --app-server /etc/apache2/ssl-certs/apache-2.pem --filename CTLFile.tlv
        4. Optionally, use HTTPS provisioning for SEPMAC.cnf.xml and signing for the other configuration files. Note: the certificate used to verify the HTTPS connection must use an EC (Elliptic Curve) key.
~/certutils-X.X$ sudo ./tlvfile --build /var/lib/tftpboot/ITLFile.tlv --version 1.1 --sast /etc/ssl/private/sast.pem \
  --ccm /etc/asterisk/keys/asterisk.pem --tftp /etc/apache2/ssl-certs/apache-ec.pem
        5. Enable SIP-TLS mode by setting <
transportLayerProtocol> to 3 and setting <deviceSecurityMode> to either 2 (Authenticated) or 3 (Encrypted) in SEPMAC.cnf.xml. Optionally, any XML services can be configured to use HTTPS.libsrtp link
To use secure (encrypted) RTPlibsrtp must be installed. The latest release is available from the open_in_browser libsrtp GitHub repository.~/libsrtp-X.X.X$ ./configure --prefix=/usr --enable-openssl
~/libsrtp-X.X.X$ make shared_library
~/libsrtp-X.X.X$ sudo make install
        sgnfile link
sgnfile is used to build or parse .sgn files which are any non-firmware files the phone downloads during provisioning with a digital signature added. You only need to sign files if the TFTP role has been included in the phone's .tlv file.1. Sign SEPMAC.cnf.xml, soft-key and dial-plan files.
~/certutils-X.X$ sudo ./sgnfile --build /var/lib/tftpboot/SEP58971ECC97C1.cnf.xml --tftp /etc/asterisk/keys/asterisk.pem
~/certutils-X.X$ sudo ./sgnfile --build /var/lib/tftpboot/SoftKeys.xml --tftp /etc/asterisk/keys/asterisk.pem
~/certutils-X.X$ sudo ./sgnfile --build /var/lib/tftpboot/DialTemplate.xml --tftp /etc/asterisk/keys/asterisk.pem
        2. Sign network and user locale files.
~/certutils-X.X$ sudo ./sgnfile --build /var/lib/tftpboot/New_Zealand/g3-tones.xml --tftp /etc/asterisk/keys/asterisk.pem \
  --filename New_Zealand/g3-tones.xml.sgn
~/certutils-X.X$ sudo ./sgnfile --build /var/lib/tftpboot/New_Zealand/mk-sip.jar --tftp /etc/asterisk/keys/asterisk.pem \
  --filename New_Zealand/mk-sip.jar.sgn
        3. Sign ring-tones (optional).
~/certutils-X.X$ sudo ./sgnfile --build /var/lib/tftpboot/Ringlist.xml --tftp /etc/asterisk/keys/asterisk.pem
~/certutils-X.X$ sudo ./sgnfile --build /var/lib/tftpboot/Old_Telephone.raw --tftp /etc/asterisk/keys/asterisk.pem
        4. Sign background images (optional).
~/certutils-X.X$ sudo ./sgnfile --build /var/lib/tftpboot/Desktops/320x196x4/List.xml --tftp /etc/asterisk/keys/asterisk.pem \
  --filename Desktops/320x196x4/List.xml.sgn
~/certutils-X.X$ sudo ./sgnfile --build /var/lib/tftpboot/Desktops/320x196x4/Logo.png --tftp /etc/asterisk/keys/asterisk.pem \
  --filename Desktops/320x196x4/Logo.png.sgn
~/certutils-X.X$ sudo ./sgnfile --build /var/lib/tftpboot/Desktops/320x196x4/Logo_Preview.png --tftp /etc/asterisk/keys/asterisk.pem \
  --filename Desktops/320x196x4/Logo_Preview.png.sgn
        enccnf link
enccnf is used to build or parse .enc.sgn files which are encrypted SEPMAC.cnf.xml phone configuration file and signed by a certificate with the TFTP role. The public key from the phone's MIC or LSC is used to encrypt the file, see Certificate Enrollment for more information. Note: enccnf will delete the .cnf.xml file after creating the .sgn and .enc.sgn file.~/certutils-X.X$ sudo ./enccnf --build /var/lib/tfptboot/SEP58971ECC97C1.cnf.xml --tftp /etc/asterisk/keys/asterisk.pem \
  --certificate /var/lib/capf/SEP58971ECC97C1.pem