Halloween DealsAmazon USHalloween week deals: useful picks before month-endAmazon US: current deals, useful picks and tech finds.Check DealsWindows FixRecommendedWindows errors stealing your time? Find the fix fastScan stability, cleanup and performance issues.Fix NowHalloween DealsAmazon USOctober picks are moving - compare before checkoutAmazon US: current deals, useful picks and tech finds.See Picks×
Skip to content
World desk11 min

How to Set Up Multiple SSL Certificates on One IP With Lighttpd

Use Lighttpd’s SNI support to serve different HTTPS certificates for multiple domains on one IP. This guide covers the exact configuration pattern, certificate files, renewal, validation and fallback behavior.
Special offer. See more information about Outbyte and uninstall instructions. Please review EULA and Privacy policy.

Lighttpd can serve different HTTPS certificates for many domains on one IP address by using TLS Server Name Indication (SNI). Enable TLS on the port 443 socket, assign a deliberate default certificate, then override ssl.pemfile and ssl.privkey inside an $HTTP["host"] conditional for each hostname.

The arrangement works because an SNI-capable client sends the requested hostname during the TLS handshake. Lighttpd uses that name to choose the certificate before the encrypted HTTP request is processed. Clients that do not send SNI, or requests for names that do not match a conditional, receive the certificate configured on the 443 socket.

As an Amazon Associate I earn from qualifying purchases.

Special offer. See more information about Outbyte and uninstall instructions. Please review EULA and Privacy policy.

How Lighttpd chooses a certificate

HTTPS begins with a TLS handshake, before the browser sends an HTTP Host header. SNI adds the hostname to that handshake. Lighttpd reads the SNI name and selects the certificate associated with the matching host condition. This is what allows several domains to share one address and port.

The default certificate is not optional. A client may omit SNI, an old monitoring tool may not support it, or a user may request a hostname you have not configured. In each case Lighttpd falls back to the certificate on the $SERVER["socket"] == ":443" block. Choose a certificate for a hostname you control and expect to be the safest fallback; do not assume every client will receive a domain-specific certificate.

#1 Best Overall
Sale
TOZO A1 Wireless Earbuds Bluetooth 5.3 Light Weight in Ear Headphones | IPX5 Waterproof,2 Mics for AI Calls,Immersive Premium Sound Bass Headset with Charging Case,32 EQ via App Black
  • [Ultra-Lightweight Ear Buds Designed for Small Ears] Each earbud weighs only 3.7g and features a compact, ergonomic in-ear design made especially for small ears. Secure, low-profile, and comfortable for workouts, all-day wear or overnight sleeping.The ultra-slim profile sits flush in your ear with no hard edges poking or rubbing, so you can even sleep on your side without discomfort.
  • [Immersive Stereo Sound with TOZO OrigX Technology] TOZO OrigX tuning delivers clear vocals, balanced mids, and natural stereo sound for music, podcasts, and videos.
  • [Long Battery Life for Daily Use] Get up to 7 hours of playtime on a single charge, with up to 32 hours total using the charging case—ideal for workdays, commuting, and extended listening sessions.
  • [Bluetooth 5.3 & Stable Connection] Bluetooth 5.3 provides fast pairing, stable wireless performance, and reduced dropouts as you move around home or office.
  • [Deep Bass with Clear Vocals] High-performance drivers produce punchy bass while keeping vocals clean and detailed for everyday listening.

Requirements and version checks

  • A Lighttpd installation with mod_openssl available and loaded.
  • One HTTPS listener on port 443, or an equivalent address-specific 443 listener.
  • A certificate and matching private key for the default hostname and for every additional hostname.
  • DNS records for each name pointing to the shared IP address.
  • Firewall and upstream network rules allowing TCP 443. If you use HTTP-01 certificate validation, TCP 80 must also reach Lighttpd.
  • A Lighttpd version that supports the directives used in the configuration. The official references document the ssl.* directives in mod_openssl from Lighttpd 1.4.46 onward; ssl.privkey is documented as available from 1.4.53. Check the installed version before deploying.

Run the version command used by your operating system, for example lighttpd -v, and compare it with the documentation for that release. Configuration inheritance and certificate-refresh behavior have changed in later releases, so use the reference that matches the binary actually running.

Prepare certificate and key files

Use a full chain for each certificate

ssl.pemfile must contain the server certificate followed by any required intermediate certificates, in the correct order. A Let’s Encrypt deployment normally uses fullchain.pem for this directive. Do not substitute a file containing only the leaf certificate when clients need an intermediate to build a trusted chain.

Special offer. See more information about Outbyte and uninstall instructions. Please review EULA and Privacy policy.

If the private key is not included in the PEM file, set ssl.privkey to the separate key file. Keeping keys separate is the clearest arrangement and matches the current Lighttpd examples. Never place a private key in a file readable by unprivileged users, and ensure the Lighttpd process can read it after startup or reload.

Match names exactly

Each certificate must cover the hostname the client requests. Treat the apex and www names as separate requirements: a certificate for example.org does not automatically cover www.example.org, and the reverse is also true unless both names appear in the certificate’s Subject Alternative Name extension. The same rule applies to names such as mail.example.org and api.example.org.

Use a predictable directory layout

A layout that keeps each hostname’s files together reduces path mistakes:

Rank #2
Sale
Smart Watch for Men Women Compatible with iPhone Samsung Android Phone 1.69 inch Full Touch Screen IP68 Waterproof Bluetooh Fitness Tracker Heart Rate/Sleep Monitor (Black)
  • 【IP68 Waterproof Multifunctinal Smart Watch】Torjalph fitness activity tracker smart watch is IP68 waterproof technology ,you can wear it when swimming,handwashing,it's rain-proof which means that you perform multiple exercise modes outside without worrying about sweat or rain corroding your fitness smart watch,and this watch equipped with a 230 mAh large capacity battery magnetic charging ,and this sports activity tracker watch can be used 5-7 days If fully charged.
  • 【Larger 1.83'' Full Screen Watch & Multi-dial Selection】1.83 inch full HD color touch screen smart watch for men / women provides excellent 240*284 resolution image quality ,This Bluetooth smart watch offers a better touch experience and remarkable immersion and ,more than 200 watch faces for you to choose from App"Da Fit ", you can change the dial style according to your mood to wear keeping the world on your wrist
  • 【Accurate Activity Tracker Smart Watch 】sports watch activity tracker uses sweat and dust resistant breathable silicone strap, our Fitness Tracker Smart Watch for Android iOS Phones supports 12 sports modes,walking,running,bicycle,swimming,badminton,basketball,football,rope skipping. This bluetooth calls smart watch for men women is lightweight and stylish, bringing more convenient and relaxing sports experience while also providing more protection.
  • 【Your 24 Hour Personal Daily Health Monitor】Fitness watch for women men full touch screen IP67 waterproof bluetooth smartwatch for Android iOS Phones with heart rate blood pressure monitor multifunction Andriod smart watch with steps counter sleep monitor sports fitness watch, monitoring blood oxygen saturation allows you to understand your physical condition in real time to track fitness progress ,to know your health status in time.
  • 【More Functions Bluetooth Call Smart Watch】This fitness activity smart watch full screen for iPhone and Android phones includes a bunch of new features including:The bluetooth smart watch can hang up the phone, receive and display WhatsAPP /Text /Facebook /Twitter /Messenger reminder.Support sedentary reminder, alarm clock, stopwatch, timer,weather information,music control, remote camera control compatible with Android 5.0 and above or iOS 9.0 and above smartphones.
/etc/lighttpd/ssl/default.example.pem
/etc/lighttpd/ssl/default.example.key
/etc/lighttpd/ssl/www.example.org/fullchain.pem
/etc/lighttpd/ssl/www.example.org/privkey.pem
/etc/lighttpd/ssl/mail.example.org/fullchain.pem
/etc/lighttpd/ssl/mail.example.org/privkey.pem

The filenames are not special. What matters is that every path in the Lighttpd configuration points to the intended certificate and matching key.

What’s actually slowing this PC down?

Pick the symptom - the matching free tool is one click away.

Special offer. See more information about Outbyte and uninstall instructions. Please review EULA and Privacy policy.

Configure SNI in Lighttpd

Put the TLS settings on the 443 socket, then add one host conditional per additional name. This is the basic pattern:

server.modules += ("mod_openssl")

$SERVER["socket"] == ":443" {
    ssl.engine = "enable"
    ssl.pemfile = "/etc/lighttpd/ssl/default.example.pem"
    ssl.privkey = "/etc/lighttpd/ssl/default.example.key"
}

$HTTP["host"] == "www.example.org" {
    ssl.pemfile = "/etc/lighttpd/ssl/www.example.org/fullchain.pem"
    ssl.privkey = "/etc/lighttpd/ssl/www.example.org/privkey.pem"
}

$HTTP["host"] == "mail.example.org" {
    ssl.pemfile = "/etc/lighttpd/ssl/mail.example.org/fullchain.pem"
    ssl.privkey = "/etc/lighttpd/ssl/mail.example.org/privkey.pem"
}

Replace the example names and paths with your own. Keep ssl.engine = "enable" and the default certificate in the socket block. The conditional blocks override only the certificate and key for their matching host.

Add every name that clients can request

If users can reach both example.org and www.example.org, decide whether they should share a certificate or redirect one name to the other. If they have separate certificates, create separate conditionals. A conditional for www.example.org does not match example.org.

Be precise with spelling, punctuation and internationalized-domain handling. A request that does not match the configured host string uses the default certificate. Keep the default deliberately configured rather than relying on whichever file happened to be present during an earlier deployment.

Special offer. See more information about Outbyte and uninstall instructions. Please review EULA and Privacy policy.
Rank #3
New Bee Guitar Cable 10ft Electric Instrument Bass AMP Cord
  • [Low Noise High Fidelity] New bee guitar cord with 22AWG oxygen-free-copper center conductors provides enhanced signal transfer, the PVC insulation material and the high-density stranded copper double shield provide noise rejection for quiet operation
  • [Ideal for Choice] New bee 1/4 straight and right angle metal connectors, ensures a secure connection in any instrument, pedal, or amp jack. L shape great fro on stage guitar stands
  • [Wide Compatible] Suitable for mixer, power amplifier, microphone, effector, decoder, equalizer, electoronic organ, electric guitar, electric bass and other electronic equipments. Widely used in the installation of smart home, karaoke speaker, professional stage audio, etc
  • [Easy Disassemble] Making incidental repairs quick and easy! Very nice, flexible cable
  • [Dont Hesite to Order] 24 hours customer services and professional technology team are standing by

Use an address-specific socket when required

The example uses :443, which binds port 443 according to the host’s normal Lighttpd socket configuration. The documented Let’s Encrypt example uses 0.0.0.0:443 to bind all IPv4 interfaces:

server.modules += ("mod_openssl")
$SERVER["socket"] == "0.0.0.0:443" {
    ssl.engine = "enable"
    ssl.privkey = "/etc/letsencrypt/live/www.example.com/privkey.pem"
    ssl.pemfile = "/etc/letsencrypt/live/www.example.com/fullchain.pem"
    ssl.openssl.ssl-conf-cmd = ("MinProtocol" => "TLSv1.2")
}

Use the socket form appropriate for your machine and existing Lighttpd configuration. Do not create two listeners that compete for the same address and port.

Deploy the configuration safely

  1. Back up the active configuration. Copy the main Lighttpd configuration and any included files before editing. Record which service manager starts the daemon so you can reload it consistently.
  2. Confirm the module is loaded. Add mod_openssl to server.modules if it is not already present. Loading the module twice is unnecessary; follow the module-loading convention of your distribution.
  3. Create or verify the certificate files. Check that each PEM contains the leaf certificate and intermediates in order, and that each private key belongs to that certificate.
  4. Add the 443 socket block. Enable TLS and specify the default certificate and key. This block is the fallback for non-SNI and unmatched requests.
  5. Add host conditionals. Create one $HTTP["host"] block for every additional hostname and set both ssl.pemfile and ssl.privkey when the key is separate.
  6. Validate syntax before reloading. Use Lighttpd’s configuration-test mode, commonly lighttpd -tt -f /etc/lighttpd/lighttpd.conf. Substitute your distribution’s actual configuration path. Fix every parse error before touching the running service.
  7. Reload or restart the daemon. Reloading avoids dropping established connections where the service manager supports it. A full restart may be necessary after a packaging or module change. Use the command appropriate to your init system.
  8. Inspect the service log. Look for PEM parsing errors, unreadable key files, address-binding failures and messages indicating that the OpenSSL module could not initialize.

Let’s Encrypt certificates and renewal

Lighttpd’s documented Let’s Encrypt procedure uses Certbot. In that pattern, ssl.privkey points to privkey.pem and ssl.pemfile points to fullchain.pem in the certificate lineage directory. The example also sets OpenSSL’s minimum protocol to TLS 1.2 with ssl.openssl.ssl-conf-cmd.

HTTP-01 validation requires the requested hostname to answer the challenge on port 80. Make sure DNS for every name being issued resolves to the server, TCP 80 is reachable, and Lighttpd routes the challenge path as required by the Certbot method you selected. A site that works on 443 can still fail issuance if port 80 is blocked or routed elsewhere.

Special offer. See more information about Outbyte and uninstall instructions. Please review EULA and Privacy policy.

Renew without serving stale certificates

  1. Run the renewal process using the same certificate lineage that Lighttpd references.
  2. Confirm that the renewed fullchain.pem and privkey.pem files are readable by the daemon.
  3. Reload or restart Lighttpd after renewal according to your deployment’s process. Updating files on disk does not guarantee that an already-running process has reopened them.
  4. Connect to each hostname and inspect the live certificate after the reload. Do not rely only on the renewal command’s success message.

Because several conditionals may reference different certificate lineages, renewal must be checked per hostname. A successful renewal for one domain does not update another domain’s certificate.

Rank #4
BSIMB 15.6" Digital Family Calendar & Chore Chart, No Subscription Fees
  • Digital Family Calendar: BSIMB digital calendar wall touch screen puts an end to your chaotic life. Designed for busy families, the digital calendar keeps you organised and in step with your family. Assign different colours and tasks to each family member to make family scheduling easier and more intuitive.
  • Easy Setup and Auto-Sync: Plug in, connect to WLAN and auto-syn your electric calendar in minutes. Digital wall calendar compatible with Google calendar, iCloud calendar, Outlook calendar, Cozi calendar and Yahoo calendar. Add events directly on the device or through the ecalendar app. Electronic calendar stays current whether you're at work or traveling—no manual updates needed.
  • All-In-One Home Assistant: Smart calendar builds habits and encourage independence with personalised chores. Display daily meal plan to reduce the daily ‘What's for dinner?’ stress. To-do lists keep track of everything you want. Turning chores into valuable achievements with stars and rewards, making life easier and more enjoyable.
  • Manage Anytime Anywhere: BSIMB electronic calendar for family stay connected with the powerful ecalendar app. Access and manage your digital wall calendar anytime, anywhere with free features like stars & rewards, photo screensaver, chore charts, meals plans, to-do lists etc. Electronic planner paid features like Magic Import tailor advanced tools for users with special needs.
  • Stay in Touch with Loved Ones: Share photos or videos from your phone to electronic wall calendar with app, instantly update your life moment, and keep in touch with your family, especially those who are far away; you can also surprise your smart calendar digital wall by sending him a wish card; it's also great for keeping tech-illiterate elders in touch with the youngsters.
Independent reader supportYour contribution helps us test, update, and keep practical guides available for everyone.Support on Ko-Fi

Test each certificate and the fallback

Test from a machine that can reach the public address. Testing by IP alone is not enough because SNI depends on the hostname sent by the client.

Check a named host with OpenSSL

openssl s_client -connect 203.0.113.10:443 -servername www.example.org -showcerts

Replace the example address and hostname. The -servername option sends SNI. Inspect the leaf certificate’s subject and Subject Alternative Names, then inspect the intermediate certificates and verification result. Repeat with mail.example.org and every other configured name.

Check browser-style routing with curl

curl -v --resolve www.example.org:443:203.0.113.10 https://www.example.org/

--resolve pins the hostname to the chosen address while preserving the hostname used for TLS and HTTP. This is useful before public DNS changes and helps distinguish certificate selection problems from DNS problems.

Special offer. See more information about Outbyte and uninstall instructions. Please review EULA and Privacy policy.

Test an unknown name and an SNI-less connection

Connect with an unconfigured hostname and without a server name to verify that the intended default certificate appears. An SNI-less test can be made with an OpenSSL client by omitting -servername:

openssl s_client -connect 203.0.113.10:443 -showcerts

The fallback result should be expected and documented. If it exposes an unrelated certificate, change the default on the 443 socket rather than assuming all clients will send SNI.

Use a repeatable validation checklist

  • Module: mod_openssl is loaded and the configuration test passes.
  • Socket: The intended 443 socket has TLS enabled and a default ssl.pemfile.
  • Host names: Every conditional uses the exact requested spelling, including apex and www variants.
  • Chain: Each PEM contains the server certificate followed by the required intermediates in order.
  • Key match: The private key corresponds to the certificate in the same host block.
  • Live result: A named connection presents the expected certificate and chain for every hostname.
  • Fallback: Unknown-host and SNI-less tests present the deliberately selected default.
  • Renewal: If Certbot is used, the HTTP-01 challenge path works on port 80 and a post-renewal reload has been tested.

SNI versus one IP address per certificate

SNI is the normal way to consolidate HTTPS sites on one IPv4 address, but separate addresses remain a valid compatibility option. The trade-offs are different:

Consideration SNI on one IP Separate IPs
Client compatibility Requires the client to send the hostname in the TLS handshake. Non-SNI clients receive the default certificate. Works with clients that do not send SNI because each certificate is bound to its own socket and address.
Address use Several hostnames share one IPv4 address and port. Each certificate or domain needs its own address and corresponding socket.
Certificate selection Uses a default certificate plus host conditionals that override ssl.pemfile and ssl.privkey. Uses separate $SERVER["socket"] blocks, each with its own certificate settings.
Failure behavior An omitted or unmatched SNI name receives the default certificate. The address determines the certificate, so there is no hostname-based fallback between sites on different addresses.
Scalability Convenient when many domains share one server and modern clients are expected. Consumes additional addresses and creates more network and socket administration.

Choose separate addresses when you must support a known population of legacy non-SNI clients or need strict address-level isolation. For ordinary public websites, SNI avoids unnecessary IPv4 consumption and keeps the deployment on one HTTPS listener.

Special offer. See more information about Outbyte and uninstall instructions. Please review EULA and Privacy policy.

Common failures and fixes

The browser reports the wrong certificate

  • Verify that the browser actually connected to the intended IP; stale DNS, a proxy or a load balancer may terminate TLS elsewhere.
  • Check the hostname spelling in the conditional. A block for www.example.org will not match example.org.
  • Confirm the client sends SNI. If it does not, the default certificate is the designed result.
  • Inspect the running process after a reload. Editing a file without reloading Lighttpd leaves the old certificate in memory.

The certificate is correct but clients report an untrusted chain

Rebuild the PEM with the leaf certificate first and the required intermediate certificates after it. Do not reverse the order or omit an intermediate that the client does not already possess. Test the complete chain with an external client after reloading.

Lighttpd fails to start after adding a key

  • Run the configuration test and read the first reported error; later messages may be consequences.
  • Check that the key path exists, permissions allow the daemon to read it, and the key is in a format supported by the installed OpenSSL and Lighttpd versions.
  • Make sure the certificate and key belong together. A mismatched pair can prevent TLS initialization or cause handshake failures.
  • Verify that the 443 address is not already occupied by another process or duplicate Lighttpd socket.

One hostname renews but another still expires

Each conditional may point to a different certificate lineage. Confirm the renewal job covers every name, then verify each ssl.pemfile and ssl.privkey path and reload Lighttpd after renewal. A renewed file is not necessarily the file referenced by another host block.

HTTP-01 validation times out

Check the DNS record, firewall, NAT or load-balancer route for port 80. The challenge request must reach the server and hostname used by the certificate request. HTTPS availability on port 443 does not satisfy an HTTP-01 challenge by itself.

Operational and security practices

  • Keep private keys outside web document roots and restrict their permissions to the account or group that must read them.
  • Use separate key files and explicit paths so a certificate replacement cannot accidentally overwrite a key.
  • Track certificate expiration dates per hostname, not just per server. SNI configurations often contain several independent renewal schedules.
  • Document the default certificate and test it after every change. It is the certificate exposed to non-SNI clients and unknown names.
  • Keep Lighttpd and its OpenSSL library maintained, and review the TLS protocol policy appropriate to your installed version. The documented example sets a minimum of TLS 1.2; apply that setting only where supported by your release and compatibility requirements.
  • After changing certificate files, perform both a configuration test and a live handshake test. A syntactically valid configuration can still point to the wrong hostname or chain.

Complete implementation sequence

For a new multi-domain server, the shortest reliable sequence is:

Free tools Windows power users keep installed

One-click scans. No signup required.

Special offer. See more information about Outbyte and uninstall instructions. Please review EULA and Privacy policy.
  1. Point every domain’s DNS record to the shared IP and confirm the records from the deployment network.
  2. Obtain a certificate covering each exact hostname, or obtain certificates whose Subject Alternative Names cover the names you will serve.
  3. Store each full chain and private key in a protected directory.
  4. Load mod_openssl, enable TLS on the 443 socket, and set the deliberate default certificate.
  5. Add one $HTTP["host"] conditional per additional hostname, with the corresponding chain and key.
  6. Run Lighttpd’s syntax check, correct permissions and paths, then reload the service.
  7. Use an SNI-aware OpenSSL or curl test for every hostname.
  8. Test an unknown hostname and an SNI-less connection to confirm fallback behavior.
  9. If certificates come from Certbot, verify port 80 challenge routing and arrange a post-renewal reload.

Once these checks pass, Lighttpd will serve the matching certificate for each SNI hostname on the shared IP while retaining a known certificate for clients that cannot identify themselves during the TLS handshake.

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.

Leave a Reply

Your email address will not be published. Required fields are marked *

Special offer. See more information about Outbyte and uninstall instructions. Please review EULA and Privacy policy.

More from the Wire

  1. World desk4 min
    How to Spot an AI Voice Scam Before Sending MoneyDon’t rely on how a caller sounds. Pause, call back through a known number, and verify the emergency with another trusted person before sending money.
  2. Mountain View desk4 min
    Google’s SynthID Detector: How to Check AI-Generated Images, Video and AudioGoogle’s SynthID Detector looks for an embedded watermark in supported images, video and audio. Here is what its results do—and do not—show.
  3. Redmond desk20 min
    How to create a link to File or Folder in Windows 11Windows 11 gives you several ways to point to a file or folder without moving or duplicating it. You can create a desktop shortcut,…
Recommended PC Tool
Recommended PC Tool
Crashes, No Sound, or Screen Glitches?Free driver scan
Windows Errors? Fix Them Before They SpreadFree repair scan

Two free Windows tools

One Free Minute Could Fix That PC

Before you go - each of these free tools takes about a minute and tackles what quietly slows a Windows PC down.

Special offer. View Outbyte info, uninstall instructions, EULA, and Privacy Policy.