iTechGuides is reader-supported. When you buy through links on our site, we may earn an affiliate commission. As an Amazon Associate I earn from qualifying purchases. Learn more
Antihost offers Linux VPS plans with full root access, unlimited traffic on a 1 Gbps port and a 14-day free trial.
On a Linux-package (Omnibus) GitLab server, HTTPS is enabled by setting the public URL to an HTTPS fully qualified domain name (FQDN) in /etc/gitlab/gitlab.rb, installing either an automatically managed ACME certificate or a manual certificate, and running sudo gitlab-ctl reconfigure. The correct procedure depends on whether GitLab is directly reachable from the internet, sits behind a TLS-terminating proxy, runs in a private network, or is deployed with Helm or from source.
The most straightforward public setup uses GitLab’s Let’s Encrypt integration. A private or air-gapped server normally needs a certificate from an internal CA or another reachable ACME service. A reverse proxy terminates TLS itself and sends ordinary HTTP to GitLab, while Helm deployments configure TLS through Kubernetes ingress or Gateway resources rather than Omnibus file paths.
Recommended Free Tools
Choose the setup that matches your GitLab deployment
First identify both the GitLab installation model and the device that will terminate TLS. The Linux package bundles GitLab services and NGINX and is configured in /etc/gitlab/gitlab.rb. Helm deployments use Kubernetes ingress or Gateway resources. Self-compiled installations use the source-based NGINX example configuration. An external reverse proxy or load balancer may terminate TLS before traffic reaches any of these installations.
| Situation | Where TLS is configured | Certificate approach |
|---|---|---|
| Omnibus, public hostname, GitLab directly exposed | /etc/gitlab/gitlab.rb and bundled NGINX |
Let’s Encrypt/ACME or a manual certificate |
| Omnibus behind a TLS proxy or load balancer | Proxy for TLS; gitlab.rb for an HTTP backend and forwarded headers |
Certificate lives on the proxy |
| Private or air-gapped Omnibus | /etc/gitlab/gitlab.rb and bundled NGINX |
Internal CA, manually supplied certificate, or an ACME service reachable from the network |
| Helm deployment | Kubernetes ingress or Gateway configuration | Existing Kubernetes Secret or cert-manager automation |
| Self-compiled GitLab | Source installation’s NGINX configuration | The HTTPS GitLab URL and the gitlab-ssl NGINX example |
Prepare DNS, networking, and a stable hostname
Use an FQDN instead of an IP address
Create a stable name such as gitlab.example.com and point its DNS record at the address that accepts GitLab traffic. GitLab requires a domain name for HTTPS. The Let’s Encrypt validation path additionally requires that the name resolve over the public internet, so a private-only DNS record cannot satisfy the normal public challenge.
#1 Best Overall
- Powerful Turbo Fan:CAGIWIRU Electric Air Duster have reached speed up to 130000RPM,Can efficient remove dust and debris.With LED light and Three Adjustable Speed to meet with different cleaning tasks.
- With Attached USB C Fasting Charging cable.Charing 3 hours,Enjoy up to 240 minutes of use on the lowest setting, For third speed can use for 25mins.with four charging options to meet with your needs.
- Wide Application: attached 5 different nozzles,making it suitable for a variety of scenes, such as car,pet, pc, keyboards, and other electronic devices. It also serves for office and home clean duster.
- Handy Design & Portable:Cordless air duster electric nozzle is Light weight and small size, design and comfortable to hold and space saving, convenient to carry around. You can put it in your room or inside the car without taking up space.
- Economical &Reusable: Built durable materials with a long-lasting battery,our CAGIWIRU air duster it's a sustainable alternative to disposable air cans.
A hostname also gives the certificate a durable identity when the server’s IP changes. GitLab’s offline guidance recommends a domain rather than an IP for this reason. If users access GitLab through more than one name, decide which name is canonical before requesting the certificate and use it consistently in links, clone URLs, callbacks, and the external_url value.
Make the validation and service ports reachable
For a directly exposed Let’s Encrypt installation, TCP ports 80 and 443 must reach the GitLab host. Port 80 is used for HTTP-01 validation and can also serve the redirect to HTTPS; port 443 serves the application after the certificate is installed. Check firewalls, cloud security groups, NAT rules, and any upstream proxy before starting the ACME request.
For a manually managed or private certificate, public port 80 is not inherently required, but clients still need to reach whichever HTTPS endpoint you publish. A reverse-proxy design may expose 443 on the proxy while allowing only the proxy’s address to reach GitLab’s HTTP backend.
Back up configuration before changing it
Save a copy of /etc/gitlab/gitlab.rb and record the current external URL and proxy settings. A reconfigure operation changes generated service configuration; having the previous file makes it easier to recover from a syntax error or an incorrect backend-port choice.
Option 1: Enable HTTPS with Let’s Encrypt on Omnibus
Let’s Encrypt is the easiest automated path when the GitLab hostname is public, DNS resolves publicly, and ports 80 and 443 are reachable. GitLab’s integration uses ACME and renews certificates without requiring you to copy replacement files by hand. Certificates expire every 90 days, so unattended renewal is a major advantage for internet-facing servers.
1. Set the HTTPS external URL
Edit the Omnibus configuration:
sudo editor /etc/gitlab/gitlab.rb
Set the URL to the exact hostname users will visit:
Outdated Drivers Are Slowing You Down
One free scan finds every outdated or missing driver and matches the right update for your exact hardware.Free scan · exact hardware matchWindows Errors? Fix Them Before They Spread
Repair common Windows errors and clear accumulated junk for a smoother, more stable PC - no reinstall needed.Free scan · no reinstallexternal_url "https://gitlab.example.com"
Use the hostname covered by the certificate. Do not leave an http:// URL here while expecting GitLab’s bundled NGINX to serve HTTPS.
2. Optionally provide ACME contact information
GitLab can use a contact address for ACME account communication. Add the setting supported by your GitLab version if you want an administrator to receive renewal or expiry notices:
letsencrypt['contact_emails'] = ['admin@example.com']
Leave certificate file paths unset when GitLab is obtaining and managing the certificate itself. Do not combine automatic Let’s Encrypt management with a manually copied certificate for the same hostname.
3. Reconfigure and allow the initial request
Run:
sudo gitlab-ctl reconfigure
The run generates NGINX configuration, requests the certificate, and enables HTTPS if the ACME challenge succeeds. Watch the command output for DNS, connectivity, or authorization errors. A failure at this stage generally means the challenge endpoint could not be reached or the hostname did not resolve to this server.
What’s actually slowing this PC down?
Pick the symptom - the matching free tool is one click away.
Rank #2
- Screen Cleaner is Your Screen’s New Bestfriend! - EVEO is proud to present a screen cleaner that’s perfectly suited for your TV. Meet your new screen cleaner, computer screen cleaner, laptop cleaner, iPad cleaner, Macbook,tv cleaner or any other electronic device. Our screen cleaner spray and wipe along with the included plush microfiber cloth, easily removes dust, fingerprints & other smudges on the screen’s surface. Clean effectively for a streak-free screen
- Gentle on your Screens - Our screen cleaner spray and wipes is compatible to be used even for the most sensitive LCD, LED, CRT, and OLED screens in proper use. Be at ease knowing that this product is compatible with all the major brands: LG, SONY, Samsung, Sharp, iPad, iPhone, Android screens, Kindle, PC monitors - we’ve got you covered! Can be used as LCD screen cleaner, tv cleaner, smart tv screen cleaner, and more
- Premium Super Soft Plush Microfiber Cloth - Included in this efficient screen cleaning kit. This screen cleaner spray and wipe has our signature plush microfiber cloth specially designed to comply with screens and monitors and leave them streak-free. Has been shown to effectively absorbs stubborn stains, zero streaks, and no fiber shedding. Always use this together with our screen cleaner for the best results
- Easy-to-Use Screen Cleaner Kit + microfiber cleaning cloth - The EVEO Screen Cleaning Kit will easily be your new favorite tool when it comes to taking care of the things you love most, quick and easy solution for a streak-free screen. Simply screw on the sprayer gun on the screen cleaner bottle. Spray the cleaning liquid onto the microfiber cloth, then wipe the screen until desired cleanliness & shine is achieved.
- Quality Screen Care Kit Worth Purchasing - Enjoy a convenient Screen Cleaner anytime, anywhere you need it. Your satisfaction is our top priority. We stand behind the quality of our products and that’s why, you shouldn’t be worrying at all. We manufacture the Best Screen Cleaner. and can be used for laptop cleaning kit, laptop screen cleaner, tv screen cleaner for smart tv. MacBook screen cleaner, monitor cleaner or screen cleaner spray for electronic devices with microfiber cleaning cloth
4. Decide whether HTTP should redirect
To send visitors from HTTP to HTTPS, add this setting and reconfigure:
gitlab_rails['nginx']['redirect_http_to_https'] = true
sudo gitlab-ctl reconfigure
Keep port 80 reachable if you rely on HTTP-01 renewal challenges. If another proxy handles the redirect, configure the redirect there instead and ensure it does not prevent the ACME challenge path from being served.
5. Understand renewal behavior
GitLab documents a renewal schedule that runs after midnight on every fourth day of the month, with the minute distributed using the external_url value. Administrators can set an explicit hour and minute. This scheduling behavior is version-sensitive; verify the current GitLab SSL documentation when you standardize maintenance windows or monitoring. Test renewal before the certificate approaches its 90-day lifetime rather than waiting for an outage.
6. Use an alternative ACME endpoint when appropriate
The integration is not limited to the default Let’s Encrypt endpoint. GitLab documents use with other ACME services, including ZeroSSL, Buypass, SSL.com, and step-ca. A private organization may use an internal step-ca service, while a public deployment may choose another authority for policy or operational reasons. Test against an ACME staging endpoint first so repeated failures do not consume production rate limits; switch to the production endpoint only after DNS, routing, and challenge handling work.
Quick wins for a faster PC:
Scan for outdated or missing drivers - takes under a minuteDriver Scan →Clear out junk files and repair common Windows errorsFree Scan →Option 2: Install a manual certificate
Manual installation is appropriate when a commercial certificate, an internal-CA certificate, a certificate issued by an external automation system, or an air-gapped process is required. You remain responsible for renewal and replacement; GitLab will not obtain a new certificate for you.
1. Disable Let’s Encrypt
In /etc/gitlab/gitlab.rb, explicitly turn off the automatic integration:
letsencrypt['enable'] = false
Keep the HTTPS external URL:
external_url "https://gitlab.example.com"
Disabling ACME prevents GitLab from trying to manage a certificate that you intend to control elsewhere.
2. Create the certificate directory
sudo mkdir -p /etc/gitlab/ssl
sudo chmod 700 /etc/gitlab/ssl
/etc/gitlab/ssl is the default location used by the Linux package. Place the private key and the certificate file named for the GitLab hostname there, following the filename convention required by your GitLab package version. The certificate file must contain the complete chain, not only the leaf certificate.
3. Build the full chain in the correct order
Concatenate certificates in this order:
- The GitLab server (leaf) certificate.
- Every intermediate CA certificate, from the issuing intermediate upward.
- The root CA certificate, when the certificate authority instructs you to include it.
An incorrect order is a common cause of browser, Git client, container registry, and API validation failures. A client may trust the issuing authority but still be unable to construct a path if an intermediate is missing or appears before the server certificate.
4. Protect the key and certificate
Restrict the private key to mode 600 and make the certificate readable to the service as mode 644:
Rank #3
- 【Large size】:Measuring 800 x 300 mm/ 31. 5×12 inches, which is wider and taller than others. Large mouse pad can perfectly fit your keyboard and mouse of any size, and there is also ample space for peripherals such as phones, tablets, etc.
- 【LED backlight mouse pad】:Blade Hawks RGB mouse pad provides 7 static modes and 7 dynamic modes will give you the options you are looking for. Power-off memory function remembers the last lighting mode you selected. The super glow fiber Chroma will give you a colorful gaming setup that you want.
- 【Anti-slip rubber base】:Made from Natural rubber, this gaming mousepad will firmly grip your desktop, allowing you to enjoy the ultimate precision in the games you are most passionate about. It also comes with a texture that enhances this ability even further.
- 【Smooth and waterproof surface】: Micro-textured cloth surface, for extremely precise mouse control and a smooth movement. When liquid splashes on the gaming mouse pad, it forms water droplets and slides down. Will not delay your work or gameplay.
- 【Plug and play】: This mouse and keyboard pad is powered by USB, plug and play, no driver required. One button control light modes. Press one time to change the lighting mode, press twice to change the brightness, press and hold about 3 seconds turn ON/OFF.
sudo chmod 600 /etc/gitlab/ssl/gitlab.example.com.key
sudo chmod 644 /etc/gitlab/ssl/gitlab.example.com.crt
Replace the filenames with the names used for your hostname and certificate. Do not place the private key in a web-served directory or a source-control repository.
5. Handle an encrypted private key
If the private key is protected by a passphrase, configure gitlab_rails['nginx']['ssl_password_file'] to point to a file containing that passphrase, with permissions that prevent ordinary users from reading it. Without this setting, bundled NGINX cannot obtain the key password during reconfigure or startup. An unencrypted key avoids an interactive startup prompt but requires especially strict file and host access controls.
6. Apply the configuration
sudo gitlab-ctl reconfigure
After reconfigure, test both the application and any enabled services such as the container registry. If only certificate contents changed and the paths and NGINX settings stayed the same, reload the affected processes without a full reconfigure:
sudo gitlab-ctl hup nginx
Use the registry reload when its certificate changed. The first command reloads the bundled NGINX process; the second is relevant only when the registry is enabled and its certificate is affected.
Configure an external reverse proxy or load balancer
A proxy or load balancer can terminate TLS while GitLab receives HTTP on a private backend connection. In this design, the public certificate belongs on the proxy, not in the bundled NGINX certificate directory. GitLab must know that the original request was HTTPS, otherwise it can generate HTTP links, redirect in a loop, or reject requests protected by CSRF checks.
1. Make the Omnibus backend HTTP-only
For a proxy that sends traffic to port 80, set:
external_url "https://gitlab.example.com"
gitlab_rails['nginx']['listen_port'] = 80
gitlab_rails['nginx']['listen_https'] = false
Then apply the change:
sudo gitlab-ctl reconfigure
The HTTPS scheme in external_url remains important because it describes the public URL. The listen settings describe only the connection between the proxy and GitLab.
Do these 3 things before closing this tab:
1Scan for outdated or missing drivers - takes under a minute2Repair Windows errors before they cause bigger problems3Fix the driver behind crashes, sound loss and screen glitches2. Forward the original request information
Configure the proxy to pass the original host and scheme, the client address, and the public port. At minimum, GitLab's documentation calls out these headers:
Host— the public GitLab hostname.X-Forwarded-Ssl— indicates that the client used HTTPS.X-Forwarded-For— preserves the client address chain.X-Forwarded-Port— identifies the public listener, normally 443.
Use the proxy's documented syntax to set or overwrite these values rather than blindly trusting values supplied by an untrusted client. Restrict backend access so users cannot bypass the proxy and inject their own forwarded headers.
3. Diagnose redirect loops and 422 errors
A redirect from HTTPS back to HTTPS, or an endless HTTP-to-HTTPS loop, usually means the backend is not receiving the public host or scheme correctly. A “422 Unprocessable Entity” response during sign-in or form submission can indicate that GitLab's CSRF protection sees inconsistent host, port, or scheme headers. Inspect the proxy request headers and GitLab logs, correct the forwarding configuration, and re-run the request from a clean browser session.
4. Decide where HTTP-to-HTTPS redirection belongs
Either the proxy or GitLab can redirect HTTP. Keep the rule in one place to avoid conflicting behavior. If the proxy owns the redirect, it must still allow any ACME HTTP-01 path when automatic certificate issuance or renewal uses that challenge. If the proxy is the sole public endpoint, its certificate renewal and redirect policy become part of the GitLab service's availability plan.
Rank #4
- 【Softer and More Comfortable】Vaydeer wrist rest has unique diamond pattern, which is the combination of softness and aesthetics. The materials of wrist rest are improved into higher quality memory foam and covered with silky smooth lycra. The computer wrist rest makes you as comfortable and cushiony as like rest your wrists on clouds.
- 【Ergonomic Wrist Saver】The wrist rests for keyboard and mouse comes with a 17.32×3.15×0.83 inch keyboard wrist pad and a 5.94×3.15×0.83 inch mouse wrist support. Based on ergonomic design, the unique concave shape is the perfect fit for your wrist joints. The wrist rest pad fits most computer keyboards and laptops, improve hand and wrist posture, release your wrist and arm stress.
- 【Non-Slip Rubber Bottom】Featuring an anti-skid silicone base on the bottom, this wrist keyboard support stays firmly in place on your desk, preventing the padding from sliding around, ensuring stable and consistent wrist support during extended computer sessions.
- 【Better Experience & Pain Relief】Our keyboard arm rest is beneficial to alleviate the soreness caused by direct contact and friction between your arm and a hard desk surface, reducing the risk of wrist fatigue or carpal tunnel. The soft texture of memory foam can evenly distribute the pressure around your wrists and provide good support with just enough give.
- 【Helpful in Multiple Scenarios】Whether you're working, studying, writing, typing, gaming, this keyboard and mouse rest combo is an essential accessory to add comfort and support to your hands and wrists. It’s also a great gift for men, women, family, friend, coworker, gamer, teacher, etc.
Verify the live certificate and chain
Do not declare the setup complete merely because a browser displays a padlock. Test from a client that resolves the same hostname users will use and inspect the certificate chain presented on port 443.
Inspect the remote endpoint with GitLab's OpenSSL binary
echo | /opt/gitlab/embedded/bin/openssl s_client -connect gitlab.example.com:443
Review the output for the subject and subject-alternative names, validity dates, issuer, and chain. A successful verification normally ends with Verify return code: 0 (ok). If the command shows an incomplete chain, a hostname mismatch, or an expired certificate, fix the certificate or proxy configuration before testing application logins and Git operations.
Inspect a local certificate file
/opt/gitlab/embedded/bin/openssl x509 -in /path/to/certificate.crt -text -noout
Check that the hostname appears in the certificate's subject-alternative-name extension, that the validity window includes the current date, and that the issuer matches the expected certificate authority. This command examines a file; it does not prove that NGINX is serving that file, so pair it with the remote s_client test.
Free tools Windows power users keep installed
One-click scans. No signup required.
Exercise the services users actually need
- Open the web interface through the canonical FQDN.
- Clone and fetch a test repository over HTTPS.
- Sign in and submit a form to exercise CSRF and forwarded-header handling.
- Push and pull from the container registry if it is enabled.
- Check webhook, runner, and API integrations that use the external URL.
Run these checks from a client outside the GitLab host when possible. A local test can succeed while an external firewall, DNS view, or load balancer remains misconfigured.
Private and air-gapped installations
Let's Encrypt's normal public challenge is not suitable for a hostname that cannot resolve publicly or cannot accept public validation traffic. Disable Let's Encrypt, use a certificate issued by an internal CA or another ACME service reachable from the private network, and distribute the issuing CA certificate to every client that must trust GitLab.
Use a DNS name rather than an IP address even when all users are internal. The name provides a stable certificate identity and allows the address to change without replacing every client configuration. For an entirely disconnected environment, transfer the certificate and full chain through your approved offline process, store them in /etc/gitlab/ssl, protect the key, and apply the configuration with gitlab-ctl reconfigure.
Internal certificates also affect runners, automation hosts, package managers, and container engines. Install the internal root CA in each trust store that makes GitLab connections; otherwise those clients may report an unknown issuer even though browsers on managed desktops work correctly.
The Tool Desk
Outbyte Driver Updater FREEFix the driver behind crashes, sound loss and screen glitchesFind Drivers →Outbyte PC Repair FREEClear out junk files and repair common Windows errorsFree Scan →Helm deployments: configure Kubernetes TLS instead
Do not copy Omnibus paths such as /etc/gitlab/ssl into a Helm deployment. In Kubernetes, TLS is represented by ingress or Gateway settings. Reference an existing Kubernetes Secret containing the certificate and key, or use cert-manager automation with a Let's Encrypt HTTP-01 solver when the ingress is publicly reachable.
The ingress or Gateway should expose the public hostname, select the TLS secret, and route traffic to the GitLab services created by the chart. Ensure the HTTP-01 solver can receive requests on port 80 if you use that challenge type. Certificate renewal then belongs to Kubernetes and cert-manager rather than gitlab-ctl reconfigure. Validate the resulting secret, ingress events, and externally served chain with the same OpenSSL approach used for any public endpoint.
Self-compiled GitLab installations
Source-built GitLab instances do not use the Omnibus generated configuration or its default certificate directory. Set the GitLab URL to HTTPS in the source installation's configuration and adapt the documented gitlab-ssl NGINX example. Place the certificate and key where that NGINX configuration expects them, ensure the worker can read the key, and reload NGINX after changes.
Best Value
- 【No Drill Mounted】Cable management tray can be assembled in as little as 3 minutes or less-simply. Side clips easily clampe the edge of desk, pass through the holes on the sides, and secure excess cables with baskets. Desk cable management supports inward or outward installation to meet your needs in different scenarios, and provides you with great convenience when collecting and organizing wires.
- 【Rubber Pad Protects Desk】Wire organizer under desk built-in soft rubber pads on the clamp protect your desk from scratches, so you will not damage your furniture or office.
- 【Sturdy and Beautiful】Cord management under desk is made of high-quality carbon steel and holds about 15 lbs. The wire basket has 2 holes on each side of the tray to enable your cables to pass freely. Cable baskets are suitable for desk thickness use from 0.4" to 2.4".
- 【Space Saving & Keep Organized】Desk cable management tray holds all your power cords, outlet strips, USB hubs and computer transformers hidden from your feet, and the data cables will not enter the vacuum cleaner to keep your desk clean and tidy. Desk wire organizer is also suitable for use in the kitchen and outdoors.
- 【Reduce Safety Risks】Cable tray under desk keeps all plugs away from your kids, no more worry about tripping. Using 2 holes wire tray saves extra space, helps you easily cabling and wire protection. The mesh design is not easy to accumulate dust, but avoids safety accidents caused by messy wires.
The same principles still apply: the certificate must cover the public FQDN, the full chain must be served in the correct order, and a proxy must forward the original host and HTTPS state if it terminates TLS upstream.
Outdated Drivers Are Slowing You Down
One free scan finds every outdated or missing driver and matches the right update for your exact hardware.Free scan · exact hardware matchPC Slower Than It Used to Be?
A free scan shows the junk files, broken settings and background clutter dragging Windows down - then fixes them in one click.Free scan · Windows 10 & 11Troubleshoot common failures
ACME validation says the domain cannot be reached
- Confirm that public DNS returns the intended address, including both authoritative records and any IPv6 record.
- Verify that TCP 80 and 443 reach the machine or proxy that serves the challenge.
- Check NAT, cloud security groups, host firewalls, and another web server occupying the ports.
- Make sure the requested hostname exactly matches
external_url.
Correct the network path before repeatedly running reconfigure. Use an ACME staging endpoint while troubleshooting to avoid production rate limits.
The browser reports an incomplete chain
Rebuild the certificate file with the server certificate first, followed by every intermediate and then the root when required by the issuing authority. Reload NGINX after replacing the file and verify the live endpoint; inspecting only the local file cannot reveal whether the running service loaded the new chain.
The certificate is for the wrong name
Inspect the subject-alternative-name list with OpenSSL. Request a certificate containing the exact canonical hostname, update DNS or external_url consistently, and remove stale alternate names from bookmarks and integrations. A wildcard certificate can cover subdomains only within the scope stated by its name; it does not automatically cover the bare parent domain.
Reconfigure fails because the key is encrypted
Set gitlab_rails['nginx']['ssl_password_file'] to a protected passphrase file, or replace the key with one managed according to your organization's key-protection policy. NGINX cannot stop during reconfigure and wait for an interactive password.
Free tools Windows power users keep installed
One-click scans. No signup required.
Users see an HTTPS loop or 422 response behind a proxy
Confirm that the proxy sends Host, X-Forwarded-Ssl, X-Forwarded-For, and X-Forwarded-Port with the public values. Keep external_url set to HTTPS while bundled NGINX listens on HTTP. Remove conflicting redirect rules and prevent direct access to the backend that would bypass the trusted proxy.
The new certificate is not visible
Check the file path, permissions, hostname-based filename convention, and chain contents. For content-only changes, run sudo gitlab-ctl hup nginx; also run sudo gitlab-ctl hup registry when the registry certificate changed. If configuration values changed, use sudo gitlab-ctl reconfigure instead.
Helm administrators are looking for Omnibus files
Stop looking for /etc/gitlab/gitlab.rb or /etc/gitlab/ssl in a pod. Inspect the ingress or Gateway resource, the referenced Kubernetes TLS secret, and cert-manager events. The deployment model determines the certificate path.
Security and operational considerations
Understand HSTS
GitLab documents HTTP Strict Transport Security (HSTS) as enabled by default for the main application, with a default max_age of 63,072,000 seconds, or two years. HSTS tells compatible browsers to use HTTPS for the hostname during that period. Test the complete HTTPS path, including subdomains and administrative access, before enabling any policy that could make an incorrectly configured HTTP endpoint difficult to reach.
Quick wins for a faster PC:
Fix the driver behind crashes, sound loss and screen glitchesFind Drivers →Repair Windows errors before they cause bigger problemsFix Now →Monitor expiry and renewal
Automatic ACME renewal removes routine copying but does not remove the need for monitoring. Alert before the 90-day certificate lifetime is exhausted, record the last successful renewal, and test the external endpoint rather than trusting only a local file timestamp. For manual certificates, schedule renewal, chain assembly, permissions, reloads, and post-renewal OpenSSL checks as one runbook.
Protect private keys and proxy trust
Mode 600 on a private key is a baseline, not a complete security plan. Limit shell access, backups, configuration-management logs, and proxy hosts that can read the key. On a reverse-proxy design, allow only trusted proxy addresses to reach the HTTP backend and ensure clients cannot supply forged forwarding headers.
Which SSL method should you use?
| Decision question | Choose Let's Encrypt/ACME | Choose a manual or internal certificate | Use a reverse proxy |
|---|---|---|---|
| Can the hostname resolve publicly and receive validation traffic? | Yes; ports 80 and 443 are reachable. | No, or policy requires a private CA. | The proxy owns public DNS and validation. |
| Who renews the certificate? | GitLab's ACME integration. | Your CA, automation, or administrators. | The proxy or its certificate-management system. |
| Where does TLS terminate? | Bundled Omnibus NGINX by default. | Bundled NGINX with files in /etc/gitlab/ssl. |
The external proxy or load balancer. |
| What is the main operational risk? | DNS, port reachability, and ACME rate limits. | Missed renewal, wrong chain order, or key permissions. | Incorrect forwarded headers or a backend exposed directly. |
| Best fit | Public, conventional internet-facing GitLab. | Private, air-gapped, regulated, or externally managed PKI environments. | Organizations centralizing TLS, WAF, routing, or load balancing. |
For a normal public Omnibus installation, start with the HTTPS external_url, verify public DNS and ports 80/443, and let ACME manage renewal. Select manual certificates when public validation is impossible or your PKI requires it. Select proxy termination when another device is already the controlled public entry point, and then treat forwarded headers and backend isolation as essential parts of the HTTPS configuration.
Quick Recap
Product prices and availability are accurate as of the date/time indicated and are subject to change. Any price and availability information displayed on Amazon at the time of purchase will apply.
Recommended Free Tools

