|
31 | 31 |
|
32 | 32 | ## Overview |
33 | 33 |
|
34 | | -The Keyfactor A10 vThunder Universal Orchestrator Extension facilitates the management of SSL certificates on A10 Networks' vThunder appliances. It offers two primary certificate store types: |
35 | | - |
36 | | -1. **ThunderSsl**: Manages SSL certificates for securing traffic handled by the device, such as in SSL offloading, SSL intercept, and reverse proxy configurations. |
37 | | -2. **ThunderMgmt**: Manages certificates securing HTTPS access to the A10 management interface (GUI/API). |
38 | | - |
39 | | -- **A10 Thunder Version**: Tested with A10 Thunder v6.0.5-P5 (Build 51). |
40 | | -- **Automated Certificate Deployment**: Streamlines the deployment of SSL certificates to the A10 vThunder appliance. |
41 | | -- **Certificate Inventory Management**: Provides visibility into existing certificates on the appliance. |
42 | | -- **Integration with Keyfactor Command**: Enables centralized certificate lifecycle management. |
| 34 | +A Keyfactor Universal Orchestrator extension for managing SSL/TLS certificates on A10 Networks vThunder load balancers through direct API integration and SCP-based management interface certificate deployment. |
| 35 | + |
| 36 | +The A10 vThunder Orchestrator provides automated certificate lifecycle management for A10 Networks vThunder appliances. It implements two distinct certificate store types: |
| 37 | + |
| 38 | +1. **ThunderSsl**: Direct API-based management of SSL certificates for load balancing and application delivery |
| 39 | +2. **ThunderMgmt**: SCP-based management of certificates for the A10 management interface (GUI/API access) |
| 40 | + |
| 41 | +### Key Features |
| 42 | + |
| 43 | +- **Direct SSL Certificate Management**: Native A10 API integration for SSL certificate deployment and management |
| 44 | +- **Template-Aware Operations**: Intelligent handling of certificates bound to SSL templates and virtual services |
| 45 | +- **Multi-API Version Support**: Automatic detection and support for A10 API v4 and v6 |
| 46 | +- **Partition Support**: Full support for A10 partitions for multi-tenant deployments |
| 47 | +- **Certificate Inventory**: Comprehensive discovery and inventory of existing certificates |
| 48 | +- **Management Interface Certificates**: SCP-based deployment for A10 management interface certificates |
| 49 | +- **PAM Integration**: Support for Privileged Access Management systems |
| 50 | +- **Advanced Certificate Replacement**: Zero-downtime certificate replacement with automatic template rebinding |
| 51 | + |
| 52 | +### Architecture |
| 53 | + |
| 54 | +#### ThunderSsl Store Type |
| 55 | +Uses A10's native REST API (AXAPI) for direct certificate management: |
| 56 | +- Certificates are uploaded directly to the A10 appliance |
| 57 | +- Supports both certificate-only and certificate-with-private-key operations |
| 58 | +- Automatically detects and handles template bindings and virtual service configurations |
| 59 | +- Implements intelligent certificate replacement to avoid service disruption |
| 60 | + |
| 61 | +#### ThunderMgmt Store Type |
| 62 | +Uses SCP (Secure Copy Protocol) for management interface certificates: |
| 63 | +- Orchestrator uploads certificates to an intermediate Linux SCP server |
| 64 | +- A10 appliance retrieves certificates from the SCP server via API calls |
| 65 | +- Designed for management interface SSL certificate deployment |
| 66 | + |
| 67 | +#### A10 vThunder Requirements |
| 68 | +- A10 vThunder appliance with AXAPI support |
| 69 | +- API versions 4.x or 6.x supported (automatically detected) |
| 70 | +- Valid user account with certificate management privileges |
| 71 | +- For ThunderMgmt: SSH/SCP access enabled |
| 72 | + |
| 73 | +#### Required A10 Permissions |
| 74 | +The orchestrator requires an A10 user account with permissions to: |
| 75 | +- Access AXAPI (REST API) |
| 76 | +- Manage SSL certificates and private keys |
| 77 | +- Read/write SSL templates (server-ssl and client-ssl) |
| 78 | +- Query and modify virtual services |
| 79 | +- Write configuration to memory |
| 80 | +- Set active partitions |
| 81 | +- For ThunderMgmt: SSH/SCP file operations |
43 | 82 |
|
44 | 83 | The a10vThunder Universal Orchestrator extension implements 2 Certificate Store Types. Depending on your use case, you may elect to use one, or both of these Certificate Store Types. Descriptions of each are provided below. |
45 | 84 |
|
@@ -686,43 +725,115 @@ Please refer to the **Universal Orchestrator (remote)** usage section ([PAM prov |
686 | 725 |
|
687 | 726 |
|
688 | 727 |
|
689 | | -## Test Cases |
690 | | -<details> |
691 | | -<summary>Management & SSL Certificate Operations</summary> |
| 728 | +## Certificate Alias Management |
692 | 729 |
|
693 | | -Case Number|Case Name|Store Path|Enrollment Params|Expected Results|Passed|Screenshots |
694 | | --------|----------|------------------|--------------------|----------------------------|----|-------- |
695 | | -TC1|Add Unbound Certificate|shared|**Alias**:<br><random><br>**Overwrite**:<br>false|Cert and Chain Added|True| |
696 | | -TC2|Remove Unbound Certificate|shared|**Alias**:<br><same-random><br>**Overwrite**:<br>false|Cert Removed Successfully|True| |
697 | | -TC3|Add Certificate to New Partition|keyfactor2|**Alias**:<br><random><br>**Overwrite**:<br>false|Cert Added to Partition|True| |
698 | | -TC4|Remove Cert from Partition|keyfactor2|**Alias**:<br><same-random><br>**Overwrite**:<br>false|Cert Removed from Partition|True| |
699 | | -TC5|Renew Bound Cert With Overwrite|shared|**Alias**:<br><entered-name><br>**Overwrite**:<br>true|Cert Renamed and Rebound|True| |
700 | | -TC6|Renew Bound Cert in Different Partition|keyfactor2|**Alias**:<br><entered-name><br>**Overwrite**:<br>true|Cert Renamed and Rebound|True| |
701 | | -TC7|Attempt to Remove Bound Cert (Not Allowed)|keyfactor2|**Alias**:<br><entered-name><br>**Overwrite**:<br>true|Error: Bound Cert Cannot Be Removed|True| |
| 730 | +Understanding how aliases work is crucial for proper certificate management across both store types. |
702 | 731 |
|
703 | | -</details> |
| 732 | +#### ThunderSsl Aliases |
704 | 733 |
|
705 | | -<details> |
706 | | -<summary>Inventory Tests</summary> |
| 734 | +In the ThunderSsl store type, the **alias** directly corresponds to the certificate and private key names stored on the A10 appliance: |
707 | 735 |
|
708 | | -Case Number|Case Name|Store Path|Enrollment Params|Expected Results|Passed|Screenshots |
709 | | --------|----------|------------------|--------------------|----------------------------|----|-------- |
710 | | -TC8|Inventory From Partition|keyfactor2|—|Partition Certs Listed|True| |
711 | | -TC9|Inventory From Shared Location|shared|—|Shared Certs Listed|True| |
712 | | -TC14|Inventory Management Certs from SCP|/home/ec2-user|—|Mgmt Certs Retrieved from SCP|True| |
| 736 | +- **Certificate Name**: The alias becomes the SSL certificate identifier in A10's certificate store |
| 737 | +- **Private Key Name**: The same alias is used for the associated private key |
| 738 | +- **Template References**: SSL templates reference certificates by this exact alias name |
| 739 | +- **API Operations**: All A10 API calls use this alias to identify the certificate/key pair |
713 | 740 |
|
714 | | -</details> |
| 741 | +##### Example ThunderSsl Usage |
| 742 | +``` |
| 743 | +Alias: "webserver-prod-2025" |
| 744 | +→ A10 Certificate: "webserver-prod-2025" |
| 745 | +→ A10 Private Key: "webserver-prod-2025" |
| 746 | +→ Template Reference: server-ssl template uses cert "webserver-prod-2025" |
| 747 | +``` |
715 | 748 |
|
716 | | -<details> |
717 | | -<summary>Management Port Binding</summary> |
| 749 | +##### Alias Renaming for Template-Bound Certificates |
718 | 750 |
|
719 | | -Case Number|Case Name|Store Path|Enrollment Params|Expected Results|Passed|Screenshots |
720 | | --------|----------|------------------|--------------------|----------------------------|----|-------- |
721 | | -TC10|Add New Cert and Bind to Mgmt Port|/home/ec2-user|**Alias**:<br><random><br>**Overwrite**:<br>true|Cert Installed and Bound|True| |
722 | | -TC11|Renew and Rebind Cert to Mgmt Port|/home/ec2-user|**Alias**:<br><same><br>**Overwrite**:<br>true|Cert Renewed and Bound Again|True| |
723 | | -TC13|Remove Mgmt Bound Cert|/home/ec2-user|**Alias**:<br><same><br>**Overwrite**:<br>false|Cert Removed, Binding Left Intact|True| |
| 751 | +When replacing a certificate that's bound to SSL templates, the orchestrator uses an intelligent renaming strategy: |
724 | 752 |
|
725 | | -</details> |
| 753 | +1. **Timestamp Generation**: Creates a Unix timestamp (10 digits) |
| 754 | +2. **Alias Pattern Matching**: |
| 755 | + - If alias contains existing timestamp: `webserver-prod_1640995200` → `webserver-prod_1672531200` |
| 756 | + - If no timestamp found: `webserver-prod` → `webserver-prod_1672531200` |
| 757 | +3. **Length Validation**: Ensures final alias stays within A10's 240-character limit |
| 758 | +4. **Template Updates**: All SSL templates are updated to reference the new timestamped alias |
| 759 | +5. **Cleanup**: Original certificate is removed after successful template updates |
| 760 | +
|
| 761 | +##### Replacement Workflow Example |
| 762 | +``` |
| 763 | +Original: "api-gateway-cert" |
| 764 | +Step 1: Generate new alias → "api-gateway-cert_1672531200" |
| 765 | +Step 2: Upload certificate with new alias |
| 766 | +Step 3: Update server-ssl templates: cert "api-gateway-cert" → "api-gateway-cert_1672531200" |
| 767 | +Step 4: Update client-ssl templates: cert "api-gateway-cert" → "api-gateway-cert_1672531200" |
| 768 | +Step 5: Remove old certificate "api-gateway-cert" |
| 769 | +Step 6: Rebind templates to virtual services |
| 770 | +``` |
| 771 | +
|
| 772 | +#### ThunderMgmt Aliases |
| 773 | +
|
| 774 | +In the ThunderMgmt store type, the **alias** determines the filename for certificates stored on the SCP server: |
| 775 | +
|
| 776 | +- **Certificate File**: `{alias}.crt` on the SCP server |
| 777 | +- **Private Key File**: `{alias}.key` on the SCP server |
| 778 | +- **A10 API Reference**: The A10 management interface loads certificates using SCP URLs pointing to these files |
| 779 | +
|
| 780 | +##### Example ThunderMgmt Usage |
| 781 | +``` |
| 782 | +Alias: "mgmt-interface-cert" |
| 783 | +→ SCP Server Files: |
| 784 | + - /home/scpuser/mgmt-interface-cert.crt |
| 785 | + - /home/scpuser/mgmt-interface-cert.key |
| 786 | +→ A10 API Call: |
| 787 | + - Certificate URL: scp://scpuser:[email protected]:/home/scpuser/mgmt-interface-cert.crt |
| 788 | + - Key URL: scp://scpuser:[email protected]:/home/scpuser/mgmt-interface-cert.key |
| 789 | +``` |
| 790 | +
|
| 791 | +##### ThunderMgmt File Management |
| 792 | +
|
| 793 | +The orchestrator handles file operations as follows: |
| 794 | +
|
| 795 | +1. **Add Operation**: |
| 796 | + - Uploads `{alias}.crt` and `{alias}.key` to SCP server |
| 797 | + - Calls A10 API to load certificate from SCP URLs |
| 798 | + - A10 device pulls files directly from SCP server |
| 799 | +
|
| 800 | +2. **Remove Operation**: |
| 801 | + - Deletes `{alias}.crt` and `{alias}.key` from SCP server |
| 802 | + - Does not modify A10 management interface configuration |
| 803 | +
|
| 804 | +3. **Replace Operation** (with Overwrite=true): |
| 805 | + - Overwrites existing `{alias}.crt` and `{alias}.key` files |
| 806 | + - Calls A10 API to reload certificate from same SCP URLs |
| 807 | +
|
| 808 | +#### Alias Best Practices |
| 809 | +
|
| 810 | +##### For ThunderSsl |
| 811 | +- Use descriptive names that indicate purpose: `web-frontend-ssl`, `api-backend-tls` |
| 812 | +- Avoid special characters that might conflict with A10 naming rules |
| 813 | +- Consider including environment indicators: `prod-web-cert`, `stage-api-cert` |
| 814 | +- Remember that renaming will append timestamps for template-bound certificates |
| 815 | +
|
| 816 | +##### For ThunderMgmt |
| 817 | +- Use names that clearly identify the management purpose: `mgmt-interface-2025` |
| 818 | +- Ensure filenames are valid for both SCP server filesystem and A10 API calls |
| 819 | +- Consider including renewal dates: `mgmt-cert-jan2025` |
| 820 | +
|
| 821 | +##### Character Limitations |
| 822 | +- **Maximum Length**: 240 characters (enforced by orchestrator) |
| 823 | +- **Recommended Characters**: Letters, numbers, hyphens, underscores |
| 824 | +- **Avoid**: Special characters that might cause issues in API calls or file operations |
| 825 | +
|
| 826 | +#### Troubleshooting Alias Issues |
| 827 | +
|
| 828 | +##### ThunderSsl Common Issues |
| 829 | +- **Template Update Failures**: Verify templates exist and are accessible |
| 830 | +- **Long Alias Names**: Orchestrator will truncate to fit timestamp if needed |
| 831 | +- **Special Characters**: May cause API call failures |
| 832 | +
|
| 833 | +##### ThunderMgmt Common Issues |
| 834 | +- **File Path Issues**: Ensure SCP user has access to the target directory |
| 835 | +- **Invalid Filenames**: Some characters may not be valid for filesystem operations |
| 836 | +- **URL Encoding**: Special characters in aliases may require URL encoding in SCP URLs |
726 | 837 |
|
727 | 838 |
|
728 | 839 | ## License |
|
0 commit comments