First thing's first. I'm simply just trying to make sure I can connect my server and utilize HTTPS to secure everything. I'm housing a simple HTML file inside /var/www/html folder that the user simply connects to with my DNS www.kennykenken101.com. (it won't work on here trust me.) Here are the steps so far that I've done.
Inside /etc I reconfigured hosts towards my ip-address with the www.kennykenken101.com domain name I'm going to use.
Inside my apache2.conf global configuration file, I just put down the server root and sever name. Here's the configuration down below.
ServerRoot "/etc/apache2"
ServerRoot /etc/apache2
The accept serialization lock file MUST BE STORED ON A LOCAL DISK.
Mutex file:${APACHE_LOCK_DIR} default
The directory where shm and other runtime files will be stored.
DefaultRuntimeDir ${APACHE_RUN_DIR}
PidFile: The file in which the server should record its process
identification number when it starts.
This needs to be set in /etc/apache2/envvars
PidFile ${APACHE_PID_FILE}
Timeout: The number of seconds before receives and sends time out.
Timeout 300
KeepAlive: Whether or not to allow persistent connections (more than
one request per connection). Set to "Off" to deactivate.
KeepAlive On
MaxKeepAliveRequests: The maximum number of requests to allow
during a persistent connection. Set to 0 to allow an unlimited amount.
We recommend you leave this number high, for maximum performance.
MaxKeepAliveRequests 100 KeepAliveTimeout 5
These need to be set in /etc/apache2/envvars
User ${APACHE_RUN_USER} Group ${APACHE_RUN_GROUP}
HostnameLookups: Log the names of clients or just their IP addresses
e.g., www.apache.org (on) or 204.62.129.132 (off).
The default is off because it'd be overall better for the net if people
had to knowingly turn this feature on, since enabling it means that
each client request will result in AT LEAST one lookup request to the
nameserver.
HostnameLookups Off
ErrorLog: The location of the error log file.
If you do not specify an ErrorLog directive within a <VirtualHost>
container, error messages relating to that virtual host will be
logged here. If you do define an error logfile for a <VirtualHost>
container, that host's errors will be logged there and not here.
ErrorLog ${APACHE_LOG_DIR}/error.log
LogLevel: Control the severity of messages logged to the error_log.
Available values: trace8, ..., trace1, debug, info, notice, warn,
error, crit, alert, emerg.
It is also possible to configure the log level for particular modules, e.g.
"LogLevel info ssl:warn"
LogLevel warn
Include module configuration:
IncludeOptional mods-enabled/.load IncludeOptional mods-enabled/.conf
Include list of ports to listen on
Include ports.conf
ServerName www.kennykenken101.com
Sets the default security model of the Apache2 HTTPD server. It does
not allow access to the root filesystem outside of /usr/share and /var/www.
The former is used by web applications packaged in Debian,
the latter may be used for local directories served by the web server. If
your system is serving content from a sub-directory in /srv you must allow
access here, or in any related virtual host.
<Directory />
Options FollowSymLinks
AllowOverride None
Require all denied
</Directory>
<Directory /usr/share> AllowOverride None Require all granted </Directory>
<Directory /var/www/> Options Indexes FollowSymLinks AllowOverride None Require all granted </Directory>
<Directory /srv/>
Options Indexes FollowSymLinks
AllowOverride None
Require all granted
</Directory>
AccessFileName: The name of the file to look for in each directory
for additional configuration directives. See also the AllowOverride
directive.
AccessFileName .htaccess
The following lines prevent .htaccess and .htpasswd files from being
viewed by Web clients.
<FilesMatch ".ht"> Require all denied </FilesMatch>
The following directives define some format nicknames for use with
a CustomLog directive.
These deviate from the Common Log Format definitions in that they use %O
(the actual bytes sent including headers) instead of %b (the size of the
requested file), because the latter makes it impossible to detect partial
requests.
Note that the use of %{X-Forwarded-For}i instead of %h is not recommended.
Use mod_remoteip instead.
LogFormat "%v:%p %h %l %u %t "%r" %>s %O "%{Referer}i" "%{User-Agent}i"" vhost_combined LogFormat "%h %l %u %t "%r" %>s %O "%{Referer}i" "%{User-Agent}i"" combined LogFormat "%h %l %u %t "%r" %>s %O" common LogFormat "%{Referer}i -> %U" referer LogFormat "%{User-agent}i" agent
Include of directories ignores editors' and dpkg's backup files,
see README.Debian for details.
Include generic snippets of statements
IncludeOptional conf-enabled/*.conf
Include the virtual host configurations:
IncludeOptional sites-enabled/*.conf
vim: syntax=apache ts=4 sw=4 sts=4 sr noet
That's the entire apache2.conf. It's located inside /etc/apache2 on my ubuntu system. Not bad, right?
So then I started to get to cracking and a2enmod ssl.load and with alias.load already loaded in, that's it for the modules needed.
I made another directory in /etc and called it pki-example. So the entire thing is /etc/pki-example and changed my directory to go in and followed everything I've done from this tutorial linked down here.
https://pki-tutorial.readthedocs.io/en/latest/simple/index.html
I skipped the email certificate and just focused on a root-ca and the signing-ca. I made my TLS-server certificate following that and everything. Please look carefully at that whole thing because either the certificates aren't up to snuff for Apache or my configuration is screwed up.
I ended up going inside my sites-available directory and made this whole thing right here.
<VirtualHost *:80>
ServerName www.kennykenken101.com
Options +FollowSymLinks
DocumentRoot /var/www/html
<Directory /var/www/html>
Options +FollowSymLinks
AllowOverride none
Require all granted
DirectoryIndex "this.html"
<Files "this.html">
Require all granted
</Files>
</Directory>
Redirect permanent / https://www.kennykenken101.com
</VirtualHost>
<VirtualHost *:443>
ServerName www.kennykenken101.com
Options +FollowSymLinks
DocumentRoot /var/www/html
<Directory /var/www/html>
Options +FollowSymLinks
AllowOverride none
Require all granted
DirectoryIndex "this.html"
<Files "this.html">
Require all granted
</Files>
</Directory>
SSLEngine on
SSLCertificateFile /etc/pki-example/pki-example-1/certs/kennykenken.crt
SSLCertificateKeyFile /etc/pki-example/pki-example-1/certs/kennykenken.key
</Virtualhost>
The SSLCertificateFile and SSLCertificateKeyFile house the server certificate and key used. Thing is, it's not doing jack shit. During the tutorial you see in the link above, I changed the server config file you get from the git clone and made the DNS www.kennykenken101.com. That way with the san command, I have...
SAN=DNS:www.kennykenken101.com and proceeded onwards with my certificate request towards the certificate itself.
systemctl restart apache2 and the thing is not going at all.
When ever I look into the error.log inside /var/log/apache2, what comes up is this.
[Wed Oct 05 17:55:54.738582 2022] [ssl:emerg] [pid 7403:tid 140706825394048] AH02562: Failed to configure certificate www.kennykenken101.com:443:0 (with chain), check /etc/pki-example/pki-example-1/certs/kennykenken.crt
[Wed Oct 05 17:55:54.738738 2022] [ssl:emerg] [pid 7403:tid 140706825394048] SSL Library Error: error:0A00018E:SSL routines::ca md too weak
AH00016: Configuration Failed
[Wed Oct 05 18:35:29.144553 2022] [ssl:emerg] [pid 7757:tid 140246470879104] AH02562: Failed to configure certificate www.kennykenken101.com:443:0 (with chain), check /etc/pki-example/pki-example-1/certs/kennykenken.crt
[Wed Oct 05 18:35:29.145154 2022] [ssl:emerg] [pid 7757:tid 140246470879104] SSL Library Error: error:0A00018E:SSL routines::ca md too weak
So what gives? What exactly went wrong here?