-
Notifications
You must be signed in to change notification settings - Fork 35
Add docs for client-gw mtls support #123
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
base: main
Are you sure you want to change the base?
Changes from 3 commits
File filter
Filter by extension
Conversations
Jump to
Diff view
Diff view
There are no files selected for viewing
| Original file line number | Diff line number | Diff line change |
|---|---|---|
|
|
@@ -15,7 +15,6 @@ | |
| *.war | ||
| *.nar | ||
| *.ear | ||
| *.zip | ||
| *.tar.gz | ||
| *.rar | ||
|
|
||
|
|
||
| Original file line number | Diff line number | Diff line change | ||||||||
|---|---|---|---|---|---|---|---|---|---|---|
| @@ -0,0 +1,92 @@ | ||||||||||
| # Secure Client-Gateway Communication with Mutual TLS | ||||||||||
|
|
||||||||||
| Mutual TLS (mTLS) adds client-side certificate authentication to ensure only trusted clients can call an API. In WSO2 Bijira, you enable mTLS at the API proxy level by configuring the MTLS Authenticator mediation policy to validate client certificates or an intermediate CA chain during the TLS handshake. | ||||||||||
|
|
||||||||||
| This guide walks through the end-to-end steps to configure mTLS for an API proxy. | ||||||||||
|
|
||||||||||
| ## Prerequisites | ||||||||||
|
|
||||||||||
| 1. Set up [ Ballerina 2201.5.5](https://ballerina.io/downloads/swan-lake-release-notes/swan-lake-2201.5.5). | ||||||||||
| 2. Open the `~/.ballerina/settings.toml` file and ensure you have configured an access token to Ballerina Central. If you have not configured an access token, follow the steps given below to configure one. | ||||||||||
| 1. Generate a token via [https://central.ballerina.io/dashboard?tab=token](https://central.ballerina.io/dashboard?tab=token). | ||||||||||
| 2. Download the generated `Settings.toml` file and copy it to your local `~/.ballerina` directory. | ||||||||||
|
|
||||||||||
| Alternatively, you can set the access token via the `BALLERINA_CENTRAL_ACCESS_TOKEN` environment variable. | ||||||||||
|
|
||||||||||
| ``` bash | ||||||||||
| export BALLERINA_CENTRAL_ACCESS_TOKEN=<access-token> | ||||||||||
| ``` | ||||||||||
|
|
||||||||||
| ## Configure mTLS Policy | ||||||||||
|
|
||||||||||
| 1. Mutual SSL will be configured through a mediation. Please click to download the [mediation app](../../assets/files/develop-api-proxy/policy/authenticator-mtls.zip). | ||||||||||
| 2. Open the `Ballerina.toml` file in your preferred text editor and modify the `org` parameter to match your current Bijira organization. | ||||||||||
| 3. Build the mediation app and publish it to the Ballerina central using the following commands. | ||||||||||
|
|
||||||||||
| !!!note | ||||||||||
| If setting up in dev environment use `export BALLERINA_DEV_CENTRAL=true` before following commands. | ||||||||||
|
|
||||||||||
| ```bash | ||||||||||
| bal pack | ||||||||||
| bal push | ||||||||||
| ``` | ||||||||||
|
|
||||||||||
| ## Generate a Self-signed Certificate | ||||||||||
|
|
||||||||||
| 1. If you don't have a CA-signed certificate, use the following command to generate a self-signed certificate. | ||||||||||
|
|
||||||||||
| ```bash | ||||||||||
| openssl req -x509 -newkey rsa:2048 -keyout mykey.pem -out mycert.pem -days 365 -nodes | ||||||||||
| ``` | ||||||||||
|
|
||||||||||
| 2. Open the certificate via the preferred text editor and get the content in PEM format. Convert the content in to URL encoding and copy the content to the clipboard for future use. | ||||||||||
|
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. Fix typo and add concrete URL encoding examples. Line 42 contains a typo ("in to" should be "into") and lacks concrete instructions for URL encoding. Users unfamiliar with URL encoding will need specific methods. 🔎 Proposed fix-2. Open the certificate via the preferred text editor and get the content in PEM format. Convert the content in to URL encoding and copy the content to the clipboard for future use.
+2. Open the certificate via your preferred text editor and get the content in PEM format. Convert the content into URL encoding using one of the following methods:
+
+ **Using Python:**
+ ```bash
+ python3 -c "import urllib.parse; print(urllib.parse.quote(open('mycert.pem').read()))"
+ ```
+
+ **Using an online tool:**
+ Visit a URL encoder tool and paste your certificate content to encode it.
+
+ Copy the encoded output to the clipboard for future use.📝 Committable suggestion
Suggested change
🤖 Prompt for AI Agents |
||||||||||
|
|
||||||||||
| ## Apply mTLS to API Proxy | ||||||||||
|
|
||||||||||
| 1. Sign in to the [Bijira Console](https://console.bijira.dev/). | ||||||||||
| 2. In the Proxy Listing pane, click on the API proxy for which you want to enable MTLS. For instructions on how to create an API proxy component, see [Create an API Proxy](../../create-api-proxy/my-apis/http/import-api-contract.md). | ||||||||||
| 3. Go to Develop, Policy page and click "Resource level policies". | ||||||||||
|
|
||||||||||
| !!! note | ||||||||||
| If you don't need OAuth2 to be enabled, remove the "OAuth2" mediation policy. | ||||||||||
|
|
||||||||||
| 4. Under the policies, select "MTLS Authenticator". | ||||||||||
| 5. Paste the URL-encoded certificate content you copied to the clipboard at the step 2 of [Generate a Self-signed Certificate](#generate-a-self-signed-certificate) section above and save. | ||||||||||
|
|
||||||||||
| !!! note | ||||||||||
| If you need to support multiple client certificates, you can use an intermediate CA certificate and add here. Once that is done, all certificates signed by the intermediate certificate will be allowed to access the resource. | ||||||||||
|
|
||||||||||
|  | ||||||||||
|
|
||||||||||
| 6. Deploy the API to development and then to the production environment. | ||||||||||
|
|
||||||||||
| ## Invoke the API Proxy | ||||||||||
|
|
||||||||||
| !!! note | ||||||||||
| If you haven’t removed OAuth2 policy, you will have to subscribe to the API and get access token. | ||||||||||
|
|
||||||||||
| You can use curl for this. Get the URL for the API from the dev portal and invoke API. | ||||||||||
|
|
||||||||||
| ```bash | ||||||||||
| curl --request GET \ | ||||||||||
| --url <api_proxy_endpoint_url> \ | ||||||||||
| --header 'Accept: application/json' \ | ||||||||||
| --cert /<path>/mycert.pem \ | ||||||||||
| --key /<path>/mykey.pem | ||||||||||
| ``` | ||||||||||
|
|
||||||||||
| For a failed scenario, you will get the following error. | ||||||||||
|
|
||||||||||
| ```json | ||||||||||
| { | ||||||||||
| "error_message":"Invalid Credentials", | ||||||||||
| "code":"900901", | ||||||||||
| "error_description":"Make sure you have provided the correct security credentials." | ||||||||||
| } | ||||||||||
| ``` | ||||||||||
|
|
||||||||||
| ## Configure a Custom Domain | ||||||||||
|
|
||||||||||
| To configure a custom domain for an API Proxy, follow the steps mentioned in [Configure a Custom Domain for Your Organization](../../../administer/settings/configure-a-custom-domain-for-your-organization/). | ||||||||||
|
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. Correct the relative path. Line 90 uses one too many directory levels in the relative path. Change 🔎 Proposed fix-To configure a custom domain for an API Proxy, follow the steps mentioned in [Configure a Custom Domain for Your Organization](../../../administer/settings/configure-a-custom-domain-for-your-organization/).
+To configure a custom domain for an API Proxy, follow the steps mentioned in [Configure a Custom Domain for Your Organization](../../administer/settings/configure-a-custom-domain-for-your-organization/).📝 Committable suggestion
Suggested change
🤖 Prompt for AI Agents |
||||||||||
|
|
||||||||||
| Once the above step is completed, contact the Bijira team via [bijira-help@wso2.com](mailto:bijira-help@wso2.com) to enable mTLS for the given custom domain. | ||||||||||
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Update Ballerina version and fix link text formatting.
Line 9 still references Ballerina 2201.5.5 (released 2023), which is outdated. Additionally, there is a space after the opening bracket in the link text (MD039 violation).
🔎 Proposed fix
📝 Committable suggestion
🧰 Tools
🪛 markdownlint-cli2 (0.18.1)
9-9: Spaces inside link text
(MD039, no-space-in-links)
🤖 Prompt for AI Agents