certbot-dns-f5xc


Namecertbot-dns-f5xc JSON
Version 1.0.0 PyPI version JSON
download
home_pagehttps://github.com/fadlytabrani/certbot-dns-f5xc
SummaryF5 Distributed Cloud (F5XC) DNS Authenticator plugin for Certbot
upload_time2025-08-22 12:29:32
maintainerNone
docs_urlNone
authorFadly Tabrani
requires_python>=3.6
licenseApache License 2.0
keywords certbot dns f5xc lets-encrypt ssl certificate
VCS
bugtrack_url
requirements requests cryptography setuptools
Travis-CI No Travis.
coveralls test coverage No coveralls.
            # certbot-dns-f5xc

A Certbot DNS plugin for F5 Distributed Cloud (F5XC) that allows you to obtain and renew Let's Encrypt certificates using DNS-01 challenges.

## Overview

This plugin enables automatic SSL/TLS certificate management through Let's Encrypt using DNS-01 challenges with F5 Distributed Cloud DNS services. It's particularly useful for wildcard certificates and domains that can't be validated through HTTP-01 challenges.

## Features

- **DNS-01 Challenge Support**: Automates Let's Encrypt DNS-01 challenges using F5XC DNS API
- **Multi-Domain Support**: Handle multiple domains and subdomains with a single configuration
- **Dynamic DNS Zone Detection**: Automatically extracts DNS zones from domain names
- **Flexible Authentication**: Supports both certificate-based authentication (recommended) and API token authentication
- **Resource Record Set (RRSet) Management**: Properly manages DNS records within F5XC's RRSet structure
- **Automatic Cleanup**: Removes TXT records after certificate validation

## Installation

### From Source

```bash
git clone https://github.com/fadlytabrani/certbot-dns-f5xc.git
cd certbot-dns-f5xc
pip install -e .
```

### Using pip

```bash
pip install certbot-dns-f5xc
```

## Configuration

**Authentication Priority**: When both certificate and API token credentials are provided, the plugin automatically uses certificate authentication and ignores the API token.

### Certificate-based Authentication (Recommended)

Create a configuration file at `~/.config/certbot/f5xc.ini`:

```ini
# F5XC DNS plugin configuration
dns_f5xc_tenant = your-tenant-id
dns_f5xc_certificate_path = /path/to/your/certificate.p12
dns_f5xc_certificate_password = your-certificate-password
dns_f5xc_propagation_seconds = 60  # Optional - DNS propagation delay in seconds
```

### API Token Authentication (Deprecated)

```ini
# F5XC DNS plugin configuration
dns_f5xc_api_token = your-api-token
dns_f5xc_propagation_seconds = 60  # Optional - DNS propagation delay in seconds
```

#### Configuration Options

- **`dns_f5xc_tenant`** (required for certificate auth): Your F5XC tenant ID
- **`dns_f5xc_certificate_path`** (required for certificate auth): Path to your P12 certificate file
- **`dns_f5xc_certificate_password`** (required for certificate auth): Password for the P12 certificate
- **`dns_f5xc_api_token`** (required for token auth): F5XC API token (deprecated)
- **`dns_f5xc_propagation_seconds`** (optional): DNS propagation delay in seconds (default: 60)
- **`dns_f5xc_rrset_identifier`** (optional): Custom identifier for RRSet naming (default: auto-detected machine hostname)

#### Authentication Priority

**Important**: The plugin uses a priority-based authentication system:

1. **Certificate Authentication (Priority 1)**: If `certificate_path`, `certificate_password`, and `tenant` are all provided, the plugin will use certificate authentication and **ignore any API token**.

2. **API Token Authentication (Priority 2)**: Only if certificate credentials are missing or incomplete will the plugin fall back to API token authentication.

**Example**: If you provide both certificate and API token credentials, the plugin will use certificate authentication and silently ignore the API token.

**Recommendation**: Use certificate authentication for production environments as it's more secure and provides better access control.

## Dynamic DNS Zone Detection

The plugin automatically extracts the DNS zone from domain names, making it perfect for multi-domain setups:

- **`example.com`** → Zone: `example.com`
- **`api.example.com`** → Zone: `example.com`
- **`sub.api.example.com`** → Zone: `example.com`
- **`www.example.com`** → Zone: `example.com`

## Resource Record Set (RRSet) Management

The plugin uses F5XC's Resource Record Set (RRSet) approach for DNS management:

- **Creates machine-specific "certbot-{identifier}" RRSets** for managing ACME challenge records
- **Configurable RRSet identifiers** via `dns_f5xc_rrset_identifier` in your INI file
- **Automatic machine identification** when no custom identifier is specified
- **Properly structures TXT records** within the RRSet for public DNS publishing
- **Ensures DNS propagation** by using F5XC's recommended API patterns
- **Automatic cleanup** of challenge records and empty RRSets after validation

### RRSet Naming Strategy

The plugin automatically creates machine-specific RRSets to prevent conflicts:

- **Default behavior**: Uses sanitized hostname (e.g., `certbot-ft-mbp1-local`)
- **Custom identifier**: Set `dns_f5xc_rrset_identifier = your_custom_name` in your INI file
- **F5XC compliance**: All names automatically follow RFC 1035 naming rules
- **Multi-device support**: Each device gets its own isolated RRSet

## Usage

### Basic Certificate Request

```bash
certbot certonly \
  --authenticator dns-f5xc \
  --dns-f5xc-credentials ~/.config/certbot/f5xc.ini \
  --dns-f5xc-propagation-seconds 60 \
  -d example.com \
  -d *.example.com
```

### Wildcard Certificate

```bash
certbot certonly \
  --authenticator dns-f5xc \
  --dns-f5xc-credentials ~/.config/certbot/f5xc.ini \
  -d *.example.com
```

### Certificate Renewal

```bash
certbot renew --authenticator dns-f5xc
```

## Development

### Setup Development Environment

```bash
git clone https://github.com/fadlytabrani/certbot-dns-f5xc.git
cd certbot-dns-f5xc
pip install -e ".[dev]"
```

### Running Tests

```bash
pytest
```

## Contributing

Contributions are welcome! Please feel free to submit a Pull Request.

## License

This project is licensed under the Apache License 2.0 - see the LICENSE file for details.

## Support

If you encounter any issues or have questions, please:

- Open an issue on GitHub

## Acknowledgments

This plugin follows Certbot's standard DNS authenticator patterns for consistency and reliability.

            

Raw data

            {
    "_id": null,
    "home_page": "https://github.com/fadlytabrani/certbot-dns-f5xc",
    "name": "certbot-dns-f5xc",
    "maintainer": null,
    "docs_url": null,
    "requires_python": ">=3.6",
    "maintainer_email": "Fadly Tabrani <fadly.tabrani@gmail.com>",
    "keywords": "certbot, dns, f5xc, lets-encrypt, ssl, certificate",
    "author": "Fadly Tabrani",
    "author_email": "Fadly Tabrani <fadly.tabrani@gmail.com>",
    "download_url": "https://files.pythonhosted.org/packages/eb/40/dffe44e25bd5c75033934e6688a268696839ec4dbcf1ab75d0aa43690d1d/certbot_dns_f5xc-1.0.0.tar.gz",
    "platform": null,
    "description": "# certbot-dns-f5xc\n\nA Certbot DNS plugin for F5 Distributed Cloud (F5XC) that allows you to obtain and renew Let's Encrypt certificates using DNS-01 challenges.\n\n## Overview\n\nThis plugin enables automatic SSL/TLS certificate management through Let's Encrypt using DNS-01 challenges with F5 Distributed Cloud DNS services. It's particularly useful for wildcard certificates and domains that can't be validated through HTTP-01 challenges.\n\n## Features\n\n- **DNS-01 Challenge Support**: Automates Let's Encrypt DNS-01 challenges using F5XC DNS API\n- **Multi-Domain Support**: Handle multiple domains and subdomains with a single configuration\n- **Dynamic DNS Zone Detection**: Automatically extracts DNS zones from domain names\n- **Flexible Authentication**: Supports both certificate-based authentication (recommended) and API token authentication\n- **Resource Record Set (RRSet) Management**: Properly manages DNS records within F5XC's RRSet structure\n- **Automatic Cleanup**: Removes TXT records after certificate validation\n\n## Installation\n\n### From Source\n\n```bash\ngit clone https://github.com/fadlytabrani/certbot-dns-f5xc.git\ncd certbot-dns-f5xc\npip install -e .\n```\n\n### Using pip\n\n```bash\npip install certbot-dns-f5xc\n```\n\n## Configuration\n\n**Authentication Priority**: When both certificate and API token credentials are provided, the plugin automatically uses certificate authentication and ignores the API token.\n\n### Certificate-based Authentication (Recommended)\n\nCreate a configuration file at `~/.config/certbot/f5xc.ini`:\n\n```ini\n# F5XC DNS plugin configuration\ndns_f5xc_tenant = your-tenant-id\ndns_f5xc_certificate_path = /path/to/your/certificate.p12\ndns_f5xc_certificate_password = your-certificate-password\ndns_f5xc_propagation_seconds = 60  # Optional - DNS propagation delay in seconds\n```\n\n### API Token Authentication (Deprecated)\n\n```ini\n# F5XC DNS plugin configuration\ndns_f5xc_api_token = your-api-token\ndns_f5xc_propagation_seconds = 60  # Optional - DNS propagation delay in seconds\n```\n\n#### Configuration Options\n\n- **`dns_f5xc_tenant`** (required for certificate auth): Your F5XC tenant ID\n- **`dns_f5xc_certificate_path`** (required for certificate auth): Path to your P12 certificate file\n- **`dns_f5xc_certificate_password`** (required for certificate auth): Password for the P12 certificate\n- **`dns_f5xc_api_token`** (required for token auth): F5XC API token (deprecated)\n- **`dns_f5xc_propagation_seconds`** (optional): DNS propagation delay in seconds (default: 60)\n- **`dns_f5xc_rrset_identifier`** (optional): Custom identifier for RRSet naming (default: auto-detected machine hostname)\n\n#### Authentication Priority\n\n**Important**: The plugin uses a priority-based authentication system:\n\n1. **Certificate Authentication (Priority 1)**: If `certificate_path`, `certificate_password`, and `tenant` are all provided, the plugin will use certificate authentication and **ignore any API token**.\n\n2. **API Token Authentication (Priority 2)**: Only if certificate credentials are missing or incomplete will the plugin fall back to API token authentication.\n\n**Example**: If you provide both certificate and API token credentials, the plugin will use certificate authentication and silently ignore the API token.\n\n**Recommendation**: Use certificate authentication for production environments as it's more secure and provides better access control.\n\n## Dynamic DNS Zone Detection\n\nThe plugin automatically extracts the DNS zone from domain names, making it perfect for multi-domain setups:\n\n- **`example.com`** \u2192 Zone: `example.com`\n- **`api.example.com`** \u2192 Zone: `example.com`\n- **`sub.api.example.com`** \u2192 Zone: `example.com`\n- **`www.example.com`** \u2192 Zone: `example.com`\n\n## Resource Record Set (RRSet) Management\n\nThe plugin uses F5XC's Resource Record Set (RRSet) approach for DNS management:\n\n- **Creates machine-specific \"certbot-{identifier}\" RRSets** for managing ACME challenge records\n- **Configurable RRSet identifiers** via `dns_f5xc_rrset_identifier` in your INI file\n- **Automatic machine identification** when no custom identifier is specified\n- **Properly structures TXT records** within the RRSet for public DNS publishing\n- **Ensures DNS propagation** by using F5XC's recommended API patterns\n- **Automatic cleanup** of challenge records and empty RRSets after validation\n\n### RRSet Naming Strategy\n\nThe plugin automatically creates machine-specific RRSets to prevent conflicts:\n\n- **Default behavior**: Uses sanitized hostname (e.g., `certbot-ft-mbp1-local`)\n- **Custom identifier**: Set `dns_f5xc_rrset_identifier = your_custom_name` in your INI file\n- **F5XC compliance**: All names automatically follow RFC 1035 naming rules\n- **Multi-device support**: Each device gets its own isolated RRSet\n\n## Usage\n\n### Basic Certificate Request\n\n```bash\ncertbot certonly \\\n  --authenticator dns-f5xc \\\n  --dns-f5xc-credentials ~/.config/certbot/f5xc.ini \\\n  --dns-f5xc-propagation-seconds 60 \\\n  -d example.com \\\n  -d *.example.com\n```\n\n### Wildcard Certificate\n\n```bash\ncertbot certonly \\\n  --authenticator dns-f5xc \\\n  --dns-f5xc-credentials ~/.config/certbot/f5xc.ini \\\n  -d *.example.com\n```\n\n### Certificate Renewal\n\n```bash\ncertbot renew --authenticator dns-f5xc\n```\n\n## Development\n\n### Setup Development Environment\n\n```bash\ngit clone https://github.com/fadlytabrani/certbot-dns-f5xc.git\ncd certbot-dns-f5xc\npip install -e \".[dev]\"\n```\n\n### Running Tests\n\n```bash\npytest\n```\n\n## Contributing\n\nContributions are welcome! Please feel free to submit a Pull Request.\n\n## License\n\nThis project is licensed under the Apache License 2.0 - see the LICENSE file for details.\n\n## Support\n\nIf you encounter any issues or have questions, please:\n\n- Open an issue on GitHub\n\n## Acknowledgments\n\nThis plugin follows Certbot's standard DNS authenticator patterns for consistency and reliability.\n",
    "bugtrack_url": null,
    "license": "Apache License 2.0",
    "summary": "F5 Distributed Cloud (F5XC) DNS Authenticator plugin for Certbot",
    "version": "1.0.0",
    "project_urls": {
        "Changelog": "https://github.com/fadlytabrani/certbot-dns-f5xc/releases",
        "Documentation": "https://github.com/fadlytabrani/certbot-dns-f5xc#readme",
        "Homepage": "https://github.com/fadlytabrani/certbot-dns-f5xc",
        "Issues": "https://github.com/fadlytabrani/certbot-dns-f5xc/issues",
        "Repository": "https://github.com/fadlytabrani/certbot-dns-f5xc"
    },
    "split_keywords": [
        "certbot",
        " dns",
        " f5xc",
        " lets-encrypt",
        " ssl",
        " certificate"
    ],
    "urls": [
        {
            "comment_text": null,
            "digests": {
                "blake2b_256": "716af15d688506798dbc3ad26cdeb0e8fbf21e0f4f8a89c9bd64a94a35361c5b",
                "md5": "d91744afa8ce8bc5ae449999f07b5849",
                "sha256": "b78ae5536456fb05ec22ee7c7c77b6d09801c7458936545b2ba83e4a8dfbb3f4"
            },
            "downloads": -1,
            "filename": "certbot_dns_f5xc-1.0.0-py2.py3-none-any.whl",
            "has_sig": false,
            "md5_digest": "d91744afa8ce8bc5ae449999f07b5849",
            "packagetype": "bdist_wheel",
            "python_version": "py2.py3",
            "requires_python": ">=3.6",
            "size": 14447,
            "upload_time": "2025-08-22T12:29:29",
            "upload_time_iso_8601": "2025-08-22T12:29:29.600469Z",
            "url": "https://files.pythonhosted.org/packages/71/6a/f15d688506798dbc3ad26cdeb0e8fbf21e0f4f8a89c9bd64a94a35361c5b/certbot_dns_f5xc-1.0.0-py2.py3-none-any.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": null,
            "digests": {
                "blake2b_256": "eb40dffe44e25bd5c75033934e6688a268696839ec4dbcf1ab75d0aa43690d1d",
                "md5": "f1f582d563c1afecfa8add9d73e769fa",
                "sha256": "bcc17f818b7a1c1bfc66acdde76e8731a7ca85d9e77eb9123254c44c15ca911b"
            },
            "downloads": -1,
            "filename": "certbot_dns_f5xc-1.0.0.tar.gz",
            "has_sig": false,
            "md5_digest": "f1f582d563c1afecfa8add9d73e769fa",
            "packagetype": "sdist",
            "python_version": "source",
            "requires_python": ">=3.6",
            "size": 20814,
            "upload_time": "2025-08-22T12:29:32",
            "upload_time_iso_8601": "2025-08-22T12:29:32.028941Z",
            "url": "https://files.pythonhosted.org/packages/eb/40/dffe44e25bd5c75033934e6688a268696839ec4dbcf1ab75d0aa43690d1d/certbot_dns_f5xc-1.0.0.tar.gz",
            "yanked": false,
            "yanked_reason": null
        }
    ],
    "upload_time": "2025-08-22 12:29:32",
    "github": true,
    "gitlab": false,
    "bitbucket": false,
    "codeberg": false,
    "github_user": "fadlytabrani",
    "github_project": "certbot-dns-f5xc",
    "travis_ci": false,
    "coveralls": false,
    "github_actions": true,
    "requirements": [
        {
            "name": "requests",
            "specs": [
                [
                    ">=",
                    "2.25.0"
                ]
            ]
        },
        {
            "name": "cryptography",
            "specs": [
                [
                    ">=",
                    "3.4.0"
                ]
            ]
        },
        {
            "name": "setuptools",
            "specs": [
                [
                    ">=",
                    "39.0.1"
                ]
            ]
        }
    ],
    "lcname": "certbot-dns-f5xc"
}
        
Elapsed time: 1.93243s