{"id":25190051,"url":"https://github.com/keyfactor/remote-file-orchestrator","last_synced_at":"2026-05-14T00:02:08.264Z","repository":{"id":63006562,"uuid":"510862739","full_name":"Keyfactor/remote-file-orchestrator","owner":"Keyfactor","description":"The Remote File Orchestrator allows for the remote management of file-based certificate stores. Discovery, Inventory, and Management functions are supported. The orchestrator performs operations by first converting the certificate store into a BouncyCastle PKCS12Store.","archived":false,"fork":false,"pushed_at":"2026-04-02T19:02:39.000Z","size":6791,"stargazers_count":3,"open_issues_count":1,"forks_count":5,"subscribers_count":5,"default_branch":"main","last_synced_at":"2026-04-03T06:03:29.793Z","etag":null,"topics":["keyfactor-universal-orchestrator"],"latest_commit_sha":null,"homepage":"","language":"C#","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"apache-2.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/Keyfactor.png","metadata":{"files":{"readme":"README.md","changelog":"CHANGELOG.md","contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null}},"created_at":"2022-07-05T19:04:29.000Z","updated_at":"2026-04-02T19:02:45.000Z","dependencies_parsed_at":"2023-02-16T12:31:21.622Z","dependency_job_id":"59f18465-3c5c-4d26-ad5d-4eea9592b6ad","html_url":"https://github.com/Keyfactor/remote-file-orchestrator","commit_stats":null,"previous_names":[],"tags_count":329,"template":false,"template_full_name":null,"purl":"pkg:github/Keyfactor/remote-file-orchestrator","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Keyfactor%2Fremote-file-orchestrator","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Keyfactor%2Fremote-file-orchestrator/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Keyfactor%2Fremote-file-orchestrator/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Keyfactor%2Fremote-file-orchestrator/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/Keyfactor","download_url":"https://codeload.github.com/Keyfactor/remote-file-orchestrator/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Keyfactor%2Fremote-file-orchestrator/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":33004768,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-05-13T13:14:54.681Z","status":"ssl_error","status_checked_at":"2026-05-13T13:14:51.610Z","response_time":115,"last_error":"SSL_read: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"can_crawl_api":true,"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":["keyfactor-universal-orchestrator"],"created_at":"2025-02-09T21:18:47.199Z","updated_at":"2026-05-14T00:02:08.255Z","avatar_url":"https://github.com/Keyfactor.png","language":"C#","funding_links":[],"categories":[],"sub_categories":[],"readme":"\u003ch1 align=\"center\" style=\"border-bottom: none\"\u003e\n    Remote File Universal Orchestrator Extension\n\u003c/h1\u003e\n\n\u003cp align=\"center\"\u003e\n  \u003c!-- Badges --\u003e\n\u003cimg src=\"https://img.shields.io/badge/integration_status-production-3D1973?style=flat-square\" alt=\"Integration Status: production\" /\u003e\n\u003ca href=\"https://github.com/Keyfactor/remote-file-orchestrator/releases\"\u003e\u003cimg src=\"https://img.shields.io/github/v/release/Keyfactor/remote-file-orchestrator?style=flat-square\" alt=\"Release\" /\u003e\u003c/a\u003e\n\u003cimg src=\"https://img.shields.io/github/issues/Keyfactor/remote-file-orchestrator?style=flat-square\" alt=\"Issues\" /\u003e\n\u003cimg src=\"https://img.shields.io/github/downloads/Keyfactor/remote-file-orchestrator/total?style=flat-square\u0026label=downloads\u0026color=28B905\" alt=\"GitHub Downloads (all assets, all releases)\" /\u003e\n\u003c/p\u003e\n\n\u003cp align=\"center\"\u003e\n  \u003c!-- TOC --\u003e\n  \u003ca href=\"#support\"\u003e\n    \u003cb\u003eSupport\u003c/b\u003e\n  \u003c/a\u003e\n  ·\n  \u003ca href=\"#installation\"\u003e\n    \u003cb\u003eInstallation\u003c/b\u003e\n  \u003c/a\u003e\n  ·\n  \u003ca href=\"#license\"\u003e\n    \u003cb\u003eLicense\u003c/b\u003e\n  \u003c/a\u003e\n  ·\n  \u003ca href=\"https://github.com/orgs/Keyfactor/repositories?q=orchestrator\"\u003e\n    \u003cb\u003eRelated Integrations\u003c/b\u003e\n  \u003c/a\u003e\n\u003c/p\u003e\n\n## Overview\n\nThe Remote File Orchestrator Extension is a multipurpose integration that can remotely manage a variety of file-based\ncertificate stores and can easily be extended to manage others.\n\nThe Keyfactor Universal Orchestrator (UO) and RemoteFile Extension can be installed on either Windows or Linux operating\nsystems as well as manage certificates residing on servers of both operating systems. A UO service managing certificates\non remote servers is considered to be acting as an Orchestrator, while a UO service managing local certificates on the\nsame server running the service is considered an Agent. When acting as an Orchestrator, connectivity from the\norchestrator server hosting the `RemoteFile` extension to the orchestrated server hosting the certificate store(s) being\nmanaged is achieved via either an `SSH` (for Linux and possibly Windows orchestrated servers) or WinRM (for Windows\norchestrated servers) connection. When acting as an agent, `SSH/WinRM` may still be used, OR the certificate store can be\nconfigured to bypass these and instead directly access the orchestrator server's file system.\n\nRemoteFile Management and Inventory capabilities support the handling of certificates with RSA, ECC, and ML-DSA ditital signature algorithms.  However, \nODKG (On Device Key Generation) introduced in release 3.0 for store types RFJKS, RFPEM, RFPkcs12, and RFDER, currently only supports\nRSA and ECC.  Also, please be aware that the CSR and key pairs generated by the RemoteFile Orchestrator extension when utilizing\nthe ODKG capability are technically created on the orchestrator server itself and not the target device if the orchestrator is\nmanaging a store or stores on separate servers than where the Universal Orchestrator is installed.\n\n![](images/orchestrator-agent.png)\n\nThe supported configurations of Universal Orchestrator hosts and managed orchestrated servers are detailed below:\n\n|                                                                           | UO Installed on Windows               | UO Installed on Linux               |\n|---------------------------------------------------------------------------|---------------------------------------|-------------------------------------|\n| Orchestrated Server hosting certificate store(s) on remote Windows server | WinRM connection                      | SSH connection                      |\n| Orchestrated Server hosting certificate store(s) on remote Linux server   | SSH connection                        | SSH connection                      |\n| Certificate store(s) on same server as orchestrator service (Agent)       | WinRM connection or local file system | SSH connection or local file system |  \n\nNote: when creating, adding certificates to, or removing certificates from any store managed by `RemoteFile`, the\ndestination store file will be recreated. When this occurs, current AES encryption algorithms will be used for affected\ncertificates and certificate store files.\n\nThe Remote File Universal Orchestrator extension implements 6 Certificate Store Types. Depending on your use case, you may elect to use one, or all of these Certificate Store Types. Descriptions of each are provided below.\n\n- [RFJKS](#RFJKS)\n\n- [RFPEM](#RFPEM)\n\n- [RFPkcs12](#RFPkcs12)\n\n- [RFDER](#RFDER)\n\n- [RFKDB](#RFKDB)\n\n- [RFORA](#RFORA)\n\n\n## Compatibility\n\nThis integration is compatible with Keyfactor Universal Orchestrator version 10.4 and later.\n\n## Support\nThe Remote File Universal Orchestrator extension is supported by Keyfactor. If you require support for any issues or have feature request, please open a support ticket by either contacting your Keyfactor representative or via the Keyfactor Support Portal at https://support.keyfactor.com.\n\n\u003e If you want to contribute bug fixes or additional enhancements, use the **[Pull requests](../../pulls)** tab.\n\n## Requirements \u0026 Prerequisites\n\nBefore installing the Remote File Universal Orchestrator extension, we recommend that you install [kfutil](https://github.com/Keyfactor/kfutil). Kfutil is a command-line tool that simplifies the process of creating store types, installing extensions, and instantiating certificate stores in Keyfactor Command.\n\n\n\u003cdetails\u003e\n\u003csummary\u003e\u003cb\u003eCertificate stores hosted on Linux servers:\u003c/b\u003e\u003c/summary\u003e\n\n1. The Remote File Orchestrator Extension makes use of a few common Linux commands when managing stores on Linux\n   servers as well as some specialized CLI commands for certain store types. If the credentials you will be connecting with \n   need elevated access to run these commands or to access the\n   certificate store files these commands operate against, you must set up the user id as a sudoer with no password\n   necessary and set the config.json `UseSudo` value to `Y`. When `RemoteFile` is using orchestration, managing local or\n   external certificate stores using `SSH` or `WinRM`, the security context is determined by the user id entered into the\n   Keyfactor Command certificate store or discovery job screens. When RemoteFile is running as an agent, managing local\n   stores only, the security context is the user id running the Keyfactor Command Universal Orchestrator service\n   account. The full list of these commands and when they are used is illustrated below:\n\n| Shell Command  | Discovery | Inventory | Management-Add | Management-Delete | Management-Create |\n|----------------|-----------|-----------|----------------|-------------------|-------------------|\n| `echo`         | X         | X         | X              | X                 | X                 |\n| `find`         | X         |           |                |                   |                   |\n| `cp`           |           | X(a)      | X(a)           | X(a)              |                   |\n| `ls`           |           |           | X              | X                 | X                 |\n| `chown`        |           | X(b)      | X(b)           | X(b)              |                   |\n| `tee`          |           | X(c)      | X(a)           | X(a)              |                   |\n| `rm`           |           | X(d)      | X(d)           | X(d)              |                   |\n| `install`      |           |           |                |                   | X                 |\n| `stat`         |           |           |                |                   | X                 |\n| `orapki`       |           | X(e)      | X(e)           | X(e)              |                   |\n| `gskcapicmd`   |           | X(f)      | X(f)           | X(f)              |                   |  \n\n(a) - Only used if [config.json](#post-installation) setting SeparateUploadFilePath is used (non empty value)  \n(b) - Only used if [config.json](#post-installation) setting SeparateUploadFilePath is used (non empty value) AND the [config.json](#post-installation) or certificate store setting SudoImpersonatedUser is not used (empty value)  \n(c) - Only used if store type is RFKDB or RFORA AND [config.json](#post-installation) setting SeparateUploadFilePath is used (non empty value)  \n(d) - Only used if using store type is either RFKDB or RFORA OR any store type and the [config.json](#post-installation) setting SeparateUploadFilePath is used (non empty value)  \n(e) - RFORA store type only  \n(f) - RFKDB store type only\n\n2. When orchestrating management of local or external certificate stores, the Remote File Orchestrator Extension makes\n   use of SCP or SFTP to transfer files to and from the orchestrated server. SCP is attempted first, and if that \n   fails, SFTP is attempted. `SCP/SFTP` cannot make use of `sudo`, so\n   all folders containing certificate stores will need to allow SCP/SFTP file transfer for the user assigned to the\n   certificate store/discovery job. If this is not possible, set the values in the `config.json` appropriately to use an\n   alternative upload/download folder that does allow `SCP/SFTP` file transfer. If the certificate store/discovery job is\n   configured for local (agent) access, the account running the Keyfactor Universal Orchestrator service must have\n   access to read/write to the certificate store location, OR the `config.json` file must be set up to use the alternative\n   upload/download file.\n\n3. `SSH` Authentication: When creating a Keyfactor certificate store for the `RemoteFile` orchestrator extension, you may\n   supply either a user id and password for the certificate store credentials (directly or through one of Keyfactor\n   Command's PAM integrations), or supply a user id and `SSH` private key. When using a password, the connection is\n   attempted using `SSH` password authentication. If that fails, Keyboard Interactive Authentication is automatically\n   attempted. One or both of these must be enabled on the Linux box being managed. If private key authentication is\n   desired, copy and paste the full SSH private key into the Password textbox (or pointer to the private key if using a\n   PAM provider). Please note that SSH Private Key Authentication is not available when running locally as an agent. The\n   following private key formats are supported:\n\n- PKCS#1 (`BEGIN RSA PRIVATE KEY`)\n- PKCS#8 (`BEGIN PRIVATE KEY`)\n- ECDSA OPENSSH (`BEGIN OPENSSH PRIVATE KEY`)\n\nPlease reference [Post Installation](#post-installation) for more information on setting up the `config.json` file\nand [Defining Certificate Stores](#defining-certificate-stores)\nand [Discovering Certificate Stores with the Discovery Job](#discovering-certificate-stores-with-the-discovery-job) for\nmore information on defining and configuring certificate stores.\n\u003c/details\u003e  \n\n\u003cdetails\u003e  \n\u003csummary\u003e\u003cb\u003eCertificate stores hosted on Windows servers:\u003c/b\u003e\u003c/summary\u003e\n\n1. When orchestrating management of external (and potentially local) certificate stores, the `RemoteFile` Orchestrator \nExtension makes use of `WinRM` to connect to external certificate store servers.  The security context used is the user id \nentered in the Keyfactor Command certificate store or discovery job screen.  Make sure that `WinRM` is set up on the \norchestrated server and that the `WinRM` port (by convention, `5985` for `HTTP` and `5986` for `HTTPS`) is part of the certificate \nstore path when setting up your certificate stores/discovery jobs. If running as an agent, managing local certificate stores, \nlocal commands are run under the security context of the user account running the Keyfactor Universal Orchestrator Service.  \nPlease reference [Certificate Stores and Discovery Jobs](#certificate-stores-and-discovery-jobs) for more information on \ncreating certificate stores for the `RemoteFile` Orchestrator Extension.  \n\n\u003c/details\u003e\nC\nPlease consult with your system administrator for more information on configuring `SSH/SCP/SFTP` or `WinRM` in your environment.\n\n\n## Certificate Store Types\n\nTo use the Remote File Universal Orchestrator extension, you **must** create the Certificate Store Types required for your use-case. This only needs to happen _once_ per Keyfactor Command instance.\n\nThe Remote File Universal Orchestrator extension implements 6 Certificate Store Types. Depending on your use case, you may elect to use one, or all of these Certificate Store Types.\n\n### RFJKS\n\n\u003cdetails\u003e\u003csummary\u003eClick to expand details\u003c/summary\u003e\n\n\nThe `RFJKS` store type can be used to manage java keystores of types `JKS` or `PKCS12`.  If creating a new java keystore \nand adding a certificate all via Keyfactor Command, the created java keystore will be of type `PKCS12`, as java keystores \nof type `JKS` have been deprecated as of `JDK 9`.\n\n#### Supported use cases\n1. One-to-many trust entries - A trust entry is defined as a single certificate without a private key in a certificate store.  Each trust entry is identified with a custom alias.\n2. One-to-many key entries - One-to-many certificates with private keys and optionally the full certificate chain.  Each certificate is identified with a custom alias.\n3. A mix of trust and key entries.\n\n\n\n\n#### Supported Operations\n\n| Operation    | Is Supported                                                                                                           |\n|--------------|------------------------------------------------------------------------------------------------------------------------|\n| Add          | ✅ Checked        |\n| Remove       | ✅ Checked     |\n| Discovery    | ✅ Checked  |\n| Reenrollment | ✅ Checked |\n| Create       | ✅ Checked     |\n\n#### Store Type Creation\n\n##### Using kfutil:\n`kfutil` is a custom CLI for the Keyfactor Command API and can be used to create certificate store types.\nFor more information on [kfutil](https://github.com/Keyfactor/kfutil) check out the [docs](https://github.com/Keyfactor/kfutil?tab=readme-ov-file#quickstart)\n   \u003cdetails\u003e\u003csummary\u003eClick to expand RFJKS kfutil details\u003c/summary\u003e\n\n   ##### Using online definition from GitHub:\n   This will reach out to GitHub and pull the latest store-type definition\n   ```shell\n   # RFJKS\n   kfutil store-types create RFJKS\n   ```\n\n   ##### Offline creation using integration-manifest file:\n   If required, it is possible to create store types from the [integration-manifest.json](./integration-manifest.json) included in this repo.\n   You would first download the [integration-manifest.json](./integration-manifest.json) and then run the following command\n   in your offline environment.\n   ```shell\n   kfutil store-types create --from-file integration-manifest.json\n   ```\n   \u003c/details\u003e\n\n\n#### Manual Creation\nBelow are instructions on how to create the RFJKS store type manually in\nthe Keyfactor Command Portal\n   \u003cdetails\u003e\u003csummary\u003eClick to expand manual RFJKS details\u003c/summary\u003e\n\n   Create a store type called `RFJKS` with the attributes in the tables below:\n\n   ##### Basic Tab\n   | Attribute | Value | Description |\n   | --------- | ----- | ----- |\n   | Name | RFJKS | Display name for the store type (may be customized) |\n   | Short Name | RFJKS | Short display name for the store type |\n   | Capability | RFJKS | Store type name orchestrator will register with. Check the box to allow entry of value |\n   | Supports Add | ✅ Checked | Check the box. Indicates that the Store Type supports Management Add |\n   | Supports Remove | ✅ Checked | Check the box. Indicates that the Store Type supports Management Remove |\n   | Supports Discovery | ✅ Checked | Check the box. Indicates that the Store Type supports Discovery |\n   | Supports Reenrollment | ✅ Checked |  Indicates that the Store Type supports Reenrollment |\n   | Supports Create | ✅ Checked | Check the box. Indicates that the Store Type supports store creation |\n   | Needs Server | ✅ Checked | Determines if a target server name is required when creating store |\n   | Blueprint Allowed | 🔲 Unchecked | Determines if store type may be included in an Orchestrator blueprint |\n   | Uses PowerShell | 🔲 Unchecked | Determines if underlying implementation is PowerShell |\n   | Requires Store Password | ✅ Checked | Enables users to optionally specify a store password when defining a Certificate Store. |\n   | Supports Entry Password | 🔲 Unchecked | Determines if an individual entry within a store can have a password. |\n\n   The Basic tab should look like this:\n\n   ![RFJKS Basic Tab](docsource/images/RFJKS-basic-store-type-dialog.png)\n\n   ##### Advanced Tab\n   | Attribute | Value | Description |\n   | --------- | ----- | ----- |\n   | Supports Custom Alias | Required | Determines if an individual entry within a store can have a custom Alias. |\n   | Private Key Handling | Optional | This determines if Keyfactor can send the private key associated with a certificate to the store. Required because IIS certificates without private keys would be invalid. |\n   | PFX Password Style | Default | 'Default' - PFX password is randomly generated, 'Custom' - PFX password may be specified when the enrollment job is created (Requires the Allow Custom Password application setting to be enabled.) |\n\n   The Advanced tab should look like this:\n\n   ![RFJKS Advanced Tab](docsource/images/RFJKS-advanced-store-type-dialog.png)\n\n   \u003e For Keyfactor **Command versions 24.4 and later**, a Certificate Format dropdown is available with PFX and PEM options. Ensure that **PFX** is selected, as this determines the format of new and renewed certificates sent to the Orchestrator during a Management job. Currently, all Keyfactor-supported Orchestrator extensions support only PFX.\n\n   ##### Custom Fields Tab\n   Custom fields operate at the certificate store level and are used to control how the orchestrator connects to the remote target server containing the certificate store to be managed. The following custom fields should be added to the store type:\n\n   | Name | Display Name | Description | Type | Default Value/Options | Required |\n   | ---- | ------------ | ---- | --------------------- | -------- | ----------- |\n   | ServerUsername | Server Username | A username (or valid PAM key if the username is stored in a KF Command configured PAM integration). If acting as an *agent* using local file access, just check *No Value* | Secret |  | 🔲 Unchecked |\n   | ServerPassword | Server Password | A password (or valid PAM key if the password is stored in a KF Command configured PAM integration). The password can also be an SSH private key if connecting via SSH to a server using SSH private key authentication. If acting as an *agent* using local file access, just check *No Value* | Secret |  | 🔲 Unchecked |\n   | LinuxFilePermissionsOnStoreCreation | Linux File Permissions on Store Creation | The LinuxFilePermissionsOnStoreCreation field should contain a three-digit value between 000 and 777 representing the Linux file permissions to be set for the certificate store upon creation. Example: '600' or '755'.  Overrides DefaultLinuxPermissionOnStoreCreation [config.json](#post-installation) setting. | String |  | 🔲 Unchecked |\n   | LinuxFileOwnerOnStoreCreation | Linux File Owner on Store Creation | The LinuxFileOwnerOnStoreCreation field should contain a valid user ID recognized by the destination Linux server, optionally followed by a colon and a group ID if the group owner differs. Example: 'userID' or 'userID:groupID'.  Overrides DefaultOwnerOnStoreCreation [config.json](#post-installation) setting. | String |  | 🔲 Unchecked |\n   | SudoImpersonatingUser | Sudo Impersonating User | The SudoImpersonatingUser field should contain a valid user ID to impersonate using sudo on the destination Linux server. Example: 'impersonatedUserID'.  Overrides DefaultSudoImpersonatedUser [config.json](#post-installation) setting. | String |  | 🔲 Unchecked |\n   | RemoveRootCertificate | Remove Root Certificate from Chain | Remove root certificate from chain when adding/renewing a certificate in a store. | Bool | False | 🔲 Unchecked |\n   | IncludePortInSPN | Include Port in SPN for WinRM | Internally set the -IncludePortInSPN option when creating the remote PowerShell connection. Needed for some Kerberos configurations. | Bool | False | 🔲 Unchecked |\n   | SSHPort | SSH Port | Integer value representing the port that should be used when connecting to Linux servers over SSH.  Overrides SSHPort [config.json](#post-installation) setting. | String |  | 🔲 Unchecked |\n   | UseShellCommands | Use Shell Commands | Recommended to be set to the default value of 'Y'.  For a detailed explanation of this setting, please refer to [Use Shell Commands Setting](#use-shell-commands-setting) | Bool | True | 🔲 Unchecked |\n   | PostJobApplicationRestart | Post Job Application Restart | Select the command to be run after a Management Add or ODKG job executes.  Leave unselected if no command is desired. | MultipleChoice | Apache Tomcat Restart,Jetty Restart | 🔲 Unchecked |\n\n   The Custom Fields tab should look like this:\n\n   ![RFJKS Custom Fields Tab](docsource/images/RFJKS-custom-fields-store-type-dialog.png)\n\n\n   ###### Server Username\n   A username (or valid PAM key if the username is stored in a KF Command configured PAM integration). If acting as an *agent* using local file access, just check *No Value*\n\n\n   \u003e [!IMPORTANT]\n   \u003e This field is created by the `Needs Server` on the Basic tab, do not create this field manually.\n\n\n\n\n   ###### Server Password\n   A password (or valid PAM key if the password is stored in a KF Command configured PAM integration). The password can also be an SSH private key if connecting via SSH to a server using SSH private key authentication. If acting as an *agent* using local file access, just check *No Value*\n\n\n   \u003e [!IMPORTANT]\n   \u003e This field is created by the `Needs Server` on the Basic tab, do not create this field manually.\n\n\n\n\n   ###### Linux File Permissions on Store Creation\n   The LinuxFilePermissionsOnStoreCreation field should contain a three-digit value between 000 and 777 representing the Linux file permissions to be set for the certificate store upon creation. Example: '600' or '755'.  Overrides DefaultLinuxPermissionOnStoreCreation [config.json](#post-installation) setting.\n\n   ![RFJKS Custom Field - LinuxFilePermissionsOnStoreCreation](docsource/images/RFJKS-custom-field-LinuxFilePermissionsOnStoreCreation-dialog.png)\n   ![RFJKS Custom Field - LinuxFilePermissionsOnStoreCreation](docsource/images/RFJKS-custom-field-LinuxFilePermissionsOnStoreCreation-validation-options-dialog.png)\n\n\n\n   ###### Linux File Owner on Store Creation\n   The LinuxFileOwnerOnStoreCreation field should contain a valid user ID recognized by the destination Linux server, optionally followed by a colon and a group ID if the group owner differs. Example: 'userID' or 'userID:groupID'.  Overrides DefaultOwnerOnStoreCreation [config.json](#post-installation) setting.\n\n   ![RFJKS Custom Field - LinuxFileOwnerOnStoreCreation](docsource/images/RFJKS-custom-field-LinuxFileOwnerOnStoreCreation-dialog.png)\n   ![RFJKS Custom Field - LinuxFileOwnerOnStoreCreation](docsource/images/RFJKS-custom-field-LinuxFileOwnerOnStoreCreation-validation-options-dialog.png)\n\n\n\n   ###### Sudo Impersonating User\n   The SudoImpersonatingUser field should contain a valid user ID to impersonate using sudo on the destination Linux server. Example: 'impersonatedUserID'.  Overrides DefaultSudoImpersonatedUser [config.json](#post-installation) setting.\n\n   ![RFJKS Custom Field - SudoImpersonatingUser](docsource/images/RFJKS-custom-field-SudoImpersonatingUser-dialog.png)\n   ![RFJKS Custom Field - SudoImpersonatingUser](docsource/images/RFJKS-custom-field-SudoImpersonatingUser-validation-options-dialog.png)\n\n\n\n   ###### Remove Root Certificate from Chain\n   Remove root certificate from chain when adding/renewing a certificate in a store.\n\n   ![RFJKS Custom Field - RemoveRootCertificate](docsource/images/RFJKS-custom-field-RemoveRootCertificate-dialog.png)\n   ![RFJKS Custom Field - RemoveRootCertificate](docsource/images/RFJKS-custom-field-RemoveRootCertificate-validation-options-dialog.png)\n\n\n\n   ###### Include Port in SPN for WinRM\n   Internally set the -IncludePortInSPN option when creating the remote PowerShell connection. Needed for some Kerberos configurations.\n\n   ![RFJKS Custom Field - IncludePortInSPN](docsource/images/RFJKS-custom-field-IncludePortInSPN-dialog.png)\n   ![RFJKS Custom Field - IncludePortInSPN](docsource/images/RFJKS-custom-field-IncludePortInSPN-validation-options-dialog.png)\n\n\n\n   ###### SSH Port\n   Integer value representing the port that should be used when connecting to Linux servers over SSH.  Overrides SSHPort [config.json](#post-installation) setting.\n\n   ![RFJKS Custom Field - SSHPort](docsource/images/RFJKS-custom-field-SSHPort-dialog.png)\n   ![RFJKS Custom Field - SSHPort](docsource/images/RFJKS-custom-field-SSHPort-validation-options-dialog.png)\n\n\n\n   ###### Use Shell Commands\n   Recommended to be set to the default value of 'Y'.  For a detailed explanation of this setting, please refer to [Use Shell Commands Setting](#use-shell-commands-setting)\n\n   ![RFJKS Custom Field - UseShellCommands](docsource/images/RFJKS-custom-field-UseShellCommands-dialog.png)\n   ![RFJKS Custom Field - UseShellCommands](docsource/images/RFJKS-custom-field-UseShellCommands-validation-options-dialog.png)\n\n\n\n   ###### Post Job Application Restart\n   Select the command to be run after a Management Add or ODKG job executes.  Leave unselected if no command is desired.\n\n   ![RFJKS Custom Field - PostJobApplicationRestart](docsource/images/RFJKS-custom-field-PostJobApplicationRestart-dialog.png)\n   ![RFJKS Custom Field - PostJobApplicationRestart](docsource/images/RFJKS-custom-field-PostJobApplicationRestart-validation-options-dialog.png)\n\n\n\n\n\n   \u003c/details\u003e\n\u003c/details\u003e\n\n### RFPEM\n\n\u003cdetails\u003e\u003csummary\u003eClick to expand details\u003c/summary\u003e\n\n\nThe `RFPEM` store type can be used to manage `PEM` encoded files.\n\n#### Supported use cases\n1. Trust stores - A file with one-to-many certificates (no private keys, no certificate chains).\n2. Single certificate stores with private key in the file.\n3. Single certificate stores with certificate chain and private key in the file.\n4. Single certificate stores with private key in an external file.\n5. Single certificate stores with certificate chain in the file and private key in an external file\n\n#### Additional Considerations and Limitations\n- `PEM` stores may only have one private key (internal or external) associated with the store, as only one certificate/chain/private key combination can be stored in a PEM store supported by `RFPEM`. \n- Private keys will be stored in encrypted or unencrypted `PKCS#8` format (`BEGIN [ENCRYPTED] PRIVATE KEY`) based on the Store Password set on the Keyfactor Command Certificate Store unless managing a `PEM` store that currently contains a private key in `PKCS#1` format (`BEGIN RSA PRIVATE KEY` or `BEGIN EC PRIVATE KEY`). \n- Store password *MUST* be set to `No Password` if managing a store with a `PKCS#1` private key, as encrypted `PKCS#1` keys are not supported with this integration.\n\n\n\n\n#### Supported Operations\n\n| Operation    | Is Supported                                                                                                           |\n|--------------|------------------------------------------------------------------------------------------------------------------------|\n| Add          | ✅ Checked        |\n| Remove       | ✅ Checked     |\n| Discovery    | ✅ Checked  |\n| Reenrollment | ✅ Checked |\n| Create       | ✅ Checked     |\n\n#### Store Type Creation\n\n##### Using kfutil:\n`kfutil` is a custom CLI for the Keyfactor Command API and can be used to create certificate store types.\nFor more information on [kfutil](https://github.com/Keyfactor/kfutil) check out the [docs](https://github.com/Keyfactor/kfutil?tab=readme-ov-file#quickstart)\n   \u003cdetails\u003e\u003csummary\u003eClick to expand RFPEM kfutil details\u003c/summary\u003e\n\n   ##### Using online definition from GitHub:\n   This will reach out to GitHub and pull the latest store-type definition\n   ```shell\n   # RFPEM\n   kfutil store-types create RFPEM\n   ```\n\n   ##### Offline creation using integration-manifest file:\n   If required, it is possible to create store types from the [integration-manifest.json](./integration-manifest.json) included in this repo.\n   You would first download the [integration-manifest.json](./integration-manifest.json) and then run the following command\n   in your offline environment.\n   ```shell\n   kfutil store-types create --from-file integration-manifest.json\n   ```\n   \u003c/details\u003e\n\n\n#### Manual Creation\nBelow are instructions on how to create the RFPEM store type manually in\nthe Keyfactor Command Portal\n   \u003cdetails\u003e\u003csummary\u003eClick to expand manual RFPEM details\u003c/summary\u003e\n\n   Create a store type called `RFPEM` with the attributes in the tables below:\n\n   ##### Basic Tab\n   | Attribute | Value | Description |\n   | --------- | ----- | ----- |\n   | Name | RFPEM | Display name for the store type (may be customized) |\n   | Short Name | RFPEM | Short display name for the store type |\n   | Capability | RFPEM | Store type name orchestrator will register with. Check the box to allow entry of value |\n   | Supports Add | ✅ Checked | Check the box. Indicates that the Store Type supports Management Add |\n   | Supports Remove | ✅ Checked | Check the box. Indicates that the Store Type supports Management Remove |\n   | Supports Discovery | ✅ Checked | Check the box. Indicates that the Store Type supports Discovery |\n   | Supports Reenrollment | ✅ Checked |  Indicates that the Store Type supports Reenrollment |\n   | Supports Create | ✅ Checked | Check the box. Indicates that the Store Type supports store creation |\n   | Needs Server | ✅ Checked | Determines if a target server name is required when creating store |\n   | Blueprint Allowed | 🔲 Unchecked | Determines if store type may be included in an Orchestrator blueprint |\n   | Uses PowerShell | 🔲 Unchecked | Determines if underlying implementation is PowerShell |\n   | Requires Store Password | ✅ Checked | Enables users to optionally specify a store password when defining a Certificate Store. |\n   | Supports Entry Password | 🔲 Unchecked | Determines if an individual entry within a store can have a password. |\n\n   The Basic tab should look like this:\n\n   ![RFPEM Basic Tab](docsource/images/RFPEM-basic-store-type-dialog.png)\n\n   ##### Advanced Tab\n   | Attribute | Value | Description |\n   | --------- | ----- | ----- |\n   | Supports Custom Alias | Forbidden | Determines if an individual entry within a store can have a custom Alias. |\n   | Private Key Handling | Optional | This determines if Keyfactor can send the private key associated with a certificate to the store. Required because IIS certificates without private keys would be invalid. |\n   | PFX Password Style | Default | 'Default' - PFX password is randomly generated, 'Custom' - PFX password may be specified when the enrollment job is created (Requires the Allow Custom Password application setting to be enabled.) |\n\n   The Advanced tab should look like this:\n\n   ![RFPEM Advanced Tab](docsource/images/RFPEM-advanced-store-type-dialog.png)\n\n   \u003e For Keyfactor **Command versions 24.4 and later**, a Certificate Format dropdown is available with PFX and PEM options. Ensure that **PFX** is selected, as this determines the format of new and renewed certificates sent to the Orchestrator during a Management job. Currently, all Keyfactor-supported Orchestrator extensions support only PFX.\n\n   ##### Custom Fields Tab\n   Custom fields operate at the certificate store level and are used to control how the orchestrator connects to the remote target server containing the certificate store to be managed. The following custom fields should be added to the store type:\n\n   | Name | Display Name | Description | Type | Default Value/Options | Required |\n   | ---- | ------------ | ---- | --------------------- | -------- | ----------- |\n   | ServerUsername | Server Username | A username (or valid PAM key if the username is stored in a KF Command configured PAM integration). If acting as an *agent* using local file access, just check *No Value* | Secret |  | 🔲 Unchecked |\n   | ServerPassword | Server Password | A password (or valid PAM key if the password is stored in a KF Command configured PAM integration). The password can also be an SSH private key if connecting via SSH to a server using SSH private key authentication. If acting as an *agent* using local file access, just check *No Value* | Secret |  | 🔲 Unchecked |\n   | LinuxFilePermissionsOnStoreCreation | Linux File Permissions on Store Creation | The LinuxFilePermissionsOnStoreCreation field should contain a three-digit value between 000 and 777 representing the Linux file permissions to be set for the certificate store upon creation. Example: '600' or '755'.  Overrides DefaultLinuxPermissionOnStoreCreation [config.json](#post-installation) setting. | String |  | 🔲 Unchecked |\n   | LinuxFileOwnerOnStoreCreation | Linux File Owner on Store Creation | The LinuxFileOwnerOnStoreCreation field should contain a valid user ID recognized by the destination Linux server, optionally followed by a colon and a group ID if the group owner differs. Example: 'userID' or 'userID:groupID'.  Overrides DefaultOwnerOnStoreCreation [config.json](#post-installation) setting. | String |  | 🔲 Unchecked |\n   | SudoImpersonatingUser | Sudo Impersonating User | The SudoImpersonatingUser field should contain a valid user ID to impersonate using sudo on the destination Linux server. Example: 'impersonatedUserID'.  Overrides [config.json](#post-installation) DefaultSudoImpersonatedUser setting.. | String |  | 🔲 Unchecked |\n   | IsTrustStore | Trust Store | The IsTrustStore field should contain a boolean value ('true' or 'false') indicating whether the store will be identified as a trust store, which can hold multiple certificates without private keys. Example: 'true' for a trust store or 'false' for a store with a single certificate and private key. | Bool | false | 🔲 Unchecked |\n   | IncludesChain | Store Includes Chain | The IncludesChain field should contain a boolean value ('true' or 'false') indicating whether the certificate store includes the full certificate chain along with the end entity certificate. Example: 'true' to include the full chain or 'false' to exclude it. | Bool | false | 🔲 Unchecked |\n   | SeparatePrivateKeyFilePath | Separate Private Key File Location | The SeparatePrivateKeyFilePath field should contain the full path and file name where the separate private key file will be stored if it is to be kept outside the main certificate file. Example: '/path/to/privatekey.pem'. | String |  | 🔲 Unchecked |\n   | IgnorePrivateKeyOnInventory | Ignore Private Key On Inventory | The IgnorePrivateKeyOnInventory field should contain a boolean value ('true' or 'false') indicating whether to disregard the private key during inventory. Setting this to 'true' will allow inventory for the store without needing to supply the location of the private key or the password if the key is encrypted.  However, doing this makes the store in effect inventory-only and no management jobs will be able to be run for this store. Example: 'true' to ignore the private key or 'false' to include it. | Bool | false | 🔲 Unchecked |\n   | RemoveRootCertificate | Remove Root Certificate from Chain | Remove root certificate from chain when adding/renewing a certificate in a store. | Bool | False | 🔲 Unchecked |\n   | IncludePortInSPN | Include Port in SPN for WinRM | Internally set the -IncludePortInSPN option when creating the remote PowerShell connection. Needed for some Kerberos configurations. | Bool | False | 🔲 Unchecked |\n   | SSHPort | SSH Port | Integer value representing the port that should be used when connecting to Linux servers over SSH.  Overrides SSHPort [config.json](#post-installation) setting. | String |  | 🔲 Unchecked |\n   | UseShellCommands | Use Shell Commands | Recommended to be set to the default value of 'Y'.  For a detailed explanation of this setting, please refer to [Use Shell Commands Setting](#use-shell-commands-setting) | Bool | True | 🔲 Unchecked |\n   | PostJobApplicationRestart | Post Job Application Restart | Select the command to be run after a Management Add or ODKG job executes.  Leave unselected if no command is desired. | MultipleChoice | Apache HTTPD Restart,NGNIX Restart,HAProxy Restart,Envoy Proxy Restart | 🔲 Unchecked |\n\n   The Custom Fields tab should look like this:\n\n   ![RFPEM Custom Fields Tab](docsource/images/RFPEM-custom-fields-store-type-dialog.png)\n\n\n   ###### Server Username\n   A username (or valid PAM key if the username is stored in a KF Command configured PAM integration). If acting as an *agent* using local file access, just check *No Value*\n\n\n   \u003e [!IMPORTANT]\n   \u003e This field is created by the `Needs Server` on the Basic tab, do not create this field manually.\n\n\n\n\n   ###### Server Password\n   A password (or valid PAM key if the password is stored in a KF Command configured PAM integration). The password can also be an SSH private key if connecting via SSH to a server using SSH private key authentication. If acting as an *agent* using local file access, just check *No Value*\n\n\n   \u003e [!IMPORTANT]\n   \u003e This field is created by the `Needs Server` on the Basic tab, do not create this field manually.\n\n\n\n\n   ###### Linux File Permissions on Store Creation\n   The LinuxFilePermissionsOnStoreCreation field should contain a three-digit value between 000 and 777 representing the Linux file permissions to be set for the certificate store upon creation. Example: '600' or '755'.  Overrides DefaultLinuxPermissionOnStoreCreation [config.json](#post-installation) setting.\n\n   ![RFPEM Custom Field - LinuxFilePermissionsOnStoreCreation](docsource/images/RFPEM-custom-field-LinuxFilePermissionsOnStoreCreation-dialog.png)\n   ![RFPEM Custom Field - LinuxFilePermissionsOnStoreCreation](docsource/images/RFPEM-custom-field-LinuxFilePermissionsOnStoreCreation-validation-options-dialog.png)\n\n\n\n   ###### Linux File Owner on Store Creation\n   The LinuxFileOwnerOnStoreCreation field should contain a valid user ID recognized by the destination Linux server, optionally followed by a colon and a group ID if the group owner differs. Example: 'userID' or 'userID:groupID'.  Overrides DefaultOwnerOnStoreCreation [config.json](#post-installation) setting.\n\n   ![RFPEM Custom Field - LinuxFileOwnerOnStoreCreation](docsource/images/RFPEM-custom-field-LinuxFileOwnerOnStoreCreation-dialog.png)\n   ![RFPEM Custom Field - LinuxFileOwnerOnStoreCreation](docsource/images/RFPEM-custom-field-LinuxFileOwnerOnStoreCreation-validation-options-dialog.png)\n\n\n\n   ###### Sudo Impersonating User\n   The SudoImpersonatingUser field should contain a valid user ID to impersonate using sudo on the destination Linux server. Example: 'impersonatedUserID'.  Overrides [config.json](#post-installation) DefaultSudoImpersonatedUser setting..\n\n   ![RFPEM Custom Field - SudoImpersonatingUser](docsource/images/RFPEM-custom-field-SudoImpersonatingUser-dialog.png)\n   ![RFPEM Custom Field - SudoImpersonatingUser](docsource/images/RFPEM-custom-field-SudoImpersonatingUser-validation-options-dialog.png)\n\n\n\n   ###### Trust Store\n   The IsTrustStore field should contain a boolean value ('true' or 'false') indicating whether the store will be identified as a trust store, which can hold multiple certificates without private keys. Example: 'true' for a trust store or 'false' for a store with a single certificate and private key.\n\n   ![RFPEM Custom Field - IsTrustStore](docsource/images/RFPEM-custom-field-IsTrustStore-dialog.png)\n   ![RFPEM Custom Field - IsTrustStore](docsource/images/RFPEM-custom-field-IsTrustStore-validation-options-dialog.png)\n\n\n\n   ###### Store Includes Chain\n   The IncludesChain field should contain a boolean value ('true' or 'false') indicating whether the certificate store includes the full certificate chain along with the end entity certificate. Example: 'true' to include the full chain or 'false' to exclude it.\n\n   ![RFPEM Custom Field - IncludesChain](docsource/images/RFPEM-custom-field-IncludesChain-dialog.png)\n   ![RFPEM Custom Field - IncludesChain](docsource/images/RFPEM-custom-field-IncludesChain-validation-options-dialog.png)\n\n\n\n   ###### Separate Private Key File Location\n   The SeparatePrivateKeyFilePath field should contain the full path and file name where the separate private key file will be stored if it is to be kept outside the main certificate file. Example: '/path/to/privatekey.pem'.\n\n   ![RFPEM Custom Field - SeparatePrivateKeyFilePath](docsource/images/RFPEM-custom-field-SeparatePrivateKeyFilePath-dialog.png)\n   ![RFPEM Custom Field - SeparatePrivateKeyFilePath](docsource/images/RFPEM-custom-field-SeparatePrivateKeyFilePath-validation-options-dialog.png)\n\n\n\n   ###### Ignore Private Key On Inventory\n   The IgnorePrivateKeyOnInventory field should contain a boolean value ('true' or 'false') indicating whether to disregard the private key during inventory. Setting this to 'true' will allow inventory for the store without needing to supply the location of the private key or the password if the key is encrypted.  However, doing this makes the store in effect inventory-only and no management jobs will be able to be run for this store. Example: 'true' to ignore the private key or 'false' to include it.\n\n   ![RFPEM Custom Field - IgnorePrivateKeyOnInventory](docsource/images/RFPEM-custom-field-IgnorePrivateKeyOnInventory-dialog.png)\n   ![RFPEM Custom Field - IgnorePrivateKeyOnInventory](docsource/images/RFPEM-custom-field-IgnorePrivateKeyOnInventory-validation-options-dialog.png)\n\n\n\n   ###### Remove Root Certificate from Chain\n   Remove root certificate from chain when adding/renewing a certificate in a store.\n\n   ![RFPEM Custom Field - RemoveRootCertificate](docsource/images/RFPEM-custom-field-RemoveRootCertificate-dialog.png)\n   ![RFPEM Custom Field - RemoveRootCertificate](docsource/images/RFPEM-custom-field-RemoveRootCertificate-validation-options-dialog.png)\n\n\n\n   ###### Include Port in SPN for WinRM\n   Internally set the -IncludePortInSPN option when creating the remote PowerShell connection. Needed for some Kerberos configurations.\n\n   ![RFPEM Custom Field - IncludePortInSPN](docsource/images/RFPEM-custom-field-IncludePortInSPN-dialog.png)\n   ![RFPEM Custom Field - IncludePortInSPN](docsource/images/RFPEM-custom-field-IncludePortInSPN-validation-options-dialog.png)\n\n\n\n   ###### SSH Port\n   Integer value representing the port that should be used when connecting to Linux servers over SSH.  Overrides SSHPort [config.json](#post-installation) setting.\n\n   ![RFPEM Custom Field - SSHPort](docsource/images/RFPEM-custom-field-SSHPort-dialog.png)\n   ![RFPEM Custom Field - SSHPort](docsource/images/RFPEM-custom-field-SSHPort-validation-options-dialog.png)\n\n\n\n   ###### Use Shell Commands\n   Recommended to be set to the default value of 'Y'.  For a detailed explanation of this setting, please refer to [Use Shell Commands Setting](#use-shell-commands-setting)\n\n   ![RFPEM Custom Field - UseShellCommands](docsource/images/RFPEM-custom-field-UseShellCommands-dialog.png)\n   ![RFPEM Custom Field - UseShellCommands](docsource/images/RFPEM-custom-field-UseShellCommands-validation-options-dialog.png)\n\n\n\n   ###### Post Job Application Restart\n   Select the command to be run after a Management Add or ODKG job executes.  Leave unselected if no command is desired.\n\n   ![RFPEM Custom Field - PostJobApplicationRestart](docsource/images/RFPEM-custom-field-PostJobApplicationRestart-dialog.png)\n   ![RFPEM Custom Field - PostJobApplicationRestart](docsource/images/RFPEM-custom-field-PostJobApplicationRestart-validation-options-dialog.png)\n\n\n\n\n\n   \u003c/details\u003e\n\u003c/details\u003e\n\n### RFPkcs12\n\n\u003cdetails\u003e\u003csummary\u003eClick to expand details\u003c/summary\u003e\n\n\nThe `RFPkcs12` store type can be used to manage any `PKCS#12` compliant file format INCLUDING java keystores of type `PKCS12`.\n\n#### Supported use cases\n1. One-to-many trust entries - A trust entry is defined as a single certificate without a private key in a certificate store.  Each trust entry MUST BE identified with a custom friendly name/alias.\n2. One-to-many key entries - One-to-many certificates with private keys and optionally the full certificate chain.  Each certificate MUST BE identified with a custom friendly name/alias.\n3. A mix of trust and key entries.  Each entry MUST BE identified with a custom friendly name/alias.\n4. Single certificate stores with a blank/missing friendly name/alias.  Any management add job will replace the current certificate entry and will keep the friendly name/alias blank.  The Keyfactor Command certificate store will show the current certificate thumbprint as the entry's alias.\n\n#### Unsupported use cases\n1. Multiple key and/or trust entries with a mix of existing and non-existing friendly names/aliases.\n2. Multiple key and/or trust entries with blank friendly names/aliases\n\n\n\n\n#### Supported Operations\n\n| Operation    | Is Supported                                                                                                           |\n|--------------|------------------------------------------------------------------------------------------------------------------------|\n| Add          | ✅ Checked        |\n| Remove       | ✅ Checked     |\n| Discovery    | ✅ Checked  |\n| Reenrollment | ✅ Checked |\n| Create       | ✅ Checked     |\n\n#### Store Type Creation\n\n##### Using kfutil:\n`kfutil` is a custom CLI for the Keyfactor Command API and can be used to create certificate store types.\nFor more information on [kfutil](https://github.com/Keyfactor/kfutil) check out the [docs](https://github.com/Keyfactor/kfutil?tab=readme-ov-file#quickstart)\n   \u003cdetails\u003e\u003csummary\u003eClick to expand RFPkcs12 kfutil details\u003c/summary\u003e\n\n   ##### Using online definition from GitHub:\n   This will reach out to GitHub and pull the latest store-type definition\n   ```shell\n   # RFPkcs12\n   kfutil store-types create RFPkcs12\n   ```\n\n   ##### Offline creation using integration-manifest file:\n   If required, it is possible to create store types from the [integration-manifest.json](./integration-manifest.json) included in this repo.\n   You would first download the [integration-manifest.json](./integration-manifest.json) and then run the following command\n   in your offline environment.\n   ```shell\n   kfutil store-types create --from-file integration-manifest.json\n   ```\n   \u003c/details\u003e\n\n\n#### Manual Creation\nBelow are instructions on how to create the RFPkcs12 store type manually in\nthe Keyfactor Command Portal\n   \u003cdetails\u003e\u003csummary\u003eClick to expand manual RFPkcs12 details\u003c/summary\u003e\n\n   Create a store type called `RFPkcs12` with the attributes in the tables below:\n\n   ##### Basic Tab\n   | Attribute | Value | Description |\n   | --------- | ----- | ----- |\n   | Name | RFPkcs12 | Display name for the store type (may be customized) |\n   | Short Name | RFPkcs12 | Short display name for the store type |\n   | Capability | RFPkcs12 | Store type name orchestrator will register with. Check the box to allow entry of value |\n   | Supports Add | ✅ Checked | Check the box. Indicates that the Store Type supports Management Add |\n   | Supports Remove | ✅ Checked | Check the box. Indicates that the Store Type supports Management Remove |\n   | Supports Discovery | ✅ Checked | Check the box. Indicates that the Store Type supports Discovery |\n   | Supports Reenrollment | ✅ Checked |  Indicates that the Store Type supports Reenrollment |\n   | Supports Create | ✅ Checked | Check the box. Indicates that the Store Type supports store creation |\n   | Needs Server | ✅ Checked | Determines if a target server name is required when creating store |\n   | Blueprint Allowed | 🔲 Unchecked | Determines if store type may be included in an Orchestrator blueprint |\n   | Uses PowerShell | 🔲 Unchecked | Determines if underlying implementation is PowerShell |\n   | Requires Store Password | ✅ Checked | Enables users to optionally specify a store password when defining a Certificate Store. |\n   | Supports Entry Password | 🔲 Unchecked | Determines if an individual entry within a store can have a password. |\n\n   The Basic tab should look like this:\n\n   ![RFPkcs12 Basic Tab](docsource/images/RFPkcs12-basic-store-type-dialog.png)\n\n   ##### Advanced Tab\n   | Attribute | Value | Description |\n   | --------- | ----- | ----- |\n   | Supports Custom Alias | Required | Determines if an individual entry within a store can have a custom Alias. |\n   | Private Key Handling | Optional | This determines if Keyfactor can send the private key associated with a certificate to the store. Required because IIS certificates without private keys would be invalid. |\n   | PFX Password Style | Default | 'Default' - PFX password is randomly generated, 'Custom' - PFX password may be specified when the enrollment job is created (Requires the Allow Custom Password application setting to be enabled.) |\n\n   The Advanced tab should look like this:\n\n   ![RFPkcs12 Advanced Tab](docsource/images/RFPkcs12-advanced-store-type-dialog.png)\n\n   \u003e For Keyfactor **Command versions 24.4 and later**, a Certificate Format dropdown is available with PFX and PEM options. Ensure that **PFX** is selected, as this determines the format of new and renewed certificates sent to the Orchestrator during a Management job. Currently, all Keyfactor-supported Orchestrator extensions support only PFX.\n\n   ##### Custom Fields Tab\n   Custom fields operate at the certificate store level and are used to control how the orchestrator connects to the remote target server containing the certificate store to be managed. The following custom fields should be added to the store type:\n\n   | Name | Display Name | Description | Type | Default Value/Options | Required |\n   | ---- | ------------ | ---- | --------------------- | -------- | ----------- |\n   | ServerUsername | Server Username | A username (or valid PAM key if the username is stored in a KF Command configured PAM integration). If acting as an *agent* using local file access, just check *No Value* | Secret |  | 🔲 Unchecked |\n   | ServerPassword | Server Password | A password (or valid PAM key if the password is stored in a KF Command configured PAM integration). The password can also be an SSH private key if connecting via SSH to a server using SSH private key authentication. If acting as an *agent* using local file access, just check *No Value* | Secret |  | 🔲 Unchecked |\n   | LinuxFilePermissionsOnStoreCreation | Linux File Permissions on Store Creation | The LinuxFilePermissionsOnStoreCreation field should contain a three-digit value between 000 and 777 representing the Linux file permissions to be set for the certificate store upon creation. Example: '600' or '755'.  Overrides DefaultLinuxPermissionOnStoreCreation [config.json](#post-installation) setting. | String |  | 🔲 Unchecked |\n   | LinuxFileOwnerOnStoreCreation | Linux File Owner on Store Creation | The LinuxFileOwnerOnStoreCreation field should contain a valid user ID recognized by the destination Linux server, optionally followed by a colon and a group ID if the group owner differs. Example: 'userID' or 'userID:groupID'.  Overrides DefaultOwnerOnStoreCreation [config.json](#post-installation) setting. | String |  | 🔲 Unchecked |\n   | SudoImpersonatingUser | Sudo Impersonating User | The SudoImpersonatingUser field should contain a valid user ID to impersonate using sudo on the destination Linux server. Example: 'impersonatedUserID'.  Overrides DefaultSudoImpersonatedUser [config.json](#post-installation) setting. | String |  | 🔲 Unchecked |\n   | RemoveRootCertificate | Remove Root Certificate from Chain | Remove root certificate from chain when adding/renewing a certificate in a store. | Bool | False | 🔲 Unchecked |\n   | IncludePortInSPN | Include Port in SPN for WinRM | Internally set the -IncludePortInSPN option when creating the remote PowerShell connection. Needed for some Kerberos configurations. | Bool | False | 🔲 Unchecked |\n   | SSHPort | SSH Port | Integer value representing the port that should be used when connecting to Linux servers over SSH.  Overrides SSHPort [config.json](#post-installation) setting. | String |  | 🔲 Unchecked |\n   | UseShellCommands | Use Shell Commands | Recommended to be set to the default value of 'Y'.  For a detailed explanation of this setting, please refer to [Use Shell Commands Setting](#use-shell-commands-setting) | Bool | True | 🔲 Unchecked |\n\n   The Custom Fields tab should look like this:\n\n   ![RFPkcs12 Custom Fields Tab](docsource/images/RFPkcs12-custom-fields-store-type-dialog.png)\n\n\n   ###### Server Username\n   A username (or valid PAM key if the username is stored in a KF Command configured PAM integration). If acting as an *agent* using local file access, just check *No Value*\n\n\n   \u003e [!IMPORTANT]\n   \u003e This field is created by the `Needs Server` on the Basic tab, do not create this field manually.\n\n\n\n\n   ###### Server Password\n   A password (or valid PAM key if the password is stored in a KF Command configured PAM integration). The password can also be an SSH private key if connecting via SSH to a server using SSH private key authentication. If acting as an *agent* using local file access, just check *No Value*\n\n\n   \u003e [!IMPORTANT]\n   \u003e This field is created by the `Needs Server` on the Basic tab, do not create this field manually.\n\n\n\n\n   ###### Linux File Permissions on Store Creation\n   The LinuxFilePermissionsOnStoreCreation field should contain a three-digit value between 000 and 777 representing the Linux file permissions to be set for the certificate store upon creation. Example: '600' or '755'.  Overrides DefaultLinuxPermissionOnStoreCreation [config.json](#post-installation) setting.\n\n   ![RFPkcs12 Custom Field - LinuxFilePermissionsOnStoreCreation](docsource/images/RFPkcs12-custom-field-LinuxFilePermissionsOnStoreCreation-dialog.png)\n   ![RFPkcs12 Custom Field - LinuxFilePermissionsOnStoreCreation](docsource/images/RFPkcs12-custom-field-LinuxFilePermissionsOnStoreCreation-validation-options-dialog.png)\n\n\n\n   ###### Linux File Owner on Store Creation\n   The LinuxFileOwnerOnStoreCreation field should contain a valid user ID recognized by the destination Linux server, optionally followed by a colon and a group ID if the group owner differs. Example: 'userID' or 'userID:groupID'.  Overrides DefaultOwnerOnStoreCreation [config.json](#post-installation) setting.\n\n   ![RFPkcs12 Custom Field - LinuxFileOwnerOnStoreCreation](docsource/images/RFPkcs12-custom-field-LinuxFileOwnerOnStoreCreation-dialog.png)\n   ![RFPkcs12 Custom Field - LinuxFileOwnerOnStoreCreation](docsource/images/RFPkcs12-custom-field-LinuxFileOwnerOnStoreCreation-validation-options-dialog.png)\n\n\n\n   ###### Sudo Impersonating User\n   The SudoImpersonatingUser field should contain a valid user ID to impersonate using sudo on the destination Linux server. Example: 'impersonatedUserID'.  Overrides DefaultSudoImpersonatedUser [config.json](#post-installation) setting.\n\n   ![RFPkcs12 Custom Field - SudoImpersonatingUser](docsource/images/RFPkcs12-custom-field-SudoImpersonatingUser-dialog.png)\n   ![RFPkcs12 Custom Field - SudoImpersonatingUser](docsource/images/RFPkcs12-custom-field-SudoImpersonatingUser-validation-options-dialog.png)\n\n\n\n   ###### Remove Root Certificate from Chain\n   Remove root certificate from chain when adding/renewing a certificate in a store.\n\n   ![RFPkcs12 Custom Field - RemoveRootCertificate](docsource/images/RFPkcs12-custom-field-RemoveRootCertificate-dialog.png)\n   ![RFPkcs12 Custom Field - RemoveRootCertificate](docsource/images/RFPkcs12-custom-field-RemoveRootCertificate-validation-options-dialog.png)\n\n\n\n   ###### Include Port in SPN for WinRM\n   Internally set the -IncludePortInSPN option when creating the remote PowerShell connection. Needed for some Kerberos configurations.\n\n   ![RFPkcs12 Custom Field - IncludePortInSPN](docsource/images/RFPkcs12-custom-field-IncludePortInSPN-dialog.png)\n   ![RFPkcs12 Custom Field - IncludePortInSPN](docsource/images/RFPkcs12-custom-field-IncludePortInSPN-validation-options-dialog.png)\n\n\n\n   ###### SSH Port\n   Integer value representing the port that should be used when connecting to Linux servers over SSH.  Overrides SSHPort [config.json](#post-installation) setting.\n\n   ![RFPkcs12 Custom Field - SSHPort](docsource/images/RFPkcs12-custom-field-SSHPort-dialog.png)\n   ![RFPkcs12 Custom Field - SSHPort](docsource/images/RFPkcs12-custom-field-SSHPort-validation-options-dialog.png)\n\n\n\n   ###### Use Shell Commands\n   Recommended to be set to the default value of 'Y'.  For a detailed explanation of this setting, please refer to [Use Shell Commands Setting](#use-shell-commands-setting)\n\n   ![RFPkcs12 Custom Field - UseShellCommands](docsource/images/RFPkcs12-custom-field-UseShellCommands-dialog.png)\n   ![RFPkcs12 Custom Field - UseShellCommands](docsource/images/RFPkcs12-custom-field-UseShellCommands-validation-options-dialog.png)\n\n\n\n\n\n   \u003c/details\u003e\n\u003c/details\u003e\n\n### RFDER\n\n\u003cdetails\u003e\u003csummary\u003eClick to expand details\u003c/summary\u003e\n\n\nThe `RFDER` store type can be used to manage DER encoded files.\n\n#### Supported use cases\n1. Single certificate stores with private key in an external file.\n2. Single certificate stores with no private key.\n\n\n\n\n#### Supported Operations\n\n| Operation    | Is Supported                                                                                                           |\n|--------------|------------------------------------------------------------------------------------------------------------------------|\n| Add          | ✅ Checked        |\n| Remove       | ✅ Checked     |\n| Discovery    | ✅ Checked  |\n| Reenrollment | ✅ Checked |\n| Create       | ✅ Checked     |\n\n#### Store Type Creation\n\n##### Using kfutil:\n`kfutil` is a custom CLI for the Keyfactor Command API and can be used to create certificate store types.\nFor more information on [kfutil](https://github.com/Keyfactor/kfutil) check out the [docs](https://github.com/Keyfactor/kfutil?tab=readme-ov-file#quickstart)\n   \u003cdetails\u003e\u003csummary\u003eClick to expand RFDER kfutil details\u003c/summary\u003e\n\n   ##### Using online definition from GitHub:\n   This will reach out to GitHub and pull the latest store-type definition\n   ```shell\n   # RFDER\n   kfutil store-types create RFDER\n   ```\n\n   ##### Offline creation using integration-manifest file:\n   If required, it is possible to create store types from the [integration-manifest.json](./integration-manifest.json) included in this repo.\n   You would first download the [integration-manifest.json](./integration-manifest.json) and then run the following command\n   in your offline environment.\n   ```shell\n   kfutil store-types create --from-file integration-manifest.json\n   ```\n   \u003c/details\u003e\n\n\n#### Manual Creation\nBelow are instructions on how to create the RFDER store type manually in\nthe Keyfactor Command Portal\n   \u003cdetails\u003e\u003csummary\u003eClick to expand manual RFDER details\u003c/summary\u003e\n\n   Create a store type called `RFDER` with the attributes in the tables below:\n\n   ##### Basic Tab\n   | Attribute | Value | Description |\n   | --------- | ----- | ----- |\n   | Name | RFDER | Display name for the store type (may be customized) |\n   | Short Name | RFDER | Short display name for the store type |\n   | Capability | RFDER | Store type name orchestrator will register with. Check the box to allow entry of value |\n   | Supports Add | ✅ Checked | Check the box. Indicates that the Store Type supports Management Add |\n   | Supports Remove | ✅ Checked | Check the box. Indicates that the Store Type supports Management Remove |\n   | Supports Discovery | ✅ Checked | Check the box. Indicates that the Store Type supports Discovery |\n   | Supports Reenrollment | ✅ Checked |  Indicates that the Store Type supports Reenrollment |\n   | Supports Create | ✅ Checked | Check the box. Indicates that the Store Type supports store creation |\n   | Needs Server | ✅ Checked | Determines if a target server name is required when creating store |\n   | Blueprint Allowed | 🔲 Unchecked | Determines if store type may be included in an Orchestrator blueprint |\n   | Uses PowerShell | 🔲 Unchecked | Determines if underlying implementation is PowerShell |\n   | Requires Store Password | ✅ Checked | Enables users to optionally specify a store password when defining a Certificate Store. |\n   | Supports Entry Password | 🔲 Unchecked | Determines if an individual entry within a store can have a password. |\n\n   The Basic tab should look like this:\n\n   ![RFDER Basic Tab](docsource/images/RFDER-basic-store-type-dialog.png)\n\n   ##### Advanced Tab\n   | Attribute | Value | Description |\n   | --------- | ----- | ----- |\n   | Supports Custom Alias | Forbidden | Determines if an individual entry within a store can have a custom Alias. |\n   | Private Key Handling | Optional | This determines if Keyfactor can send the private key associated with a certificate to the store. Required because IIS certificates without private keys would be invalid. |\n   | PFX Password Style | Default | 'Default' - PFX password is randomly generated, 'Custom' - PFX password may be specified when the enrollment job is created (Requires the Allow Custom Password application setting to be enabled.) |\n\n   The Advanced tab should look like this:\n\n   ![RFDER Advanced Tab](docsource/images/RFDER-advanced-store-type-dialog.png)\n\n   \u003e For Keyfactor **Command versions 24.4 and later**, a Certificate Format dropdown is available with PFX and PEM options. Ensure that **PFX** is selected, as this determines the format of new and renewed certificates sent to the Orchestrator during a Management job. Currently, all Keyfactor-supported Orchestrator extensions support only PFX.\n\n   ##### Custom Fields Tab\n   Custom fields operate at the certificate store level and are used to control how the orchestrator connects to the remote target server containing the certificate store to be managed. The following custom fields should be added to the store type:\n\n   | Name | Display Name | Description | Type | Default Value/Options | Required |\n   | ---- | ------------ | ---- | --------------------- | -------- | ----------- |\n   | ServerUsername | Server Username | A username (or valid PAM key if the username is stored in a KF Command configured PAM integration). If acting as an *agent* using local file access, just check *No Value* | Secret |  | 🔲 Unchecked |\n   | ServerPassword | Server Password | A password (or valid PAM key if the password is stored in a KF Command configured PAM integration). The password can also be an SSH private key if connecting via SSH to a server using SSH private key authentication. If acting as an *agent* using local file access, just check *No Value* | Secret |  | 🔲 Unchecked |\n   | LinuxFilePermissionsOnStoreCreation | Linux File Permissions on Store Creation | The LinuxFilePermissionsOnStoreCreation field should contain a three-digit value between 000 and 777 representing the Linux file permissions to be set for the certificate store upon creation. Example: '600' or '755'.  Overrides DefaultLinuxPermissionOnStoreCreation [config.json](#post-installation) setting. | String |  | 🔲 Unchecked |\n   | LinuxFileOwnerOnStoreCreation | Linux File Owner on Store Creation | The LinuxFileOwnerOnStoreCreation field should contain a valid user ID recognized by the destination Linux server, optionally followed by a colon and a group ID if the group owner differs. Example: 'userID' or 'userID:groupID'.  Overrides DefaultOwnerOnStoreCreation [config.json](#post-installation) setting. | String |  | 🔲 Unchecked |\n   | SudoImpersonatingUser | Sudo Impersonating User | The SudoImpersonatingUser field should contain a valid user ID to impersonate using sudo on the destination Linux server. Example: 'impersonatedUserID'.  Overrides [config.json](#post-installation) DefaultSudoImpersonatedUser setting. | String |  | 🔲 Unchecked |\n   | SeparatePrivateKeyFilePath | Separate Private Key File Location | The SeparatePrivateKeyFilePath field should contain the full path and file name where the separate private key file will be stored if it is to be kept outside the main certificate file. Example: '/path/to/privatekey.der'. | String |  | 🔲 Unchecked |\n   | RemoveRootCertificate | Remove Root Certificate from Chain | Remove root certificate from chain when adding/renewing a certificate in a store. | Bool | False | 🔲 Unchecked |\n   | IncludePortInSPN | Include Port in SPN for WinRM | Internally set the -IncludePortInSPN option when creating the remote PowerShell connection. Needed for some Kerberos configurations. | Bool | False | 🔲 Unchecked |\n   | SSHPort | SSH Port | Integer value representing the port that should be used when connecting to Linux servers over SSH.  Overrides SSHPort [config.json](#post-installation) setting. | String |  | 🔲 Unchecked |\n   | UseShellCommands | Use Shell Commands | Recommended to be set to the default value of 'Y'.  For a detailed explanation of this setting, please refer to [Use Shell Commands Setting](#use-shell-commands-setting) | Bool | True | 🔲 Unchecked |\n\n   The Custom Fields tab should look like this:\n\n   ![RFDER Custom Fields Tab](docsource/images/RFDER-custom-fields-store-type-dialog.png)\n\n\n   ###### Server Username\n   A username (or valid PAM key if the username is stored in a KF Command configured PAM integration). If acting as an *agent* using local file access, just check *No Value*\n\n\n   \u003e [!IMPORTANT]\n   \u003e This field is created by the `Needs Server` on the Basic tab, do not create this field manually.\n\n\n\n\n   ###### Server Password\n   A password (or valid PAM key if the password is stored in a KF Command configured PAM integration). The password can also be an SSH private key if connecting via SSH to a server using SSH private key authentication. If acting as an *agent* using local file access, just check *No Value*\n\n\n   \u003e [!IMPORTANT]\n   \u003e This field is created by the `Needs Server` on the Basic tab, do not create this field manually.\n\n\n\n\n   ###### Linux File Permissions on Store Creation\n   The LinuxFilePermissionsOnStoreCreation field should contain a three-digit value between 000 and 777 representing the Linux file permissions to be set for the certificate store upon creation. Example: '600' or '755'.  Overrides DefaultLinuxPermissionOnStoreCreation [config.json](#post-installation) setting.\n\n   ![RFDER Custom Field - LinuxFilePermissionsOnStoreCreation](docsource/images/RFDER-custom-field-LinuxFilePermissionsOnStoreCreation-dialog.png)\n   ![RFDER Custom Field - LinuxFilePermissionsOnStoreCreation](docsource/images/RFDER-custom-field-LinuxFilePermissionsOnStoreCreation-validation-options-dialog.png)\n\n\n\n   ###### Linux File Owner on Store Creation\n   The LinuxFileOwnerOnStoreCreation field should contain a valid user ID recognized by the destination Linux server, optionally followed by a colon and a group ID if the group owner differs. Example: 'userID' or 'userID:groupID'.  Overrides DefaultOwnerOnStoreCreation [config.json](#post-installation) setting.\n\n   ![RFDER Custom Field - LinuxFileOwnerOnStoreCreation](docsource/images/RFDER-custom-field-LinuxFileOwnerOnStoreCreation-dialog.png)\n   ![RFDER Custom Field - LinuxFileOwnerOnStoreCreation](docsource/images/RFDER-custom-field-LinuxFileOwnerOnStoreCreation-validation-options-dialog.png)\n\n\n\n   ###### Sudo Impersonating User\n   The SudoImpersonatingUser field should contain a valid user ID to impersonate using sudo on the destination Linux server. Example: 'impersonatedUserID'.  Overrides [config.json](#post-installation) DefaultSudoImpersonatedUser setting.\n\n   ![RFDER Custom Field - SudoImpersonatingUser](docsource/images/RFDER-custom-field-SudoImpersonatingUser-dialog.png)\n   ![RFDER Custom Field - SudoImpersonatingUser](docsource/images/RFDER-custom-field-SudoImpersonatingUser-validation-options-dialog.png)\n\n\n\n   ###### Separate Private Key File Location\n   The SeparatePrivateKeyFilePath field should contain the full path and file name where the separate private key file will be stored if it is to be kept outside the main certificate file. Example: '/path/to/privatekey.der'.\n\n   ![RFDER Custom Field - SeparatePrivateKeyFilePath](docsource/images/RFDER-custom-field-SeparatePrivateKeyFilePath-dialog.png)\n   ![RFDER Custom Field - SeparatePrivateKeyFilePath](docsource/images/RFDER-custom-field-SeparatePrivateKeyFilePath-validation-options-dialog.png)\n\n\n\n   ###### Remove Root Certificate from Chain\n   Remove root certificate from chain when adding/renewing a certificate in a store.\n\n   ![RFDER Custom Field - RemoveRootCertificate](docsource/images/RFDER-custom-field-RemoveRootCertificate-dialog.png)\n   ![RFDER Custom Field - RemoveRootCertificate](docsource/images/RFDER-custom-field-RemoveRootCertificate-validation-options-dialog.png)\n\n\n\n   ###### Include Port in SPN for WinRM\n   Internally set the -IncludePortInSPN option when creating the remote PowerShell connection. Needed for some Kerberos configurations.\n\n   ![RFDER Custom Field - IncludePortInSPN](docsource/images/RFDER-custom-field-IncludePortInSPN-dialog.png)\n   ![RFDER Custom Field - IncludePortInSPN](docsource/images/RFDER-custom-field-IncludePortInSPN-validation-options-dialog.png)\n\n\n\n   ###### SSH Port\n   Integer value representing the port that should be used when connecting to Linux servers over SSH.  Overrides SSHPort [config.json](#post-installation) setting.\n\n   ![RFDER Custom Field - SSHPort](docsource/images/RFDER-custom-field-SSHPort-dialog.png)\n   ![RFDER Custom Field - SSHPort](docsource/images/RFDER-custom-field-SSHPort-validation-options-dialog.png)\n\n\n\n   ###### Use Shell Commands\n   Recommended to be set to the default value of 'Y'.  For a detailed explanation of this setting, please refer to [Use Shell Commands Setting](#use-shell-commands-setting)\n\n   ![RFDER Custom Field - UseShellCommands](docsource/images/RFDER-custom-field-UseShellCommands-dialog.png)\n   ![RFDER Custom Field - UseShellCommands](docsource/images/RFDER-custom-field-UseShellCommands-validation-options-dialog.png)\n\n\n\n\n\n   \u003c/details\u003e\n\u003c/details\u003e\n\n### RFKDB\n\n\u003cdetails\u003e\u003csummary\u003eClick to expand details\u003c/summary\u003e\n\n\nThe `RFKDB` store type can be used to manage IBM Key Database Files (`KDB`) files.  The IBM utility, `GSKCAPICMD`, is used \nto read and write certificates from and to the target store and is therefore required to be installed on the server where \neach `KDB` certificate store being managed resides, and its location MUST be in the system `$Path`.\n\n#### Supported use cases\n1. One-to-many trust entries - A trust entry is defined as a single certificate without a private key in a certificate store.  Each trust entry is identified with a custom alias.\n2. One-to-many key entries - One-to-many certificates with private keys and optionally the full certificate chain.  Each certificate is identified with a custom alias.\n3. A mix of trust and key entries.\n\n\n\n\n#### Supported Operations\n\n| Operation    | Is Supported                                                                                                           |\n|--------------|------------------------------------------------------------------------------------------------------------------------|\n| Add          | ✅ Checked        |\n| Remove       | ✅ Checked     |\n| Discovery    | ✅ Checked  |\n| Reenrollment | 🔲 Unchecked |\n| Create       | ✅ Checked     |\n\n#### Store Type Creation\n\n##### Using kfutil:\n`kfutil` is a custom CLI for the Keyfactor Command API and can be used to create certificate store types.\nFor more information on [kfutil](https://github.com/Keyfactor/kfutil) check out the [docs](https://github.com/Keyfactor/kfutil?tab=readme-ov-file#quickstart)\n   \u003cdetails\u003e\u003csummary\u003eClick to expand RFKDB kfutil details\u003c/summary\u003e\n\n   ##### Using online definition from GitHub:\n   This will reach out to GitHub and pull the latest store-type definition\n   ```shell\n   # RFKDB\n   kfutil store-types create RFKDB\n   ```\n\n   ##### Offline creation using integration-manifest file:\n   If required, it is possible to create store types from the [integration-manifest.json](./integration-manifest.json) included in this repo.\n   You would first download the [integration-manifest.json](./integration-manifest.json) and then run the following command\n   in your offline environment.\n   ```shell\n   kfutil store-types create --from-file integration-manifest.json\n   ```\n   \u003c/details\u003e\n\n\n#### Manual Creation\nBelow are instructions on how to create the RFKDB store type manually in\nthe Keyfactor Command Portal\n   \u003cdetails\u003e\u003csummary\u003eClick to expand manual RFKDB details\u003c/summary\u003e\n\n   Create a store type called `RFKDB` with the attributes in the tables below:\n\n   ##### Basic Tab\n   | Attribute | Value | Description |\n   | --------- | ----- | ----- |\n   | Name | RFKDB | Display name for the store type (may be customized) |\n   | Short Name | RFKDB | Short display name for the store type |\n   | Capability | RFKDB | Store type name orchestrator will register with. Check the box to allow entry of value |\n   | Supports Add | ✅ Checked | Check the box. Indicates that the Store Type supports Management Add |\n   | Supports Remove | ✅ Checked | Check the box. Indicates that the Store Type supports Management Remove |\n   | Supports Discovery | ✅ Checked | Check the box. Indicates that the Store Type supports Discovery |\n   | Supports Reenrollment | 🔲 Unchecked |  Indicates that the Store Type supports Reenrollment |\n   | Supports Create | ✅ Checked | Check the box. Indicates that the Store Type supports store creation |\n   | Needs Server | ✅ Checked | Determines if a target server name is required when creating store |\n   | Blueprint Allowed | 🔲 Unchecked | Determines if store type may be included in an Orchestrator blueprint |\n   | Uses PowerShell | 🔲 Unchecked | Determines if underlying implementation is PowerShell |\n   | Requires Store Password | ✅ Checked | Enables users to optionally specify a store password when defining a Certificate Store. |\n   | Supports Entry Password | 🔲 Unchecked | Determines if an individual entry within a store can have a password. |\n\n   The Basic tab should look like this:\n\n   ![RFKDB Basic Tab](docsource/images/RFKDB-basic-store-type-dialog.png)\n\n   ##### Advanced Tab\n   | Attribute | Value | Description |\n   | --------- | ----- | ----- |\n   | Supports Custom Alias | Required | Determines if an individual entry within a store can have a custom Alias. |\n   | Private Key Handling | Optional | This determines if Keyfactor can send the private key associated with a certificate to the store. Required because IIS certificates without private keys would be invalid. |\n   | PFX Password Style | Default | 'Default' - PFX password is randomly generated, 'Custom' - PFX password may be specified when the enrollment job is created (Requires the Allow Custom Password application setting to be enabled.) |\n\n   The Advanced tab should look like this:\n\n   ![RFKDB Advanced Tab](docsource/images/RFKDB-advanced-store-type-dialog.png)\n\n   \u003e For Keyfactor **Command versions 24.4 and later**, a Certificate Format dropdown is available with PFX and PEM options. Ensure that **PFX** is selected, as this determines the format of new and renewed certificates sent to the Orchestrator during a Management job. Currently, all Keyfactor-supported Orchestrator extensions support only PFX.\n\n   ##### Custom Fields Tab\n   Custom fields operate at the certificate store level and are used to control how the orchestrator connects to the remote target server containing the certificate store to be managed. The following custom fields should be added to the store type:\n\n   | Name | Display Name | Description | Type | Default Value/Options | Required |\n   | ---- | ------------ | ---- | --------------------- | -------- | ----------- |\n   | ServerUsername | Server Username | A username (or valid PAM key if the username is stored in a KF Command configured PAM integration). If acting as an *agent* using local file access, just check *No Value* | Secret |  | 🔲 Unchecked |\n   | ServerPassword | Server Password | A password (or valid PAM key if the password is stored in a KF Command configured PAM integration). The password can also be an SSH private key if connecting via SSH to a server using SSH private key authentication. If acting as an *agent* using local file access, just check *No Value* | Secret |  | 🔲 Unchecked |\n   | LinuxFilePermissionsOnStoreCreation | Linux File Permissions on Store Creation | The LinuxFilePermissionsOnStoreCreation field should contain a three-digit value between 000 and 777 representing the Linux file permissions to be set for the certificate store upon creation. Example: '600' or '755'.  Overrides DefaultLinuxPermissionOnStoreCreation [config.json](#post-installation) setting. | String |  | 🔲 Unchecked |\n   | LinuxFileOwnerOnStoreCreation | Linux File Owner on Store Creation | The LinuxFileOwnerOnStoreCreation field should contain a valid user ID recognized by the destination Linux server, optionally followed by a colon and a group ID if the group owner differs. Example: 'userID' or 'userID:groupID'.  Overrides DefaultOwnerOnStoreCreation [config.json](#post-installation) setting. | String |  | 🔲 Unchecked |\n   | SudoImpersonatingUser | Sudo Impersonating User | The SudoImpersonatingUser field should contain a valid user ID to impersonate using sudo on the destination Linux server. Example: 'impersonatedUserID'.  Overrides [config.json](#post-installation) DefaultSudoImpersonatedUser setting. | String |  | 🔲 Unchecked |\n   | RemoveRootCertificate | Remove Root Certificate from Chain | Remove root certificate from chain when adding/renewing a certificate in a store. | Bool | False | 🔲 Unchecked |\n   | IncludePortInSPN | Include Port in SPN for WinRM | Internally set the -IncludePortInSPN option when creating the remote PowerShell connection. Needed for some Kerberos configurations. | Bool | False | 🔲 Unchecked |\n   | SSHPort | SSH Port | Integer value representing the port that should be used when connecting to Linux servers over SSH.  Overrides SSHPort [config.json](#post-installation) setting. | String |  | 🔲 Unchecked |\n   | UseShellCommands | Use Shell Commands | Recommended to be set to the default value of 'Y'.  For a detailed explanation of this setting, please refer to [Use Shell Commands Setting](#use-shell-commands-setting) | Bool | True | 🔲 Unchecked |\n\n   The Custom Fields tab should look like this:\n\n   ![RFKDB Custom Fields Tab](docsource/images/RFKDB-custom-fields-store-type-dialog.png)\n\n\n   ###### Server Username\n   A username (or valid PAM key if the username is stored in a KF Command configured PAM integration). If acting as an *agent* using local file access, just check *No Value*\n\n\n   \u003e [!IMPORTANT]\n   \u003e This field is created by the `Needs Server` on the Basic tab, do not create this field manually.\n\n\n\n\n   ###### Server Password\n   A password (or valid PAM key if the password is stored in a KF Command configured PAM integration). The password can also be an SSH private key if connecting via SSH to a server using SSH private key authentication. If acting as an *agent* using local file access, just check *No Value*\n\n\n   \u003e [!IMPORTANT]\n   \u003e This field is created by the `Needs Server` on the Basic tab, do not create this field manually.\n\n\n\n\n   ###### Linux File Permissions on Store Creation\n   The LinuxFilePermissionsOnStoreCreation field should contain a three-digit value between 000 and 777 representing the Linux file permissions to be set for the certificate store upon creation. Example: '600' or '755'.  Overrides DefaultLinuxPermissionOnStoreCreation [config.json](#post-installation) setting.\n\n   ![RFKDB Custom Field - LinuxFilePermissionsOnStoreCreation](docsource/images/RFKDB-custom-field-LinuxFilePermissionsOnStoreCreation-dialog.png)\n   ![RFKDB Custom Field - LinuxFilePermissionsOnStoreCreation](docsource/images/RFKDB-custom-field-LinuxFilePermissionsOnStoreCreation-validation-options-dialog.png)\n\n\n\n   ###### Linux File Owner on Store Creation\n   The LinuxFileOwnerOnStoreCreation field should contain a valid user ID recognized by the destination Linux server, optionally followed by a colon and a group ID if the group owner differs. Example: 'userID' or 'userID:groupID'.  Overrides DefaultOwnerOnStoreCreation [config.json](#post-installation) setting.\n\n   ![RFKDB Custom Field - LinuxFileOwnerOnStoreCreation](docsource/images/RFKDB-custom-field-LinuxFileOwnerOnStoreCreation-dialog.png)\n   ![RFKDB Custom Field - LinuxFileOwnerOnStoreCreation](docsource/images/RFKDB-custom-field-LinuxFileOwnerOnStoreCreation-validation-options-dialog.png)\n\n\n\n   ###### Sudo Impersonating User\n   The SudoImpersonatingUser field should contain a valid user ID to impersonate using sudo on the destination Linux server. Example: 'impersonatedUserID'.  Overrides [config.json](#post-installation) DefaultSudoImpersonatedUser setting.\n\n   ![RFKDB Custom Field - SudoImpersonatingUser](docsource/images/RFKDB-custom-field-SudoImpersonatingUser-dialog.png)\n   ![RFKDB Custom Field - SudoImpersonatingUser](docsource/images/RFKDB-custom-field-SudoImpersonatingUser-validation-options-dialog.png)\n\n\n\n   ###### Remove Root Certificate from Chain\n   Remove root certificate from chain when adding/renewing a certificate in a store.\n\n   ![RFKDB Custom Field - RemoveRootCertificate](docsource/images/RFKDB-custom-field-RemoveRootCertificate-dialog.png)\n   ![RFKDB Custom Field - RemoveRootCertificate](docsource/images/RFKDB-custom-field-RemoveRootCertificate-validation-options-dialog.png)\n\n\n\n   ###### Include Port in SPN for WinRM\n   Internally set the -IncludePortInSPN option when creating the remote PowerShell connection. Needed for some Kerberos configurations.\n\n   ![RFKDB Custom Field - IncludePortInSPN](docsource/images/RFKDB-custom-field-IncludePortInSPN-dialog.png)\n   ![RFKDB Custom Field - IncludePortInSPN](docsource/images/RFKDB-custom-field-IncludePortInSPN-validation-options-dialog.png)\n\n\n\n   ###### SSH Port\n   Integer value representing the port that should be used when connecting to Linux servers over SSH.  Overrides SSHPort [config.json](#post-installation) setting.\n\n   ![RFKDB Custom Field - SSHPort](docsource/images/RFKDB-custom-field-SSHPort-dialog.png)\n   ![RFKDB Custom Field - SSHPort](docsource/images/RFKDB-custom-field-SSHPort-validation-options-dialog.png)\n\n\n\n   ###### Use Shell Commands\n   Recommended to be set to the default value of 'Y'.  For a detailed explanation of this setting, please refer to [Use Shell Commands Setting](#use-shell-commands-setting)\n\n   ![RFKDB Custom Field - UseShellCommands](docsource/images/RFKDB-custom-field-UseShellCommands-dialog.png)\n   ![RFKDB Custom Field - UseShellCommands](docsource/images/RFKDB-custom-field-UseShellCommands-validation-options-dialog.png)\n\n\n\n\n\n   \u003c/details\u003e\n\u003c/details\u003e\n\n### RFORA\n\n\u003cdetails\u003e\u003csummary\u003eClick to expand details\u003c/summary\u003e\n\n\nThe `RFORA` store type can be used to manage `PKCS12` Oracle Wallets. \n\n\u003e NOTE: This should work for `PKCS12` Oracle Wallets installed on both Windows and Linux servers, this has only been tested on wallets installed on Windows.  \n\u003e NOTE: When entering the Store Path for an Oracle Wallet in Keyfactor Command, make sure to INCLUDE the `eWallet.p12` file name that by convention is the name of the `PKCS12` wallet file that gets created.\n\n#### Supported use cases\n1. One-to-many trust entries - A trust entry is defined as a single certificate without a private key in a certificate store.  Each trust entry is identified with a custom alias.\n2. One-to-many key entries - One-to-many certificates with private keys and optionally the full certificate chain.  Each certificate is identified with a custom alias.\n3. A mix of trust and key entries.\n\n\n\n\n#### Supported Operations\n\n| Operation    | Is Supported                                                                                                           |\n|--------------|------------------------------------------------------------------------------------------------------------------------|\n| Add          | ✅ Checked        |\n| Remove       | ✅ Checked     |\n| Discovery    | ✅ Checked  |\n| Reenrollment | 🔲 Unchecked |\n| Create       | ✅ Checked     |\n\n#### Store Type Creation\n\n##### Using kfutil:\n`kfutil` is a custom CLI for the Keyfactor Command API and can be used to create certificate store types.\nFor more information on [kfutil](https://github.com/Keyfactor/kfutil) check out the [docs](https://github.com/Keyfactor/kfutil?tab=readme-ov-file#quickstart)\n   \u003cdetails\u003e\u003csummary\u003eClick to expand RFORA kfutil details\u003c/summary\u003e\n\n   ##### Using online definition from GitHub:\n   This will reach out to GitHub and pull the latest store-type definition\n   ```shell\n   # RFORA\n   kfutil store-types create RFORA\n   ```\n\n   ##### Offline creation using integration-manifest file:\n   If required, it is possible to create store types from the [integration-manifest.json](./integration-manifest.json) included in this repo.\n   You would first download the [integration-manifest.json](./integration-manifest.json) and then run the following command\n   in your offline environment.\n   ```shell\n   kfutil store-types create --from-file integration-manifest.json\n   ```\n   \u003c/details\u003e\n\n\n#### Manual Creation\nBelow are instructions on how to create the RFORA store type manually in\nthe Keyfactor Command Portal\n   \u003cdetails\u003e\u003csummary\u003eClick to expand manual RFORA details\u003c/summary\u003e\n\n   Create a store type called `RFORA` with the attributes in the tables below:\n\n   ##### Basic Tab\n   | Attribute | Value | Description |\n   | --------- | ----- | ----- |\n   | Name | RFORA | Display name for the store type (may be customized) |\n   | Short Name | RFORA | Short display name for the store type |\n   | Capability | RFORA | Store type name orchestrator will register with. Check the box to allow entry of value |\n   | Supports Add | ✅ Checked | Check the box. Indicates that the Store Type supports Management Add |\n   | Supports Remove | ✅ Checked | Check the box. Indicates that the Store Type supports Management Remove |\n   | Supports Discovery | ✅ Checked | Check the box. Indicates that the Store Type supports Discovery |\n   | Supports Reenrollment | 🔲 Unchecked |  Indicates that the Store Type supports Reenrollment |\n   | Supports Create | ✅ Checked | Check the box. Indicates that the Store Type supports store creation |\n   | Needs Server | ✅ Checked | Determines if a target server name is required when creating store |\n   | Blueprint Allowed | 🔲 Unchecked | Determines if store type may be included in an Orchestrator blueprint |\n   | Uses PowerShell | 🔲 Unchecked | Determines if underlying implementation is PowerShell |\n   | Requires Store Password | ✅ Checked | Enables users to optionally specify a store password when defining a Certificate Store. |\n   | Supports Entry Password | 🔲 Unchecked | Determines if an individual entry within a store can have a password. |\n\n   The Basic tab should look like this:\n\n   ![RFORA Basic Tab](docsource/images/RFORA-basic-store-type-dialog.png)\n\n   ##### Advanced Tab\n   | Attribute | Value | Description |\n   | --------- | ----- | ----- |\n   | Supports Custom Alias | Required | Determines if an individual entry within a store can have a custom Alias. |\n   | Private Key Handling | Optional | This determines if Keyfactor can send the private key associated with a certificate to the store. Required because IIS certificates without private keys would be invalid. |\n   | PFX Password Style | Default | 'Default' - PFX password is randomly generated, 'Custom' - PFX password may be specified when the enrollment job is created (Requires the Allow Custom Password application setting to be enabled.) |\n\n   The Advanced tab should look like this:\n\n   ![RFORA Advanced Tab](docsource/images/RFORA-advanced-store-type-dialog.png)\n\n   \u003e For Keyfactor **Command versions 24.4 and later**, a Certificate Format dropdown is available with PFX and PEM options. Ensure that **PFX** is selected, as this determines the format of new and renewed certificates sent to the Orchestrator during a Management job. Currently, all Keyfactor-supported Orchestrator extensions support only PFX.\n\n   ##### Custom Fields Tab\n   Custom fields operate at the certificate store level and are used to control how the orchestrator connects to the remote target server containing the certificate store to be managed. The following custom fields should be added to the store type:\n\n   | Name | Display Name | Description | Type | Default Value/Options | Required |\n   | ---- | ------------ | ---- | --------------------- | -------- | ----------- |\n   | ServerUsername | Server Username | A username (or valid PAM key if the username is stored in a KF Command configured PAM integration). If acting as an *agent* using local file access, just check *No Value* | Secret |  | 🔲 Unchecked |\n   | ServerPassword | Server Password | A password (or valid PAM key if the password is stored in a KF Command configured PAM integration). The password can also be an SSH private key if connecting via SSH to a server using SSH private key authentication. If acting as an *agent* using local file access, just check *No Value* | Secret |  | 🔲 Unchecked |\n   | LinuxFilePermissionsOnStoreCreation | Linux File Permissions on Store Creation | The LinuxFilePermissionsOnStoreCreation field should contain a three-digit value between 000 and 777 representing the Linux file permissions to be set for the certificate store upon creation. Example: '600' or '755'.  Overrides DefaultLinuxPermissionOnStoreCreation [config.json](#post-installation) setting. | String |  | 🔲 Unchecked |\n   | LinuxFileOwnerOnStoreCreation | Linux File Owner on Store Creation | The LinuxFileOwnerOnStoreCreation field should contain a valid user ID recognized by the destination Linux server, optionally followed by a colon and a group ID if the group owner differs. Example: 'userID' or 'userID:groupID'.  Overrides DefaultOwnerOnStoreCreation [config.json](#post-installation) setting. | String |  | 🔲 Unchecked |\n   | SudoImpersonatingUser | Sudo Impersonating User | The SudoImpersonatingUser field should contain a valid user ID to impersonate using sudo on the destination Linux server. Example: 'impersonatedUserID'.  Overrides [config.json](#post-installation) DefaultSudoImpersonatedUser setting. | String |  | 🔲 Unchecked |\n   | WorkFolder | Location to use for creation/removal of work files | The WorkFolder field should contain the path on the managed server where temporary work files can be created, modified, and deleted during Inventory and Management jobs. Example: '/path/to/workfolder'. | String |  | ✅ Checked |\n   | RemoveRootCertificate | Remove Root Certificate from Chain | Remove root certificate from chain when adding/renewing a certificate in a store. | Bool | False | 🔲 Unchecked |\n   | IncludePortInSPN | Include Port in SPN for WinRM | Internally set the -IncludePortInSPN option when creating the remote PowerShell connection. Needed for some Kerberos configurations. | Bool | False | 🔲 Unchecked |\n   | SSHPort | SSH Port | Integer value representing the port that should be used when connecting to Linux servers over SSH.  Overrides SSHPort [config.json](#post-installation) setting. | String |  | 🔲 Unchecked |\n   | UseShellCommands | Use Shell Commands | Recommended to be set to the default value of 'Y'.  For a detailed explanation of this setting, please refer to [Use Shell Commands Setting](#use-shell-commands-setting) | Bool | True | 🔲 Unchecked |\n\n   The Custom Fields tab should look like this:\n\n   ![RFORA Custom Fields Tab](docsource/images/RFORA-custom-fields-store-type-dialog.png)\n\n\n   ###### Server Username\n   A username (or valid PAM key if the username is stored in a KF Command configured PAM integration). If acting as an *agent* using local file access, just check *No Value*\n\n\n   \u003e [!IMPORTANT]\n   \u003e This field is created by the `Needs Server` on the Basic tab, do not create this field manually.\n\n\n\n\n   ###### Server Password\n   A password (or valid PAM key if the password is stored in a KF Command configured PAM integration). The password can also be an SSH private key if connecting via SSH to a server using SSH private key authentication. If acting as an *agent* using local file access, just check *No Value*\n\n\n   \u003e [!IMPORTANT]\n   \u003e This field is created by the `Needs Server` on the Basic tab, do not create this field manually.\n\n\n\n\n   ###### Linux File Permissions on Store Creation\n   The LinuxFilePermissionsOnStoreCreation field should contain a three-digit value between 000 and 777 representing the Linux file permissions to be set for the certificate store upon creation. Example: '600' or '755'.  Overrides DefaultLinuxPermissionOnStoreCreation [config.json](#post-installation) setting.\n\n   ![RFORA Custom Field - LinuxFilePermissionsOnStoreCreation](docsource/images/RFORA-custom-field-LinuxFilePermissionsOnStoreCreation-dialog.png)\n   ![RFORA Custom Field - LinuxFilePermissionsOnStoreCreation](docsource/images/RFORA-custom-field-LinuxFilePermissionsOnStoreCreation-validation-options-dialog.png)\n\n\n\n   ###### Linux File Owner on Store Creation\n   The LinuxFileOwnerOnStoreCreation field should contain a valid user ID recognized by the destination Linux server, optionally followed by a colon and a group ID if the group owner differs. Example: 'userID' or 'userID:groupID'.  Overrides DefaultOwnerOnStoreCreation [config.json](#post-installation) setting.\n\n   ![RFORA Custom Field - LinuxFileOwnerOnStoreCreation](docsource/images/RFORA-custom-field-LinuxFileOwnerOnStoreCreation-dialog.png)\n   ![RFORA Custom Field - LinuxFileOwnerOnStoreCreation](docsource/images/RFORA-custom-field-LinuxFileOwnerOnStoreCreation-validation-options-dialog.png)\n\n\n\n   ###### Sudo Impersonating User\n   The SudoImpersonatingUser field should contain a valid user ID to impersonate using sudo on the destination Linux server. Example: 'impersonatedUserID'.  Overrides [config.json](#post-installation) DefaultSudoImpersonatedUser setting.\n\n   ![RFORA Custom Field - SudoImpersonatingUser](docsource/images/RFORA-custom-field-SudoImpersonatingUser-dialog.png)\n   ![RFORA Custom Field - SudoImpersonatingUser](docsource/images/RFORA-custom-field-SudoImpersonatingUser-validation-options-dialog.png)\n\n\n\n   ###### Location to use for creation/removal of work files\n   The WorkFolder field should contain the path on the managed server where temporary work files can be created, modified, and deleted during Inventory and Management jobs. Example: '/path/to/workfolder'.\n\n   ![RFORA Custom Field - WorkFolder](docsource/images/RFORA-custom-field-WorkFolder-dialog.png)\n   ![RFORA Custom Field - WorkFolder](docsource/images/RFORA-custom-field-WorkFolder-validation-options-dialog.png)\n\n\n\n   ###### Remove Root Certificate from Chain\n   Remove root certificate from chain when adding/renewing a certificate in a store.\n\n   ![RFORA Custom Field - RemoveRootCertificate](docsource/images/RFORA-custom-field-RemoveRootCertificate-dialog.png)\n   ![RFORA Custom Field - RemoveRootCertificate](docsource/images/RFORA-custom-field-RemoveRootCertificate-validation-options-dialog.png)\n\n\n\n   ###### Include Port in SPN for WinRM\n   Internally set the -IncludePortInSPN option when creating the remote PowerShell connection. Needed for some Kerberos configurations.\n\n   ![RFORA Custom Field - IncludePortInSPN](docsource/images/RFORA-custom-field-IncludePortInSPN-dialog.png)\n   ![RFORA Custom Field - IncludePortInSPN](docsource/images/RFORA-custom-field-IncludePortInSPN-validation-options-dialog.png)\n\n\n\n   ###### SSH Port\n   Integer value representing the port that should be used when connecting to Linux servers over SSH.  Overrides SSHPort [config.json](#post-installation) setting.\n\n   ![RFORA Custom Field - SSHPort](docsource/images/RFORA-custom-field-SSHPort-dialog.png)\n   ![RFORA Custom Field - SSHPort](docsource/images/RFORA-custom-field-SSHPort-validation-options-dialog.png)\n\n\n\n   ###### Use Shell Commands\n   Recommended to be set to the default value of 'Y'.  For a detailed explanation of this setting, please refer to [Use Shell Commands Setting](#use-shell-commands-setting)\n\n   ![RFORA Custom Field - UseShellCommands](docsource/images/RFORA-custom-field-UseShellCommands-dialog.png)\n   ![RFORA Custom Field - UseShellCommands](docsource/images/RFORA-custom-field-UseShellCommands-validation-options-dialog.png)\n\n\n\n\n\n   \u003c/details\u003e\n\u003c/details\u003e\n\n\n## Installation\n\n1. **Download the latest Remote File Universal Orchestrator extension from GitHub.**\n\n    Navigate to the [Remote File Universal Orchestrator extension GitHub version page](https://github.com/Keyfactor/remote-file-orchestrator/releases/latest). Refer to the compatibility matrix below to determine the asset should be downloaded. Then, click the corresponding asset to download the zip archive.\n\n   | Universal Orchestrator Version | Latest .NET version installed on the Universal Orchestrator server | `rollForward` condition in `Orchestrator.runtimeconfig.json` | `remote-file-orchestrator` .NET version to download |\n   | --------- | ----------- | ----------- | ----------- |\n   | Between `11.0.0` and `11.5.1` (inclusive) | `net8.0` | `LatestMajor` | `net8.0` |\n   | `11.6` _and_ newer | `net8.0` | | `net8.0` | \n\n    Unzip the archive containing extension assemblies to a known location.\n\n    \u003e **Note** If you don't see an asset with a corresponding .NET version, you should always assume that it was compiled for `net8.0`.\n\n2. **Locate the Universal Orchestrator extensions directory.**\n\n    * **Default on Windows** - `C:\\Program Files\\Keyfactor\\Keyfactor Orchestrator\\extensions`\n    * **Default on Linux** - `/opt/keyfactor/orchestrator/extensions`\n\n3. **Create a new directory for the Remote File Universal Orchestrator extension inside the extensions directory.**\n\n    Create a new directory called `remote-file-orchestrator`.\n    \u003e The directory name does not need to match any names used elsewhere; it just has to be unique within the extensions directory.\n\n4. **Copy the contents of the downloaded and unzipped assemblies from __step 2__ to the `remote-file-orchestrator` directory.**\n\n5. **Restart the Universal Orchestrator service.**\n\n    Refer to [Starting/Restarting the Universal Orchestrator service](https://software.keyfactor.com/Core-OnPrem/Current/Content/InstallingAgents/NetCoreOrchestrator/StarttheService.htm).\n\n\n6. **(optional) PAM Integration**\n\n    The Remote File Universal Orchestrator extension is compatible with all supported Keyfactor PAM extensions to resolve PAM-eligible secrets. PAM extensions running on Universal Orchestrators enable secure retrieval of secrets from a connected PAM provider.\n\n    To configure a PAM provider, [reference the Keyfactor Integration Catalog](https://keyfactor.github.io/integrations-catalog/content/pam) to select an extension and follow the associated instructions to install it on the Universal Orchestrator (remote).\n\n\n\u003e The above installation steps can be supplemented by the [official Command documentation](https://software.keyfactor.com/Core-OnPrem/Current/Content/InstallingAgents/NetCoreOrchestrator/CustomExtensions.htm?Highlight=extensions).\n\n\n## Post Installation\n\nThe Remote File Orchestrator Extension uses a JSON configuration file. It is located at `{Keyfactor Orchestrator Installation Folder}\\Extensions\\RemoteFile\\config.json`. None of the values are required, and a description of each follows below:\n\n```json\n{\n  \"UseSudo\": \"N\",\n  \"DefaultSudoImpersonatedUser\": \"\",\n  \"CreateStoreIfMissing\": \"N\",\n  \"UseNegotiate\": \"N\",\n  \"SeparateUploadFilePath\": \"\",\n  \"DefaultLinuxPermissionsOnStoreCreation\": \"600\",\n  \"DefaultOwnerOnStoreCreation\":","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fkeyfactor%2Fremote-file-orchestrator","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fkeyfactor%2Fremote-file-orchestrator","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fkeyfactor%2Fremote-file-orchestrator/lists"}