# Creating and Applying SSL Certificate to Apache Guacamole

## Prerequisites

- A XCA PKI database https://youtu.be/ezzj3x207lQ

## Create Your SSL Certificate

1. Launch XCA
2. Open the PKI database if it is not already (File > Open DataBase), enter password
3. Click on the Certificates tab, right click on your Intermediate CA certificate
4. Select New
5. On the Source tab, make sure Use this Certificate for signing is selected
6. Verify your Intermediate CA certificate is selected from the drop down
7. Click the Subject tab
8. Complete the Distinguished Name section

   internalName: Guacamole SSL
   countryName: US
   stateOrProvinceName: Virginia
   localityName: Northern
   organizationName: i12bretro
   organizationUnitName: i12bretro Certificate Authority
   commonName: remote.i12bretro.local

9. Click the Generate a New Key button
10. Enter a name and set the key size to at least 2048
11. Click Create
12. Click on the Extensions tab
13. Select End Entity from the type list
14. Click Edit next to Subject Alternative Name
15. Add any DNS or IP addresses that the certificate will identify
16. Update the validity dates to fit your needs
17. Click the Key Usage tab
18. Under Key Usage select Digital Signature, Key Encipherment
19. Under Extended Key Usage select Web Server and Web Client Authentication
20. Click the Netscape tab
21. Select SSL Server
22. Click OK to create the certificate

## Exporting Required Files

1. In XCA, click on the Certificates tab
2. Right click the Intermediate CA certificate > Export > File
3. Set the file name with a .crt extension and verify the export format is PEM chain (*.pem)
4. Click OK
5. Right click the SSL certificate > Export > File
6. Set the file name with a .crt extension and verify the export format is PEM (*.crt)
7. Click OK
8. Click the Private Keys tab
9. Right click the private key generated for the SSL certificate > Export > File
10. Set the file name with a .key extension and verify the export format is PEM private (*.pem)
11. Click OK

## Applying the Certificates

1. Download WinSCP Download
2. Extract WinSCP and run the executable
3. Connect to the Apache Guacamole server via WinSCP
4. Copy the created .crt, .key and .pem files to ~/
5. On the Guacamole server, run the following command in a terminal
   sudo cp ~/remote.i12bretro.local.crt /var/lib/tomcat9/
   sudo cp ~/remote.i12bretro.local.key /var/lib/tomcat9/
   sudo cp ~/CA-Chain.pem /var/lib/tomcat9/
   sudo chown :tomcat /var/lib/tomcat9/remote.i12bretro.local.crt
   sudo chown :tomcat /var/lib/tomcat9/remote.i12bretro.local.key
   sudo chown :tomcat /var/lib/tomcat9/CA-Chain.pem
   sudo cp /var/lib/tomcat9/conf/server.xml /var/lib/tomcat9/conf/server.xml.bkup
   sudo nano /var/lib/tomcat9/conf/server.xml
6. Edit the server.xml file adding the following connector block

   <connector port="8443"
   protocol="org.apache.coyote.http11.Http11NioProtocol"
   maxThreads="150"
   SSLEnabled="true"
   SSLProtocol="TLS"
   clientAuth="false"
   secure="true"
   scheme="https"
   SSLCertificateFile="/var/lib/tomcat9/remote.i12bretro.local.crt"
   SSLCertificateKeyFile="/var/lib/tomcat9/remote.key"
   SSLCertificateChainFile="/var/lib/tomcat9/CA-Chain.pem"
   keyAlias="remote.i12bretro.local"
   sslEnabledProtocols="TLSv1.1+TLSv1.2"></connector>

7. Press CTRL+O, Enter, CTRL+X
8. Run the following command in terminal to restart the Gaucamole Tomcat server
   sudo systemctl restart tomcat9
9. Open a web browser and navigate to Apache Guacamole via https://

## Optional Steps

1. To redirect all http traffic to communicate securely with https, run the following in a terminal
   sudo nano /var/lib/tomcat9/conf/web.xml
2. At the bottom of the file above the closing tag for web-app paste the following

   <security-constraint>
   <web-resource-collection>
   <web-resource-name>Protected Context</web-resource-name>
   <url-pattern>/*</url-pattern>
   </web-resource-collection>
   <user-data-constraint>
   <transport-guarantee>CONFIDENTIAL</transport-guarantee>
   </user-data-constraint>
   </security-constraint>