{"id":27161739,"url":"https://github.com/costela/wile","last_synced_at":"2025-04-09T00:57:48.517Z","repository":{"id":62589106,"uuid":"61992315","full_name":"costela/wile","owner":"costela","description":"Stripped down letsencrypt (ACME) client","archived":false,"fork":false,"pushed_at":"2020-01-14T21:33:00.000Z","size":109,"stargazers_count":15,"open_issues_count":3,"forks_count":2,"subscribers_count":3,"default_branch":"master","last_synced_at":"2025-03-20T00:41:26.240Z","etag":null,"topics":["acme","certificate","cli","client","python","security","ssl"],"latest_commit_sha":null,"homepage":"","language":"Python","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"gpl-3.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/costela.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null}},"created_at":"2016-06-26T14:19:53.000Z","updated_at":"2020-01-14T21:33:02.000Z","dependencies_parsed_at":"2022-11-03T20:26:19.165Z","dependency_job_id":null,"html_url":"https://github.com/costela/wile","commit_stats":null,"previous_names":[],"tags_count":17,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/costela%2Fwile","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/costela%2Fwile/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/costela%2Fwile/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/costela%2Fwile/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/costela","download_url":"https://codeload.github.com/costela/wile/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":247953108,"owners_count":21023947,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["acme","certificate","cli","client","python","security","ssl"],"created_at":"2025-04-09T00:57:47.923Z","updated_at":"2025-04-09T00:57:48.431Z","avatar_url":"https://github.com/costela.png","language":"Python","funding_links":[],"categories":[],"sub_categories":[],"readme":"[![Build Status](https://travis-ci.org/costela/wile.svg?branch=master)](https://travis-ci.org/costela/wile)\n[![PyPI version](https://badge.fury.io/py/wile.svg)](https://badge.fury.io/py/wile)\n\n# ⚠ UNMAINTAINED AND DEPRECATED\n\nThis code was a nice exercise, but it has been undermaintained for a while and multiple better alternatives are available.\nPlease consider switching.\n\n# Overview\n\nWile is a simple [Let's Encrypt](https://letsencrypt.org) (ACME) client that only supports the \"webroot\" method of validation. It only needs access to the root folder serving the domains in question. Specifically, it only needs access to the `.well-known` sub-folder and therefore doesn't need permission to access the actual website's content.\n\nThe `.well-known` folder must also be accessible from external sources. I.e.: if you run a reverse proxy for some backend application, it should include an exception for this folder.\n\n# Usage\n\n## Generating a certificate request\n\nSimple anonymous certificate request:\n```\n$ wile cert request example.com:/var/www/example.com/\n```\n\nRegistration with contact information, and saving certs to some other location (by default the certificate is saved to current folder):\n```\n$ wile register -e name@example.com\n$ wile cert request --output-dir /etc/ssl/private/ example.com:/var/www/example.com/\n```\n\nCertificate request using remote webroot validation of SSH/SFTP:\n```\n$ wile cert request example.com:username@example.com:/var/www/example.com/\n```\n\nSyntax for remote webroot validation argument is: DOMAIN:[[[USER@]HOST[:PORT]:]PATH].\n\nStoring remote webroot validation is done via SFTP using SSH public key authentication. You can explicitly define path to your private key using `--ssh-private-key` option. Also, if your private key has been secured with a password you must provide your private key password using an ENV variable (`WILE_SSH_PASS='\u003cyour password\u003e'`). Note that there are single quotes around the password so that your shell doesn't try to expand the symbols within the password.\n\nNote that you can also pass multiple domains with a single document root, which creates a certificate with [Subject Alternative Names](https://en.wikipedia.org/wiki/Subject_Alternative_Name).\n```\n$ wile cert request example.com:/var/www/example.com/ www.example.com\n```\n\nIn case of a remote webroot validation:\n```\n$ wile cert request example.com:username@example.com:/var/www/example.com/ www.example.com\n```\n\n## Revoking a certificate\n\nSimple anonymous certificate revocation:\n```\n$ wile cert revoke /etc/ssl/private/example.com.crt\n```\n\n## Certificate renewal\n\nBy default, no new request will be made if `wile` detects an existing certificate for the same requested domains with a validity of at least 1 week. This can be changed with the `--min-valid-time` and `--force` options.\n\nThis way a simple daily cronjob is enough to ensure certificate freshness and should make renewals resiliant against moderate letsencrypt API downtime.\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fcostela%2Fwile","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fcostela%2Fwile","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fcostela%2Fwile/lists"}