Certimate
Overview
Certimate is an open-source, self-hosted tool that automates the full lifecycle of your SSL and TLS certificates from a single web console. It issues certificates from ACME certificate authorities such as Let's Encrypt, ZeroSSL, Google Trust Services and SSL.com, then deploys them automatically to the places that serve them: web servers, Kubernetes clusters, CDNs, WAFs, load balancers and object storage across many providers.
A visual workflow editor lets you chain issuance, deployment, renewal and notification into one automated pipeline, so certificates are replaced before they expire without any manual steps. This SecureAnyCloud image serves Certimate 0.4.27 on a hardened Ubuntu 24.04 LTS base, patched at build time, with the web console fronted by nginx on port 80.
What you get:
- Certimate 0.4.27, a single self-contained Go binary, managed by systemd
- The web console and REST API on loopback
127.0.0.1:8090, fronted by nginx on:80 - Secure by default. Certimate runs as a dedicated non-root service bound to loopback and is reached only through nginx. No shared login ever ships in the image.
- A unique administrator password generated per instance on first boot and written to a protected file on the machine, so the upstream default credential never works
- Embedded SQLite storage, with no external database to run
- ACME issuance from Let's Encrypt, ZeroSSL, Google Trust Services, SSL.com and more
- Automatic deployment to 150+ targets and automatic renewal through a visual workflow editor
- Certificate expiry monitoring and multi-channel notifications
certimate.serviceandnginx.serviceas enabled systemd units- 24/7 SecureAnyCloud support
Prerequisites
- An active Azure subscription, an SSH key pair, and a VNet and subnet in the target region.
- Standard_B2s (2 vCPU / 4 GiB RAM) is a comfortable starting point, because Certimate is extremely lightweight.
- NSG inbound rules that allow
22/tcpfrom your management network and80/tcpfor the web console. If you intend to solve HTTP-01 ACME challenges or serve the console over HTTPS, you also need443/tcp. - Restrict
80/tcpto trusted networks in production, because it is the administrative console.
Step 1 - Deploy from the Azure Marketplace
- Sign in to the Azure Portal, choose Create a resource, search the Marketplace for Certimate by SecureAnyCloud, and select Create.
- On Basics, pick your subscription, resource group, region and size.
- Under Administrator account, choose SSH public key and paste your key.
- Under Inbound port rules, allow SSH (22) and HTTP (80).
- Select Review + create, then select Create.
Step 2 - Deploy from the Azure CLI
# Accept the Marketplace terms once per subscription (required before the first CLI deploy)
az vm image terms accept --urn sac1647283583153:certimate-ubuntu-24-04:default:latest
az vm create \
--resource-group <your-rg> \
--name certimate \
--image sac1647283583153:certimate-ubuntu-24-04:default:latest \
--size Standard_B2s \
--admin-username azureuser \
--generate-ssh-keys \
--public-ip-sku StandardThen open the web console port, and port 443 if you plan to use HTTPS.
az vm open-port --resource-group <your-rg> --name certimate --port 80 --priority 900
az vm open-port --resource-group <your-rg> --name certimate --port 443 --priority 910Step 3 - Confirm the service is running
SSH in as azureuser and confirm that Certimate and nginx are active. Certimate itself binds only to loopback on 127.0.0.1:8090, and nginx publishes the console on port 80.
systemctl is-active certimate.service nginx.service ss -tlnp | grep -E ":80 |127.0.0.1:8090" | sed 's/users:.*//'Expected output: both services report active, nginx listens on :80, and Certimate listens on 127.0.0.1:8090.
You can also confirm that the API is healthy through the nginx front end.
curl -s http://127.0.0.1/api/healthStep 4 - Retrieve the administrator password for your instance
Your instance generated a unique administrator password on first boot and stored it in a root-owned file. Read it over SSH.
sudo cat /root/certimate-credentials.txtExpected output (the password is unique to your VM):
certimate.admin_email=admin@certimate.fun certimate.admin_password=************************ certimate.console_url=http://<your-vm-ip>/Keep this password safe. You can change it from the console after your first sign-in (see Step 8).
Step 5 - Sign in to the web console
In a browser, open http://<your-vm-public-ip>/. Sign in with the username admin@certimate.fun and the password from Step 4.
After you sign in, you land on the dashboard. It summarizes your certificates, workflows and recent runs, with shortcuts to create a workflow, change your password and configure certificate authorities.
Step 6 - Confirm there is no default login
The image ships with no usable default credential. You can prove it from the shell. The upstream default password is rejected, and only the unique password generated for your VM authenticates.
The check below reads that password from the credentials file and calls the console through nginx.
PW=$(sudo grep '^certimate.admin_password=' /root/certimate-credentials.txt | cut -d= -f2-)
echo "upstream default 1234567890 -> HTTP $(curl -s -o /dev/null -w '%{http_code}' -X POST http://127.0.0.1/api/collections/_superusers/auth-with-password -H 'Content-Type: application/json' -d '{"identity":"admin@certimate.fun","password":"1234567890"}')"
echo "this VM's admin password -> HTTP $(curl -s -o /dev/null -w '%{http_code}' -X POST http://127.0.0.1/api/collections/_superusers/auth-with-password -H 'Content-Type: application/json' -d "{\"identity\":\"admin@certimate.fun\",\"password\":\"$PW\"}")"Expected output: the default password returns HTTP 400 (rejected), and your per-VM password returns HTTP 200 (authenticated).
Step 7 - Build a certificate workflow
Certimate's core is the visual workflow editor. From Workflows, choose Create from blank, or start from the Standard template (apply, deploy, notify) or the Monitoring template (watch expiry and alert).
Each workflow chains an ACME issuance node, one or more deployment nodes for your targets, and notification nodes. It then runs on a schedule, so renewal is fully automated.
Before you run a workflow, add your ACME certificate authority and provider credentials under Settings and Credentials. Then reference them from the workflow nodes.
Step 8 - Manage your account
Open Settings, then Account, to change the sign-in email or rotate the administrator password. The Settings area also holds certificate authority configuration, credential persistence, diagnostics and appearance options.
Step 9 - Where your data lives
All Certimate state, including the embedded SQLite database, your ACME accounts, issued certificates and deploy target credentials, lives under /opt/certimate/pb_data, owned by the dedicated certimate service user. The first-boot service initialized this directory freshly for your VM and rotated the administrator password.
sudo ls -la /opt/certimate/pb_data systemctl is-enabled certimate-firstboot.service certimate.service nginx.serviceTo back up Certimate, stop the service and archive /opt/certimate/pb_data; restore by replacing the directory and starting the service again.
Support
This image is built and maintained by SecureAnyCloud with 24/7 support. For deployment help or questions about Certimate on Azure, contact the SecureAnyCloud support team listed on your Azure Marketplace offer.
Deploy on Azure
Launch Certimate on Ubuntu 24.04 LTS on Azure with 24/7 support from SecureAnyCloud.
View this image
Need Help?
Our support team is available 24/7.
sales@secureanycloud.com
Overview
Certimate is an open-source platform that automates the full life cycle of your SSL/TLS certificates. It issues certificates through the ACME protocol from a wide range of certificate authorities, renews them automatically before they expire, and deploys each renewed certificate to your hosting targets, all from a visual workflow editor in a full web console.
This SecureAnyCloud image removes the brittle cron scripts and manual copying that certificate management usually relies on.
What you get:
- Certimate as a single self-contained Go binary installed at
/opt/certimate/certimate - A dedicated unprivileged
certimatesystem account, running under a systemd service that starts Certimate on boot and restarts it on failure - A PocketBase-based build, so all runtime state lives in an embedded database directory at
/opt/certimate/pb_data. That state includes the administrator account, ACME registrations, issued certificates and deploy-target credentials. - A loopback-only binding on
127.0.0.1:8090, so Certimate is never exposed directly - An nginx reverse proxy that publishes the web console on port 80, with realtime streaming enabled so the workflow editor and live views work in the browser
- An administrator password generated on the first boot of every deployed instance, so two instances launched from the same Amazon Machine Image never share a password
- The password written to
/root/certimate-credentials.txtwith mode 0600, so only the root user can read it. The well-known upstream default password does not work on a launched instance. - 24/7 SecureAnyCloud support
Prerequisites
Before you deploy this image, make sure you have:
- An Amazon Web Services account where you can launch EC2 instances
- IAM permissions to launch instances, create security groups, and subscribe to AWS Marketplace products
- An EC2 key pair in the target Region for SSH access to the instance
- A VPC and subnet in the target Region, with a security group that allows inbound port 22 from your management network, and port 80 (and 443 if you configure TLS) from the networks that need to reach the console
- The AWS CLI (version 2) installed locally, if you plan to deploy from the command line
Connecting to your instance
Certimate is available as an Amazon Machine Image for one or more operating system variants. Each variant has its own default SSH login user. Connect over SSH as the user for the variant you launched.
- OS variant: Ubuntu 24.04 LTS
- SSH login user: ubuntu
- Example: ssh -i your-key.pem ubuntu@<instance-public-ip>
The rest of this guide is the same across variants. The web console, the workflow editor and the certificate operations are identical, whatever base operating system you launched.
Launch the Instance from the AWS Marketplace
Sign in to the AWS Management Console, open the EC2 service, and select Launch instance. Under Application and OS Images, choose AWS Marketplace AMIs and search for Certimate. Select the SecureAnyCloud listing and choose Select, then choose Continue on the subscription summary.
Pick an instance type of m5.large or larger. Choose your EC2 key pair under Key pair (login).
Under Network settings, select your VPC and subnet. Then create or select a security group that opens port 22 from your management network and port 80 for the console. Leave the root volume at the default size or larger.
Select Launch instance. First-boot initialization takes a few seconds after the instance state becomes Running and the status checks pass.
Launch the Instance from the AWS CLI
The following command launches an instance from the SecureAnyCloud Certimate Marketplace AMI into an existing subnet and security group.
Replace <ami-id> with the AMI ID shown on the Marketplace listing, <key-name> with your EC2 key pair name, and <subnet-id> with your subnet ID. Replace <security-group-id> with a security group that opens ports 22 and 80 as described above.
aws ec2 run-instances \
--image-id <ami-id> \
--instance-type m5.large \
--key-name <key-name> \
--subnet-id <subnet-id> \
--security-group-ids <security-group-id> \
--tag-specifications 'ResourceType=instance,Tags=[{Key=Name,Value=certimate}]'When the instance reaches the Running state and its status checks pass, note its public IP address or DNS name. You can find it in the EC2 console or with aws ec2 describe-instances.
Connect to Your Instance
Connect over SSH using your key pair and the login user for your operating system variant (see Connecting to your instance above). For the Ubuntu 24.04 variant, the login user is ubuntu.
ssh -i your-key.pem ubuntu@<instance-public-ip>Retrieve the Admin Password
Certimate generates a unique administrator password on the first boot of every instance. Read it from the root-only credentials file.
sudo cat /root/certimate-credentials.txtThe file contains the administrator email, the generated password, and the console URL.
certimate.admin_email=admin@certimate.fun certimate.admin_password=<admin-password> certimate.console_url=http://<instance-public-ip>/The account name is admin@certimate.fun and the password is unique to this instance. The well-known upstream default password does not work on a launched instance.
Confirm Certimate Is Running
Over SSH, confirm that the Certimate server and the nginx proxy are active.
sudo systemctl is-active certimate nginxBoth services report active.
active activeCertimate binds to loopback only and is fronted by nginx. Its health endpoint is therefore reachable from the instance over plain HTTP on port 80.
curl -s -o /dev/null -w 'HTTP %{http_code}\n' http://127.0.0.1/api/healthHTTP 200Confirm the installed version.
/opt/certimate/certimate --versioncertimate version v0.4.27You can also confirm that the generated administrator credential authenticates against the console API from the instance. This command reads the password from the root-only file into a shell variable and never prints it.
PW=$(sudo grep '^certimate.admin_password=' /root/certimate-credentials.txt | cut -d= -f2-)
curl -s -o /dev/null -w 'login HTTP %{http_code}\n' -X POST \
http://127.0.0.1/api/collections/_superusers/auth-with-password \
-H 'Content-Type: application/json' \
-d "{\"identity\":\"admin@certimate.fun\",\"password\":\"$PW\"}"A successful sign-in returns HTTP 200.
login HTTP 200Sign In to the Web Console
Open the console in your browser. Certimate uses relative URLs, so it works directly against the instance public IP with no DNS setup.
http://<instance-public-ip>/The Certimate sign-in page appears. Enter the administrator email admin@certimate.fun and the password from Step 4.
After you sign in, you reach the dashboard. It summarizes your certificate totals, how many are expiring soon or already expired, your workflow counts, and shortcuts to create a workflow or configure certificate authorities.
Change the administrator password from Settings after your first sign-in.
Connect a Certificate Authority and Deploy Targets
Certimate requests certificates through ACME, so you register with a certificate authority before you issue anything. Open Settings and add a certificate authority such as Let's Encrypt, ZeroSSL, Google Trust Services, SSL.com or Actalis. For DNS-01 challenges, also add the credentials for your DNS provider (for example, an Amazon Route 53 access key) under Credentials.
Next, add the places where you want renewed certificates delivered. Certimate supports 150+ deploy targets, including Kubernetes ingresses, content delivery networks, web application firewalls, load balancers and object storage. Configure each target once under Credentials, then reference it from your workflows.
Build an Issue and Deploy Workflow
Open Workflows, choose Create workflow, and start from the Standard template. The visual editor lays out the standard operating procedure as connected nodes:
- A Start trigger
- An Application node that requests the certificate from your chosen authority
- A Deployment node that pushes the issued certificate to your targets
- A Notification node on the failure path
- An End node
Configure the Application node with the domain names to request and the certificate authority to request from. Configure the Deployment node with one or more deploy targets, then select Publish.
Your workflows are listed under Workflows. There you can activate a schedule, run a workflow on demand, and review its run history.
Once a workflow is active, Certimate re-issues the certificate on schedule and fans each renewal out to every configured target automatically. A renewed certificate reaches all of your endpoints without manual copying.
Expiry Monitoring and Notifications
The dashboard tracks how many certificates are expiring soon or already expired.
Add a Notification node to your workflows, and configure a channel under Settings (email and popular messaging channels are supported). Certimate then alerts you if an issuance or deployment fails, which gives you a safety net before any certificate lapses.
Serve the Console over TLS
For production, put the console behind HTTPS. Point a DNS name at the instance and obtain a certificate (you can even use a Certimate workflow to issue one).
Add a TLS server block to the bundled nginx configuration at /etc/nginx/sites-available/certimate. The block listens on 443 and proxies to http://127.0.0.1:8090. Then open port 443 in the instance security group.
Certimate itself continues to bind loopback only, and nginx terminates TLS.
Data and Maintenance
All Certimate state lives in the embedded database directory /opt/certimate/pb_data on the instance. Back it up by stopping the service briefly and archiving that directory.
sudo systemctl stop certimate
sudo tar czf /root/certimate-pb_data-backup.tgz -C /opt/certimate pb_data
sudo systemctl start certimateKeep the operating system patched with your normal update process. After any configuration change, restart the service with sudo systemctl restart certimate.
Support
SecureAnyCloud provides 24/7 technical support for this product by email and live chat. Our engineers help with:
- Deployment
- ACME certificate authority setup
- DNS-01 and HTTP-01 challenge configuration
- Deploy-target integration (Kubernetes, CDNs, WAFs, load balancers, object storage)
- Workflow design
- Renewal and expiry monitoring
- Notifications
- TLS setup for the console
Contact: sales@secureanycloud.com
Deploy on AWS
Launch Certimate on AWS with 24/7 support from SecureAnyCloud.
View on Marketplace
Need Help?
Our support team is available 24/7.
sales@secureanycloud.com