Let's Encrypt is SO GOOD, and so easy to configure. I use the EFF's client app (certbot) to install the certs on my server.
Even many shared hosts support Let's Encrypt now, as there's a decent cPanel plugin that makes it a "one click" configuration.
Implying competitors even try to compete. Now compare to what Let's Encrypt does.
It's not only free, it's much better in terms of usability, like not kidding.
The short of it (spoilers: it's Let's Encrypt):
certbot because the author is using a release of Ubuntu that doesn't have it in its repo for some reason
crontab -e and set a monthly job for renewing the cert
Really Simple SSL because of course you're using WordPress
Update Google Analytics for https
My only gripe with certbot is that it fails if you're not on the specific platforms that they've defined, even if you meet all of the software requirements. The documentation mentions that there's some way to bypass it, but it doesn't bother documenting how other than just telling you what the dependencies are. I went with getssl which fortunately doesn't require pulling in a bunch of python dependencies, or any really aside from curl and friends.
The author should probably also beware of the certificate validity length: mine is two days shy of a full 3 months, so they may find that their certificate is invalid for a few days at a time unless they shorten the length.
Looks like it's a let's encrypt cert. Those expire every 90 days. Also looks like the site is hosted with Digital Ocean. Probably either a misconfiguration of Let's Encrypt with something like Certbot or the cert was manually loaded. If Certbot ACME client isn't setup the Electronic Frontier Foundation which publishes the software has great instructions available here https://certbot.eff.org/.
Why not re-run certbot from scratch, following the step-by-step questionnaire?
My stack: https://certbot.eff.org/lets-encrypt/centos6-apache.html
I'm not sure why a configuration would take most of a week to setup, the workflow takes about 30 seconds + cron job.
Here are all instructions: https://certbot.eff.org/all-instructions
Edit: I'd also recommend archiving stable pi images/configurations - I do this for distribution/replication, but it's also useful for configuration management/version control.
We think that there are a whole set of privacy technologies that should apply across our increasingly digital world -- just to preserve the privacy we’ve historically depended on to think and participate in a democratic society. This is why EFF has developed free and open source privacy and security tools like Certbot, and Privacy Badger. The broader point, which we think matches your comment is that cash (of any sort) has privacy-preserving characteristics as well as benefits for disadvantaged people. We’ve always been able to tolerate the downsides of cash. That shouldn’t change with cash that’s a digital artifact. We’d appreciate your help in helping us in the fight. - Jon
You can get a certificate issued for the new server by doing a DNS challenge instead of an HTTP challenge. You can do this manually instead of auMovetomatically if you don’t want to set up the plugins and automation for your DNS provider - all you will need to do is create a text record in DNS. Documentation; https://certbot.eff.org/docs/using.html#manual
Doing the DNS challenge means that you’ll be able to get a certificate in place on the new server before you have moved the A record for the domain, and you can have both servers up and running at the same time for a zero downtime migration.
Steps for a relatively easy migration
This way you had zero downtime, and were just in a read only mode during the migration. Because the TLA certificate was pre-staged, you were able to get any issues on the new server worked through before actually doing the migration.
You could also throw a test migration in there while the old server is still serving the site. No read-only, set up a new domain or sub domain and so the migration. Work through and server configuration issues, and then re-do the migration when you’re ready. That is what I would probably do personally.
If you use certbot it can work "automatically" with nginx to create the necessary changes to the nginx.conf to use certs. If you use docker for any of your services I'd also take a look at traefik.
I know you said you don't want solutions to your caddy problem, but I've never heard good things about godaddy so switching your DNS might help, and the aforementioned certbot works very well with cert management.
Look into Let's Encrypt DNS challanges, it's a method of provisioning let's encrypt certs using only DNS. You can host the same domains (movies, code) both internally and externally (blank). Then let's encrypt can write and read it's challenges from public dns, giving you certs on hosts with private IPs.
Certbot has a number of plugins for popular dns hosts: https://certbot.eff.org/docs/using.html?highlight=dns#dns-plugins
This is far easier than what you're trying to do.
You can use the dns-01 challenge type to request certificates for internal services, but you still need to purchase a public domain and use a supported dns provider. If you use certbot, here's the providers they support
Yep. "Let's Encrypt" has auto renewal and an easy to use CLI tool called certbot
. They have guides for many OSs (mostly Linux distributions, but not just REHL, CentOS, Debian and Ubuntu but also more rare ones on the server side like Arch Linux or MacOS) and server applications (Like Apache and Nginx). You can read more here: https://certbot.eff.org/
virtual private servers can run Certbot, and you can issue a certificate for free with the Let's Encrypt CA. Ask your host for directions or hire a system administrator to make it happen for you.
If you give me the $296 I'll be happy to do this for you.
you can just use scp and ssh in certbot's post-hook or in the cron job itself.
copy the files, reload the service, done. my central bastion is doing it for every server, makes management easy and keeps secrets secret.
that's what you'll have to do even if you use ansible anyway, no need to recommend the big orchestrator for this.
even though certbot and bash is all you need I recommend acme.sh instead, it's more reliable and easier to script than certbot (plus no other dependencies than bash itself).
More information would be needed for a certain answer, but if you want certificates for https, certbot is probably the easiest option. https://certbot.eff.org/
After you've obtained https certificates, you just have to configure your server/reverse proxy (probably apache or nginx) to redirect port 80 traffic to port 443, aka redirect non encrypted traffic to encrypted. Certbot can generally do this automatically, just look up instructions for your technology stack.
As long as you can post a file to https://domain.com/.well-known/acme-challenge, you can manually complete domain validation.
It's more work, but not much.
There is some guidance here. The basic form of the command would be something like
> certbot renew --pre-hook "service nginx stop" --post-hook "service nginx start" --noninteractive --agree-tos
where the exact form of the pre-hook and post-hook commands will depend on your variety of Linux.
It is preferred to call certbot daily. It will happily determine that the certificate does not need renewing, so there is no down side to this. The advantage is that if one invocation fails, perhaps due to network problems, the certificate will be renewed the next day without intervention by the sysadmin.
Just to clarify - Arch is supported, as is Debian, Ubuntu and many other distros which have certbot in the repos. If you are on a distro that does not yet have it in the repos (Debian Jessie for example) it can be downloaded and run straight. What your complaint is about is that on Arch your webserver (apache/nginx) is not supported by the auto configuration plugin that would configure your site to serve SSL encrypted traffic by default. Personally I distrust the automatic config anyway as I need to go back and check the site configuration afterwards anyway...
certonly
is standard. Even if you use another SSL provider, you will still need to configure your site to make use of the cert. The simple way to avoid the listening issue is to temporarily stop the service listening on 80 or 443, alternatively certbot allows you to use the webroot plugin as the challenge type, which places a file in the root of the website that can be served without taking your webserver offline.
I use Let's Encrypt and certbot
to successfully automate all of my https sites and certificate generation, with practically no input from me
You can't get the certificate from their website manually, you need to use a program to communicate with their API. There are many choices for this, such as Certbot and dehydrated.
The host I am using isn't that developer friendly, kinda regretting that choice already and this is the development part that I am not used to dealing with so I kinda gave up on it at first. Will look more into it.
Nginix is probably your best bet, simple config, good performance, can handle proxying HTTPS traffic to an HTTP server. You can use Certbot to handle lets encrypt certs, it walks you through the process with a few prompts, and the I think you can set it up to auto-renew.
You can use staging environment to test your setup. This way you won't exceed the limit.
--test-cert, --staging Use the staging server to obtain test (invalid) certs; equivalent to --server https://acme- staging.api.letsencrypt.org/directory (default: False)
Moin, ich glaube zum Thema Hoster wurde jetzt bereits einiges gesagt. Ich hab allerdings noch einen Tipp um die Arbeit mit den SSL-Zertifikaten ein wenig einfacher zu machen. Sofern du Zugang über SSH hast, schau dir mal Certbot an. Damit verwalte ich alle meine Zertifikate für mehrere Domains und nach der simplen Erstinstallation benötigt man mehr oder weniger einen Befehl in der Konsole um neue Zertifikate zu erstellen oder bestehende zu aktualisieren.
For non pfsense stuff if you go here and choose your OS details: https://certbot.eff.org/instructions
Then click the Wildcard tab, it'll show the instructions for DNS challenge.
For pfsense I think you just need the acme package if it's anything like opnsense, then it's just filling out some settings and it'll take care of the rest.
Kind of, though I admittedly don't have a whole ton of experience with certbot beyond manually generating some certs, however it appears as though it can also operate in an automated way for some software.
For example: https://certbot.eff.org/lets-encrypt/ubuntufocal-nginx for nginx.
It doesn't appear as though certbot can handle IIS, though. If I were going to split between IIS and some other web server (apache/nginx on Linux), I'd probably use win-acme for the Windows IIS and then certbot for the apache/nginx.
Depending on what software you're using, it may even have built in ways to renew certs. For instance, Proxmox can generate certs using let's encrypt with DNS validation now, making it so it doesn't have to have any public-facing exposure for the HTTP validation.
If your software isn't covered, or your configuration won't allow for it, you could use certbot in a more "manual" way by creating a script that generates the certs with certbot, and then configures your setup with them. IE: I've thought about doing this for our Digium phone system, which doesn't support let's encrypt.
I use letsencrypt/certbot with a DNS challenge - there's a few options for certbot to do fully automated DNS based issuance as long as you own the domain you're trying to issue certificates for. In my case I've got a zone of my personal domain as my internal network domain name and that zone is delegated to luadns on the outside, with no permanent records inside. Certbot can spin up appropriate temporary records to issue certificates for the domain on the public DNS system without any of the internal services needing to be accessible from the outside.
It definitely doesn't. It uses port 80 to verify the domain. I have HAproxy setup for it to forward port 80 to various subdomains specifically for certbot. https://certbot.eff.org/faq#can-i-issue-a-certificate-if-my-webserver-doesn-t-listen-on-port-80
Just SSH into VM and install certbot. https://certbot.eff.org/lets-encrypt/ubuntuxenial-nginx.html. For beginners I recommend using cloudflare and you can do it easily.
It is essential! Google is calling for HTTPS everywhere and will actually begin lowering search rankings for sites that do not, by the end of 2018 IIRC.
Depending on your provider, meaning whether you maintain your server yourself or use a third party to do this, you may want to look into Let's Encrypt, who just became an approved certificate provider. I run a linux server and it could not have been easier to set this up using a Let's Encrypt certificate using Certbot.
I used to dread setting up HTTPS ... did it just often enough to mostly forget how I did it last time.
EFF's certbot makes it stupid-simple to implement. No reason for beginners not to add HTTPS.
Did you try this (Apache only)? https://certbot.eff.org/faq/#can-i-issue-a-certificate-if-my-webserver-doesn-t-listen-on-port-80
Sorry I can't help you better, I personally have no experience with HTTPS certs
With LE, automated is the default method for cert provisioning. certbot is what you want. You'll want a one time provisioning script (super basic bitch shell script will do it) and then the renewal command run regularly by cron. The renew command will take no action if your expiry isn't in the next 30 days so it's safe to run it as frequently as you like.
certbot has been pretty great so far.
As for Wordpress, SSL/TLS would be terminated/resolved by the webserver, so there shouldn’t be anything specific to Wordpress that’s mandatory. That said, if I know I’m using https across the whole site (and why not, in this day and age!) I generally clean up http:// links by searching with wp-cli (with WP db search “<terms>”) and once I see the string in context, I swap it out for the https:// URL with wp search-replace “<find>” “<replacement>”. (These are off the top of my head so may want to double check the docs or use —help or —dry-run first!)
Certbot will ask you if you’d like it to update your nginx configs for you to add in a site-wide https redirect anyway, but rewriting the http links to https in the db saves a 301 hop (not sure if it still applies in 2018 but afaik a single 301 is fine for SEO but having a redirect to another redirect can be penalized. I think. )
Obviously you’ll only want to overwrite the links to the site itself, and not just any old http link to external resources since they may not serve on :443/https.
And if you just want to run a basic web server, eff.org has a little tool called "certbot" that will download and install new Let's Encrypt certs for you every 90 days. Free SSL certs!
Certbot - Uses LetsEncrypt to automagically sign certificates for free. (Other clients are available other than Certbot)
It can get a bit tricky to sign certificates on the more specialist appliances and the like, so we also use an nginx reverse proxy for stuff that can't be easily directly updated. This also has the benefit of being able to upgrade cipher lists and other various TLS settings so you don't get an 'F' on the Qualys checker.
The Zabbix web interface is served through a standard virtual host and can be SSL-enabled quite easily.
This should get you going with a free Let's Encrypt certificate: https://certbot.eff.org/all-instructions/
Hey mate,
I actually set up exactly that this week end. I used this tutorial for the nginx/apache part.
Then I used https://certbot.eff.org/ for the SSL certificates.
I am also a noob so one issue I ran into is that NGINX is the one doing the SSL stuff, not couchpotato or sickrage. What I mean is that SSL (HTTPS) is not activated in sickrage and couchpotato but rather https://sickrage.mydomain.net point to my nginx server on port 443 and is redirected to the http path on my local network. If that makes any sense...
edit : PM me and I will send you my nginx config for you to have a look
No, with let's encrypt you can get a fully signed cert.
Take a look here for more info. Most of that code is GPL so heads up for that, but there are MIT licensed clients and writing your own is pretty trivial (IIRC most clients are only a few hundred lines of code).
Basically, once you have an HTTP server on port 80 with a domain name, you put a "challenge" there and have the let's encrypt servers verify that the domain name you want to sign goes to you. Then the sign a generated key and give it back to you so you can them install it as your cert and then sleep for 5 weeks and do it again (or if you want do a shortened version since you already verified)
But for IOT this doesn't always work correctly. So a better bet is to ship a self signed cert, and have a server you control act as a proxy. Your server verifies the self signed cert by identity, and then you use a public cert for that server.
But even that has downsides. It's all about choosing what downsides you want.
etc. etc.
For Trezor's MyTrezor site, you also need to forward /insight-api/ as well as /socket-io/ or something like that to port 3001 (default for insight-api service on bitcore)
bitcore is very good with releasing new updates via npm to keep up with bitcoin core official releases, but if you don't want to trust them, you can add their nodejs bindings to the bitcoin core source manually and compile yourself if you'd like.
I actually used my raspberry pi to do it, so the process I followed was for linux. They put something on your webserver and then make sure they can download that file to authenticate that the it is really a server you control. So you would need something to webserve for windows, at least occasionally when you need to issue and update certs.
Edit: looks like cert bot can temporarily create a webserver to do this check
Windows instructions: https://certbot.eff.org/lets-encrypt/windows-other.html
Probably already suggested, but certbot for Linux Apache and nginx.
Certify the Web for IIS on Windows exchange or RD or vpn
Otherwise check out: https://letsencrypt.org/docs/client-options/ for free let's encrypt CA certificate utilities.
After all, automate it if you can.
Hey, Thanks for the info. I ended up using certbot. They have a pretty good step by step of how to do it
IIRC, simply following the Let's Encrypt docs with an up-to-date OS and nginx build will get you to a "passing" state. I don't know of a how-to guide beyond that, but perhaps one is out there someplace.
Keep in mind that testssl checks a lot of things that aren't pass/fail tests. For example, choosing a cipher suite is a balancing act between security, compatibility, and performance, which depends heavily on what clients you want to support and what hardware you have, among other factors.
Certbot will (if you let it configure your server) enable Mozilla's recommended cipher suite, which is a sensible compromise for general purpose public use. If you want to tailor your ciphers in finer detail, you'll have to start making your own decisions. I find testssl's client simulation very helpful for this; I can disable weaker ciphers and use testssl to tell me which clients I broke, and then I can decide whether that's okay with me.
Has an easy drop down menu to select your setup. For example, apache on debian buster instructions would look like this: https://certbot.eff.org/lets-encrypt/debianbuster-apache
There is actually an oficial Docker image https://certbot.eff.org/docs/install.html#running-with-docker
If you already generated your certs, you can use it with Docker too, but you will need to setup a cronjob yourself,
For example, create a renew.sh that check every 30days or something and you put something like this
docker run --rm --name letsencrypt \
-v "${PWD}/data/ovh.ini:/ovh.ini" \
-v /etc/letsencrypt:/etc/letsencrypt/" \
-v /var/lib/letsencrypt:/var/lib/letsencrypt" \ certbot/dns-ovh:latest \
renew --dns-ovh --dns-ovh-credentials /ovh.ini --dns-ovh-propagation-seconds 60
In this example I am using certbot with ovh plugin but check the documentation they have more plugin or you can just run 'certbot/certbot:latest' image
The simplest would be to run sudo python -m SimpleHTTPServer 80
where the web pages are. Without the 80 (and even without sudo) it runs on port 8000.
The next is to install eitther Apache or nginx. I have no experience with nginx. You can also add php. Add MariaDB as well and you should be able to install Wordpress. do not forget to run mysql_secure_installation
after installing MySQL.
When you install a webserver, you best run it with ssl by using certbot if you want it visible to the outside world.
Just installing apache is sudo apt install apache php
and you have a php enabled webserver running. Add the following file in /var/www/html/info.php
<?php phpinfo(); ?>
And then, with a browser go to http://ip.of.the.pi/info.php The ip can also be localhost
if the browser is on the local machine.
Have you tried
https://certbot.eff.org/lets-encrypt/debianbuster-apache
It sets up all the config files for you if memory serves me right however you have to set the http to https redirects manually yourself in sites-available (not that hard if you search the interwebs). Also if you are using your nextcloud on your home network with a PC then it's wise to add a name daemon reference to the nextcloud config like http://server so you don't go out and back in through your router for connections on your network as with my router it's slow.
The most important thing here though is that once it's set up use the config files to understand and learn how it works so you can be completely secure.
Raspbian now has certbot as part of the repo.
Follow the instructions here instead for installing certbot. Probably that "No Webserver" is most appropriate for your situation. Just check that you are using Debian 9 (Strectch) by using cat /etc/debian_version - it should be if it's a fairly recent raspbian release.
Awesome site & good job snatching that domain! haha just a few things I wanna suggest on your site tho.
but all in all I like the concept its definitely a producthunt worthy site. cheers!
If you are using Jessie you can follow the instructions here to get the certificate for your mail server.
For https you need to add to your website configuration something similar to what follows below <IfModule mod_ssl.c> <VirtualHost YOUR_SEVER_IP:443>
ServerAdmin YOUR_EMAIL ServerName DOMAIN DocumentRoot /var/www/your_web_site_folder/ # SSL Engine Switch: # Enable/Disable SSL for this virtual host. SSLEngine on
SSLCertificateFile /etc/letsencrypt/live/YOURDOMAIN/cert.pem SSLCertificateKeyFile /etc/letsencrypt/live/YOURDOMAIN/privkey.pem SSLCErtificateChainFile /etc/letsencrypt/live/YOURDOMAIN/chain.pem SSLHonorCipherOrder on SSLCipherSuite ECDH+AESGCM:DH+AESGCM:ECDH+AES256:DH+AES256:ECDH+AES128:DH+AES:ECDH+3DES:DH+3DES:RSA+AESGCM:RSA+AES:RSA+3DES:!aNULL:!MD5:!DSS
</VirtualHost> </IfModule>
That should do the trick
I'm not currently in front of my PC will send latter. Is a two part job: make the certificates then configure apache.
In the mean time check the certbot website they have instructions on doing the certificates depending on your debian version.
In /etc/apache/sites-available/your_website.conf last section is for ssl there you will put the location of the actual certificate for that domain.
Yes. Install free control panel like webmin, virutalmin,... via SSH and then you can unzip via web interface like cPanel.
Install this bot and it will obtain an SSL cert for you via SSH command. Or use webmin, it has its own features to do this
You need to put in the domain you want the cert for with the -d option. It used to say that in the quickstart guide, I don't know why they removed it. See this page for a clearer example: https://certbot.eff.org/docs/intro.html#how-to-run-the-client
I don't understand the downvote you got, Certboot doesn't always require root: https://certbot.eff.org/faq/#does-certbot-require-root-administrator-privileges
In short, you can use it in Standalone or Manual mode as any user, as long as that user has write permission to the cert directories, basically what ceroney91 said.
SSL is laughably easy nowadays and is free thanks to Let'sEncrypt and the EFF. If you need to secure your sites, do so now with certbot.
It's so easy you'll feel silly you didn't do it sooner.
Totally free using Certbot but you need shell access. I run my server via DigitalOcean so I have full access. If you comfortable following directions it could be worth looking into setting up a DO droplet, I pay like 5 bucks a month to host unlimited domains, and SSL all fo free <3
Okay. If you need help there are some great tutorials at https://digitalocean.com depending on your distribution/webserver. Also check out https://certbot.eff.org if you cant find one on Digital Ocean.
benutzt Zertifikate von letsencrypt.org, komplett kostenlos und automatisiert, eine Sache von einer Minute - gut, Konflikte müssen dann dementsprechend noch angepasst werden, geht aber auch schnell.
Aber schon seit Monaten? Das hätte man auch in der dev stage schon von Anfang an machen können und darauf aufbauen
Hey /u/Heli0sX!
1) Yes, you must purchase a real, live domain. Let's Encrypt looks up DNS records to perform the certificate signing. This also means your server must be publicly accessible.
2) Let's Encrypt is trusted by most modern browsers at this point. This is done through a cross trust with another CA to get everything up and running, and slowly transitioning to being their own true CA trusted by browsers.
3) If you're on linux using certbot, the docs say to run daily to check for revoked certificates. This way you'll never have to worry about renewing manually, things will "Just Work". Generally, yes the certs are only valid for 90 days.
4) As I said above in point 1, you need a publicly accessible server and domain for this to work. Whether you reverse proxy with a webserver at home, or you have VPS's running, doesn't matter. The server getting the cert must be reachable publicly. I'm not sure about using Let's Encrypt as a CA replacement or component of Active Directory. If you're just using AD, you can trust the ADCA server on your local network (each browser or client you're using).
5) There may be software available for Windows. I haven't looked into it, but Google (or your search engine of choice) is your friend.
6) You can simply trust the AD CA server in your homelab and issue SSL certificates that way. They'll be signed, just not by one of the big CAs.
Hope that helps!
With traffic between the reverse proxy and backend web server going over the public internet you ideally want TLS communication between your reverse proxy and your backend webserver. In this case you will have to have a certificate on your VPS and the Raspberry Pi unless you want to dive into figuring out SSL pass through.
Certbot-auto is deprecated, so sounds like you are using an old version. Look at Certbot Instructions, which will point you to using Snap to install Certbot on Ubuntu and Debian (Raspberry Pi OS is based on Debian) instead of installing using apt.
You 100% do NOT need to have 80/443 open to do a DNS challenge. That is the point of a DNS challenge, certbot will create a temporary TXT record on your domain nameserver using your nameserver provider’s API (AWS Route53, Cloudfrare, etc). LetsEncrypt will then do a challenge against that TXT record, issue the certificate, and then certbot will delete the TXT record. Boom, valid letsencrypt cert issued for domain without any access to your local network. This is widely documented and I use it on multiple systems where the only access to the local network is through an open wireguard port.
Only having a single open port to your local network for a VPN limits attack surface and is an excellent way to keep your network and systems secure, full stop.
https://certbot.eff.org/instructions?ws=nginx&os=ubuntufocal
https://eff-certbot.readthedocs.io/en/stable/using.html#dns-plugins
Give [certbot](https://certbot.eff.org/) a try. It’s a little command-line tool that makes it really easy to set up free HTTPS certificates from Let’s Encrypt on almost any type of server. And you only have to set it up once and never think about it again because it takes care of renewing them automatically.
Yeah, there's a lot of stuff I left out. I think the design philosophy is that mureq should be able to replace typical uses of Requests to query REST APIs, but not to replace uses of it to automate workflows that normally take place in a browser. But for that you might want to use an even higher-level framework like mechanize.
Put another way, mureq should be able to replace Requests in complex applications, as long as those applications use HTTP in relatively simple ways. For example, I wrote a proof-of-concept PR for replacing Requests with mureq in certbot.
Here are the main things I left out that I'm aware of:
Authorization
header manually, of course)So you if I understand correctly you want to achieve 3 things: 1) have a server being a NAT be accessible to the internet 2) use a DNS so you don't have to remember your public IP 3) have a SSL certificate setup. For testing, i highly suggest having a really simple http server running on the server (for instance python -m SimpleHTTPServer
), since more complex applicable something needs to be configured with the right hostname otherwise they don't work properly.
For 1) there are a bunch of guide online on how to open a port on your home router so it accessible from outside the NAS. You usually have to look for the port forwarding option on your router. This will expose a port to the internet so all packet are forwarded to your server's local ip and it's port.
For 2) you just have to have your domain name provider point to the public IP address of your home. You said that your IP is dynamic, but for the moment it is probably simpler to not worry about that. I am sure that cloudflare as a tool to automatically change the IP of your domain name when your IP change.
Once you have 1) and 2) working properly, you should be able to access your server from outside your network by using your domain name. If you are using cloudflare, step 3) is not required, since it can encrypt the communication between the client and cloudflare while keeping the communication between cloudflare and your server unencrypted (aka over http). However, this is a less secure option than using SSL everywhere.
For 3), you need to setup a reverse proxy like nginx. It needs to be configured so it just forward the open ports of your server to your Dockers. Once this works over http, follow the instructions on certibot to setup your SSL certificate on your machine. Normally, it should automatically setup the reverse proxy to fetch and install the SSL certificate.
What OS are you using? I've seen similar issues with ubuntu 18.04 with acme.sh as well. We found that setting up https://certbot.eff.org/ aside from Swizzin allowed the install to work.
Have you tested any other OS? Swizzin seems to only work with Ubuntu and Debian. Ubuntu 20.04 seems to work the best in our opinion.
All certbot commands should are shown in the EFF website https://certbot.eff.org. Go there and pick NGINX and your OS and the site should show you all the commands to type. It’s extremely well documented and very easy to use.
Look at all these outdated answers, lol
Learn about Nginx. It's the new standard for web servers, finally putting Apache to rest. It's much easier and much more convenient.
Here's a nice guide about it.
It's mainly used to provide access to websites and web resources, and luckily, DynMap is a website!
Then learn about CertBot. It allows you to use HTTPS.
DynMap also has a guide on how to set this up, but you should definitely install both of the software above before opening the DynMap guide
It may work if you just use a regular http
url without ssl, but there's 0 reason not to enable (and even ENFORCE - i.e. don't allow regular http access) SSL on your domain.
It's an easy setup and is otherwise automatic with something like certbot
> If you have a registered domain, and you use a registrar that offers WHOIS privacy (never pay extra for this, IMO: switch to a better registrar instead), you're not really exposed to anything.
Do you have any recommendation that might meet my use case? I did a quick google search and it seems that cloudflare does not offer WHOIS Privacy.
> certbot also has a plugin to let it update your Cloudflare DDNS TXT records for challenge authentication.
https://certbot.eff.org/docs/using.html#dns-plugins
I suppose if I take a look at the providers here I might be able to find one that offers WHOISPrivacy with plugin support.
Also when choosing a provider do they all offer the ability to add a DNS TXT entry? While troubleshooting I came across a lot of posts about people not havine api access to their dns provider. Does that mean they were not able to add DNS TXT entries at all?
Thankyou for your very detailed reply.
Hello, I'm trying to follow this guide and having issues.
I followed these instructions to install Certbot in order to generate a certificate to use.
When it says Please enter the domain name(s) you would like on your certificate (comma and/or
space separated) (Enter 'c' to cancel):
I don't know what to enter. I tried ubuntu.local
, localhost
, localhost:80
, and http://localhost:80
but none of them want to work. I don't have an actual domain so I don't know what to do.
Any idea?
Hello, I'm trying to follow this guide and having issues.
I followed these instructions to install Certbot in order to generate a certificate to use.
When it says Please enter the domain name(s) you would like on your certificate (comma and/or
space separated) (Enter 'c' to cancel):
I don't know what to enter. I tried ubuntu.local
, localhost
, localhost:80
, and http://localhost:80
but none of them want to work. I don't have an actual domain so I don't know what to do.
Any idea?
Apache2, és sajnos nem emlékszem már pontosan.
Ez a leírás van elmentve valamikor régebbről, a másik szerveren talán ezzel sikerült, de az Ígéretfigyelőén valamiért nem, de arra se emlékszem már (2 éve volt) hogy hol akadt el a folyamat és milyen hibával.
Yes, you would need to host the reverse proxy on a VPS.
Essentially just:
- Install nginx, at first make a simple HTTP web server
- Point your domain to the reverse proxy IP
- Get a TLS certificate with Certbot (this uses Let's encrypt, notifies you via e-mail when you cert is about to expire and you can even make the re-generation automatic) - https://certbot.eff.org/instructions
- Configure nginx to use the certificate
- In the server block, do
location / { proxy_pass http(s)://YOUR_HOME_IP:OPTIONAL_PORT; }
This will proxy all the requests to your backend web server. Keep in mind that you should use a self-signed certificate on your backend, so you don't fall into the same issue as Cloudflare's Flexible TLS. You could also make an upstream block and set it as the proxy_pass destination for load balancing.
This won't leak your backend IP at all, unless your backend is vulnerable to SSRF attacks or something.
Nginx documentation is quite good, also there are many articles and tutorials so just a simple search "nginx INSERT_THING" shall get you to the proper content.
I use shared web hosting (channel) and paid hostinger ~$10 to get a perpetual SSL cert but their cert installation in down -,-
I use to use SSLForFree but it was annoying have=ing to renew every 3 months.
I wasn't able to figure out how to use the Certbot ACME client (https://certbot.eff.org) to create the cert
The problem can come from the apache config, and the lack of SSL certificate.
Did you try to access from the same network and from an outside network? If so are you able to connect to your domain and see the error, if so it's good news but there is still some work to do.
P.S.: To fix the certificate part it should be as easy as installing certbot and running it (it adds the needed configurations to the apache config by itself). I'm not sure if it does the redirect (http port 80 to https port 443) by itself but I'm almost sure it does (checked again and it does for apache).
For Debian follow this instructions:
https://certbot.eff.org/lets-encrypt/debianbuster-apache.html
1.install openssl on your setup
sudo openssl req -newkey rsa:4096 -nodes -keyout /tmp/tempKey.key -x509 -days 365 -out /tmp/tempCert.crt
ssl_certificate /tmp/tempCert.crt;ssl_certificate_key /tmp/tempKey.key;
sudo systemctl restart nginx
https://certbot.eff.org/lets-encrypt/debianbuster-nginx
sudo certbot --nginx
check your config if correct, the temp keys should be disabled and certbot certs should be enabled in the server block, preferable also a redirect from http to https
restart nginx again, simply having the SSL certificates should give you the bare minimum to run a ssl reverse proxy, there is so much more in terms of ciphers, headers, stapling etc
>I'll check that out, but is that okay to use on a personal PC? Like, it won't interfere with anything network related outside of Jellyfin?
u/WoodpeckerNo1 I'm working on this tutorial. I stucked at certbot-auto
command. It's not a valid command anymore. So I needed to follow this link instead of the entire "Install and Configure Let's Encrypt Client" section.
Just as an update, my problem was solved.
My Ubuntu version was no longer supported and so I had to transfer to a new Ubuntu by editing the source list.
From that point onward I added the SSL manually by using the Certbot tool:
https://certbot.eff.org/lets-encrypt/ubuntuxenial-nginx
In essence, now I have my https
If it’s not internet facing, how is Traefik connecting to it? Traefik is running local?
I won’t deny that it CAN be a pain to set up verification, but I strongly suggest making sure it’s a pain for you. I’ve configured certbot in less time than it took to write this reply.
If you are unable to get a valid certificate, then your best bet is to contact Traefik support or refer to requirements in documentation.
This site is the official daemon for Let's Encrypt, a free cert authority from the Electronic Frontier Foundation, Cisco, Mozilla, and many others.
Run this daemon and it will take care of generating a publicly trusted SSL certificate and keeping it renewed.
> Your system is not supported by certbot-auto anymore
Ah, right. You're meant to use a distro-packaged version of Certbot; the standalone download is no longer supported.
If you can install Pip on your instance, you should be able to follow the instructions here to get certbot installed and working.
I highly recommend to use something like certbot to automate this process
if you are not dead set on Apache2 I would instead recommend giving Caddy webserver a try
getting an TLS cert on caddy is as simple as writing
root * /var/www/wordpress
php_fastcgi unix//run/php/php-version-fpm.sock
file_server
in its config file, everything else will be automated and no manual dealing with certs yourself!
>Use let’s encrypt
Hi Sorry, did you do this in Windows? If so, could you give me some more info on this? I've been researching all day and finally got to a wall when I found Certbot can't install DNS plugins on Windows, according to the "Specific Windows limitations and configuration" here.
Thanks!
If this is just a standard website, then LetsEncrypt should be easy to setup. You can go to the Certbot website and fill out the small form they have saying "My HTTP website is running [Software] on [System]". Fill in those two boxes for your website and it should give you instructions on how to get started. There is even a small "Help, I'm not sure" option to assist with that if you need it. It's 100% free and actually really simple to setup. And for the most part, once it's setup, it'll automatically renew when needed and you shouldn't have to do anything else. https://certbot.eff.org/
Sorry, forgot to answer your last question..
> This is sort of unrelated but I've got a free trial for a VPS that I've activated
I now use DigitalOcean and I'm really happy with them - predictable pricing, great service, one of the best knowledge bases out there, options to easily scale/transition to managed services as necessary - they have a free trial too I think.
I use Ubuntu 20.04 LTS as it's nice and stable. Make sure you create an SSH key before you create the VPS, then specify that in the creation process so you can only login using that (double-check password login is disabled for ssh). Install fail2ban if you want to be careful and configure it to monitor ssh. Make sure your firewall is up and configured to just let ssh, http, and https through.
Optionally enable automatic security updates to be applied. I personally do this and have had no problems and it gives me some peace of mind, but I also check-in on them regularly to do maintenance/kernel updates/etc. (ansible is great for doing this to multiple machines, when you have more than one).
After you've configured your web server of choice, use certbot to manage free SSL certificates for your domain(s). Choose the option to redirect http to https.
Because you're new, I'm going to suggest the best way, and not the easy way, and that's to host it yourself and learn how to do some very light server administration.
You should use Amazon Lightsail or Digital Ocean. They're cheap and customizable. In the control panel that they give you, make sure ports 80 and 443 are open.
Create an Ubuntu instance. Install node, mongo, your source code, and your other dependencies. Install PM2 (from NPM) and set it up so that your app opens itself up in startup - read PM2s "Getting Started" for more info.
Now you have a website that's accessible to the public, but only if you have the IP and port.
Now install Nginx (or apache). There are plenty of tutorials on this, so I won't recreate the wheel, but you'll want to create a Proxy Pass that points to the port that your web app is running on.
Next, let's get you an ssl. Follow the instructions here: https://certbot.eff.org/. It's super simple, and will modify your nginx files for you.
Great, now we have a website that is accessible only via IP. The last step is to tie your domain name to this. Go to whoever provides your domain name, log in, and go to the DNS settings. Create an A record that points to your servers IP. Do not put in the port, just the IP.
And viola, you've successfully hosted your own web site. Feel free to DM me with any questions
Edit: you should also do this on a virtual machine first, so you can practice without renting a server.
Hmmm if you are port forwarding through the router, then I believe you would leave apache listening to 80 and 443. But your apache settings for SSL might be off. I am no expert in the matter, but I found using certbot was quite easy. I'm not sure if you can select the challenge to be TLS instead of http.
If you can, it will take care of updating the certs, and pointing your webserver (apache) with the correct settings for SSL.
Nice!
Just to make sure you saw it, Certbot supports the usage of script hooks: https://certbot.eff.org/docs/using.html#pre-and-post-validation-hooks
They come in really handy if you need to make some scripts yourself.
good luck!
If possible, I'd try to avoid wildcard certs and let the servers do their own cert renewal.
If that isn't possible for some reason, you can check whether your DNS provider has a plugin for certbot: https://certbot.eff.org/docs/using.html#dns-plugins
If that's not there, you need to check if your DNS provider has an API available. With some effort and creative sending of GET and PUT request using CURL you might be able to pull it off with some scripting.
If you DNS provider does not provide an API you're pretty much SOL.
Let's Encrypt's Cert Bot can automatically manage an nginx instance, renewing the cert and restarting the service.
Great stuff! Thanks! I'll bookmark this list. A few suggestions to add:
Also maybe give a shoutout to Cerbot. That's been a real gamechanger for setting up an SSL certificate. Not only is it free, they've just made it easier to do.
Is this complicated? Up to you, I suppose.
sudo docker run -it --rm --name certbot \
-v "/etc/letsencrypt:/etc/letsencrypt" \
-v "/var/lib/letsencrypt:/var/lib/letsencrypt" \
certbot/certbot certonly
I also have had notices to renew SSL certs. I have updated crontab and rebooted as indicated but https://crt.sh does not show renewal. I will revisit it incase it takes a bit of time.
Alternatively, is it possible to ssh and issue "certbot renew"?
certbot.eff.org recommends "snapd" - is that anything we need?
Awesome! If you're planning on showing this around more as well (which I'd recommend because you did great), I'd recommend looking into getting an SSL certificate for your webserver. It is what gives reddit for example that locked box in the url bar where your site says its unsecure. It's really easy with this tool called certbot.
Well if you're following the wildcard instructions and using the cloudflare plugin like it asks, it should be trying to run the dns-01 challenge using your cloudflare api credentials instead. Not sure what's going on there, but your record sounds fine.
Hmm, I've not seen the http-01 challenge. Are you using the certbot instructions for "default"? I've only used the "wildcard" instructions, which tells you to grab the certbot-dns-cloudflare
plugin for the dns-01 challenge.
Also, make sure your DNS records in cloudflare are set up to point to your IP. It's not enough to set the nameservers in Namecheap, cloudflare needs to know where your record points to.
For scenario 1 you can configure certbot to use a dns challenge. You need to own a domain and to host that domain on one of their supported vendors. This opens up a lot of possibilities, including having valid certificates internally. I have it integrated with my traefik setup. https://certbot.eff.org/docs/using.html?highlight=dns#dns-plugins Regarding the second scenario, just set up port 443 as a forward, nothing else. Forwardit into your pi on a separate VLAN that is firewalled off. Basically, allow portforward/external access to the pi on 443. Then allow access on 22, and 443 from your normal/access VLAN. Additionally I would look to see if fail2ban can be configured to follow the web server and next cloud logs. Ultimately, you are trusting the application's (nextcloud) security. You could set up engine acts as a reverse proxy and run some additional security stuff on that, but I don't think that would buy you a ton.
Anyone able to help? I'm working on the CertBot and I've double checked and reinstalled the CertBot and I still get this error:
pi@raspberrypi:~ $ sudo ln -s /snap/bin/certbot /usr/bin/certbot
ln: failed to create symbolic link '/usr/bin/certbot': File exists
Using this walkthrough:
https://certbot.eff.org/lets-encrypt/debianbuster-nginx
I know very little about coding and RPi, but this walkthrough has been very easy to follow.
You can't use the DNS-01 challenge with only a subdomain, as far as I know. As I understand it, Duck DNS gives you a free subdomain of duckdns.org, but DNS verification for Let's Encrypt works on the registered domain itself.
To get Let's Encrypt, you need to do one of the following:
Buy a domain name. I recommend Hover. Some of the cheapest, if you're not fussed about the TLD, are .space
($10), .co.uk
($11), .me.uk
($11), .org.uk
($11), .uk
($11), .work
($11), .xyz
($12), .click
($13), .link
($13), and .pictures
($13) – annual renewal for .space
is a bit pricier though. Once you have the domain, you'll need to use a DNS host which Certbot supports.
Use the HTTP-01 challenge instead. If your ISP blocks HTTP ports, this means finding another ISP or asking your ISP to unblock those ports. You may be able to upgrade to small business broadband, for instance, which may not cost much more.
If you're only going to be interacting with this server using your own devices, you could also just create a self-signed certificate and manually trust it on each device.