Skip to content

Commit f161f56

Browse files
authored
Merge pull request #307349 from MicrosoftDocs/main
Auto Publish – main to live - 2025-10-24 17:00 UTC
2 parents a3dfeb3 + 63fb6b1 commit f161f56

27 files changed

Lines changed: 1487 additions & 559 deletions

articles/app-service/environment/overview-certificates.md

Lines changed: 207 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@ title: Certificates in App Service Environment
33
description: Explain the use of certificates in an App Service Environment. Learn how certificate bindings work on the single-tenanted apps in an App Service Environment.
44
author: seligj95
55
ms.topic: overview
6-
ms.date: 10/3/2023
6+
ms.date: 10/24/2025
77
ms.author: jordanselig
88
ms.service: azure-app-service
99
---
@@ -34,7 +34,7 @@ You can [configure the TLS setting](../configure-ssl-bindings.md#enforce-tls-ver
3434
A common use case is to configure your app as a client in a client-server model. If you secure your server with a private CA certificate, you need to upload the client certificate (*.cer* file) to your app. The following instructions load certificates to the trust store of the workers that your app is running on. You only need to upload the certificate once to use it with apps that are in the same App Service plan.
3535

3636
>[!NOTE]
37-
> Private client certificates are only supported from custom code in Windows code apps. Private client certificates are not supported outside the app. This limits usage in scenarios such as pulling the app container image from a registry using a private certificate and TLS validating through the front-end servers using a private certificate.
37+
> Private client certificates are only supported from custom code in Windows code apps. Private client certificates aren't supported outside the app. This limits usage in scenarios such as pulling the app container image from a registry using a private certificate and TLS validating through the front-end servers using a private certificate.
3838
3939
Follow these steps to upload the certificate (*.cer* file) to your app in your App Service Environment. The *.cer* file can be exported from your certificate. For testing purposes, there's a PowerShell example at the end to generate a temporary self-signed certificate:
4040

@@ -63,12 +63,216 @@ $fileName = "exportedcert.cer"
6363
Export-Certificate -Cert $certThumbprint -FilePath $fileName -Type CERT
6464
```
6565

66+
## Root Certificate API
67+
68+
The Root Certificate API allows you to programmatically add root certificates to your App Service Environment v3, making them available to all apps during startup. Root certificates are public certificates that identify a root certificate authority (CA) and are essential for establishing trust in secure communications. By adding root certificates to your App Service Environment, all apps hosted within that environment have them installed in their root store, ensuring secure communication with internal services or APIs that use certificates issued by private or enterprise CAs.
69+
70+
This capability is available for both Windows and Linux-based apps in App Service Environment v3. Root certificates added through this API are automatically injected into the trust store of apps at startup, eliminating the need for per-app configurations and simplifying certificate lifecycle management.
71+
72+
### Important considerations
73+
74+
- Certificates can be added to an App Service Environment using the REST API, Azure CLI, ARM templates, Bicep, or Terraform.
75+
- If you add a certificate to an App Service Environment with existing or running apps, you must **stop** and then **start** each app for the certificate store to be updated with the new root certificate. Adding all certificates before creating your apps is recommended to eliminate the need to stop and start apps individually.
76+
- Stop and start operations are different from restarting your app. You must use the dedicated stop and start commands available in the Azure portal, Azure CLI, or REST API.
77+
- Starting and stopping apps causes temporary outages while the apps are stopped.
78+
- If you have multiple apps and want to automate this process, you can use the Azure CLI or REST API.
79+
- During the certificate addition process, you must provide the entire certificate blob in the request. You can't upload a *.cer* file directly.
80+
81+
### Add a root certificate
82+
83+
To add a root certificate to your App Service Environment, use one of the following methods:
84+
85+
### [REST API](#tab/rest-api)
86+
87+
```http
88+
PUT https://management.azure.com/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Web/hostingEnvironments/{aseName}/publicCertificates/{certificateName}?api-version=2024-04-01
89+
90+
Content-Type: application/json
91+
92+
{
93+
"location": "{location}",
94+
"properties": {
95+
"blob": "{raw certificate blob}",
96+
"isRoot": true
97+
}
98+
}
99+
```
100+
101+
### [Azure CLI](#tab/azure-cli)
102+
103+
```azurecli-interactive
104+
az rest --method put \
105+
--url https://management.azure.com/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Web/hostingEnvironments/{aseName}/publicCertificates/{certificateName}?api-version=2024-04-01 \
106+
--body "{'location': '{location}', 'properties': {'blob': '{raw certificate blob}', 'isRoot': true}}"
107+
```
108+
109+
### [ARM Template](#tab/arm-template)
110+
111+
To create a root certificate resource in your ARM template, add the following JSON:
112+
113+
```json
114+
{
115+
"type": "Microsoft.Web/hostingEnvironments/publicCertificates",
116+
"apiVersion": "2024-04-01",
117+
"name": "{certificateName}",
118+
"location": "{location}",
119+
"properties": {
120+
"blob": "{raw certificate blob}",
121+
"isRoot": true
122+
}
123+
}
124+
```
125+
126+
### [Bicep](#tab/bicep)
127+
128+
```bicep
129+
resource rootCertificate 'Microsoft.Web/hostingEnvironments/publicCertificates@2024-04-01' = {
130+
name: '{certificateName}'
131+
parent: ase
132+
location: location
133+
properties: {
134+
blob: '{raw certificate blob}'
135+
isRoot: true
136+
}
137+
}
138+
```
139+
140+
### [Terraform](#tab/terraform)
141+
142+
To create a root certificate resource in your Terraform configuration, add the following to your template. You must include `schema_validation_enabled = false` for the resource to be created successfully.
143+
144+
```hcl
145+
resource "azapi_resource" "{certificateName}" {
146+
type = "Microsoft.Web/hostingEnvironments/publicCertificates@2024-04-01"
147+
name = "{certificateName}"
148+
parent_id = "/subscriptions/<sub>/resourceGroups/<rg>/providers/Microsoft.Web/hostingEnvironments/<aseName>"
149+
body = jsonencode({
150+
location = var.location
151+
properties = {
152+
blob = "{raw certificate blob}"
153+
isRoot = true
154+
}
155+
kind = "string"
156+
})
157+
schema_validation_enabled = false
158+
}
159+
```
160+
161+
-----
162+
163+
Replace the following placeholders:
164+
165+
- `{subscriptionId}`: Your Azure subscription ID
166+
- `{resourceGroupName}`: The resource group containing your App Service Environment
167+
- `{aseName}`: The name of your App Service Environment
168+
- `{certificateName}`: A name for your certificate resource
169+
- `{location}`: The Azure region where your App Service Environment is deployed
170+
- `{raw certificate blob}`: The raw certificate blob from your root certificate
171+
172+
### Remove a root certificate
173+
174+
To remove a root certificate from your App Service Environment:
175+
176+
### [REST API](#tab/rest-api-remove)
177+
178+
```http
179+
DELETE https://management.azure.com/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Web/hostingEnvironments/{aseName}/publicCertificates/{certificateName}?api-version=2024-04-01
180+
```
181+
182+
### [Azure CLI](#tab/azure-cli-remove)
183+
184+
```azurecli-interactive
185+
az rest --method delete \
186+
--url https://management.azure.com/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Web/hostingEnvironments/{aseName}/publicCertificates/{certificateName}?api-version=2024-04-01
187+
```
188+
189+
-----
190+
191+
### Retrieve a specific certificate
192+
193+
To retrieve a specific root certificate from your App Service Environment:
194+
195+
### [REST API](#tab/rest-api-get-specific)
196+
197+
```http
198+
GET https://management.azure.com/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Web/hostingEnvironments/{aseName}/publicCertificates/{certificateName}?api-version=2024-04-01
199+
```
200+
201+
### [Azure CLI](#tab/azure-cli-get-specific)
202+
203+
```azurecli-interactive
204+
az rest --method get \
205+
--url https://management.azure.com/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Web/hostingEnvironments/{aseName}/publicCertificates/{certificateName}?api-version=2024-04-01
206+
```
207+
208+
-----
209+
210+
### Retrieve all public certificates
211+
212+
To retrieve all public certificates from your App Service Environment:
213+
214+
### [REST API](#tab/rest-api-get-all)
215+
216+
```http
217+
GET https://management.azure.com/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Web/hostingEnvironments/{aseName}/publicCertificates?api-version=2024-04-01
218+
```
219+
220+
### [Azure CLI](#tab/azure-cli-get-all)
221+
222+
```azurecli-interactive
223+
az rest --method get \
224+
--url https://management.azure.com/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Web/hostingEnvironments/{aseName}/publicCertificates?api-version=2024-04-01
225+
```
226+
227+
-----
228+
229+
### Stop and start apps
230+
231+
After adding a root certificate to an App Service Environment with existing apps, you must stop and start each app to update the certificate store.
232+
233+
### [Azure portal](#tab/portal)
234+
235+
1. Navigate to your app in the Azure portal.
236+
1. Select **Stop** from the overview page.
237+
1. Wait for the app to stop completely.
238+
1. Select **Start** to restart the app.
239+
240+
### [REST API](#tab/rest-api-app)
241+
242+
Stop the app:
243+
244+
```http
245+
POST https://management.azure.com/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Web/sites/{appName}/stop?api-version=2024-04-01
246+
```
247+
248+
Start the app:
249+
250+
```http
251+
POST https://management.azure.com/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Web/sites/{appName}/start?api-version=2024-04-01
252+
```
253+
254+
### [Azure CLI](#tab/azure-cli-app)
255+
256+
Stop the app:
257+
258+
```azurecli-interactive
259+
az webapp stop --name {appName} --resource-group {resourceGroupName}
260+
```
261+
262+
Start the app:
263+
264+
```azurecli-interactive
265+
az webapp start --name {appName} --resource-group {resourceGroupName}
266+
```
267+
268+
---
269+
66270
## Private server certificate
67271

68272
If your app acts as a server in a client-server model, either behind a reverse proxy or directly with private client and you're using a private CA certificate, you need to upload the server certificate (*.pfx* file) with the full certificate chain to your app and bind the certificate to the custom domain. Because the infrastructure is dedicated to your App Service Environment, the full certificate chain is added to the trust store of the servers. You only need to upload the certificate once to use it with apps that are in the same App Service Environment.
69273

70274
>[!NOTE]
71-
> If you uploaded your certificate prior to October 1, 2023, you need to reupload and rebind the certificate for the full certificate chain to be added to the servers.
275+
> If you uploaded your certificate before October 1, 2023, you need to reupload and rebind the certificate for the full certificate chain to be added to the servers.
72276
73277
Follow the [secure custom domain with TLS/SSL](../configure-ssl-bindings.md) tutorial to upload/bind your private CA rooted certificate to the app in your App Service Environment.
74278

articles/application-gateway/for-containers/alb-controller-helm-chart.md

Lines changed: 6 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -25,13 +25,13 @@ The following parameters are supported for configuration during installation:
2525
- installGatewayApiCRDs
2626
- logLevel
2727
- namespace
28-
- seucrityPolicyFeatureFlag
28+
- securityPolicyFeatureFlag
2929

3030
## Values
3131

3232
| Key | Type | Default | Description |
3333
| ----- | ------ | --------- | ------------- |
34-
| albController.controller | object | `{"replicaCount":2,"resource":{"limits":{"cpu":"400m","memory":"400Mi"},"requests":{"cpu":"100m","memory":"200Mi"}},"tolerations":[]}` | ALB Controller parameters |
34+
| albController.controller | object | `{"nodeSelector":{},"replicaCount":2,"resource":{"limits":{"cpu":"400m","memory":"400Mi"},"requests":{"cpu":"100m","memory":"200Mi"}},"tolerations":[]}` | ALB Controller parameters |
3535
| albController.controller.nodeSelector | object | {} | nodeselector for alb-cotnroller |
3636
| albController.controller.replicaCount | int | `2` | ALB Controller's replica count. |
3737
| albController.controller.resource | object | `{"limits":{"cpu":"400m","memory":"400Mi"},"requests":{"cpu":"100m","memory":"200Mi"}}` | ALB Controller's container resource parameters. |
@@ -45,10 +45,13 @@ The following parameters are supported for configuration during installation:
4545
| albController.image.pullPolicy | string | `"IfNotPresent"` | Container image pull policy for ALB Controller containers. |
4646
| albController.image.registry | string | `"mcr.microsoft.com"` | Container image registry for ALB Controller. |
4747
| albController.imagePullSecrets | list | `[]` | |
48+
| albController.init | object | `{"resource":{"limits":{"cpu":"200m","memory":"128Mi"},"requests":{"cpu":"100m","memory":"128Mi"}}}` | init parameters |
49+
| albController.init.resource | object | `{"limits":{"cpu":"200m","memory":"128Mi"},"requests":{"cpu":"100m","memory":"128Mi"}}` | init container's resource parameters |
4850
| albController.installGatewayApiCRDs | bool | `true` | A flag to enable/disable installation of Gateway API CRDs. |
4951
| albController.logLevel | string | `"info"` | Log level of ALB Controller. |
5052
| albController.namespace | string | `"azure-alb-system"` | Namespace to deploy ALB Controller components in. |
51-
| albController.securityPolicyFeatureFlag | bool | `true` | Enable Application Load Balancer Security Policy Resource (WAF Preview). |
53+
| albController.podIdentity | object | `{"clientID":""}` | pod-identity parameters for alb-controller |
54+
| albController.securityPolicyFeatureFlag | bool | `true` | Enable Application Load Balancer Security Policy Resource. |
5255

5356
## nodeSelector
5457

articles/application-gateway/for-containers/alb-controller-release-notes.md

Lines changed: 6 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@ services: application-gateway
55
author: mbender-ms
66
ms.service: azure-appgw-for-containers
77
ms.topic: release-notes
8-
ms.date: 10/15/2025
8+
ms.date: 10/23/2025
99
ms.author: mbender
1010
# Customer intent: As a Kubernetes operator, I want to access the release notes for the ALB Controller, so that I can understand the latest updates and changes to optimize my configuration and deployments of Application Gateway for Containers.
1111
---
@@ -27,16 +27,17 @@ Instructions for new or existing deployments of ALB Controller are found in the
2727

2828
| ALB Controller Version | Gateway API Version | Minimum Kubernetes Version | Release Notes |
2929
| ---------------------- | ------------------- | ------------------ | ------------- |
30-
| 1.7.12 | v1.2.1 | v1.27 | [Improved handling for missing Provider ID](https://github.com/Azure/AKS/issues/5291) |
30+
| 1.8.9 | v1.2.1 | v1.27 | [Slow start load balancing algorithm](api-specification-kubernetes.md#alb.networking.azure.io/v1.BackendLoadBalancingPolicy), Image updated to use [Azure Linux 3.0](https://github.com/microsoft/azurelinux), [nodeSelector fix](https://github.com/Azure/AKS/issues/5302), miscellaneous bug fixes and enhancements |
3131

3232
## Release history
3333

3434
| ALB Controller Version | Gateway API Version | Minimum Kubernetes Version | Release Notes |
3535
| ---------------------- | ------------------- | ------------------ | ------------- |
36-
| 1.7.9 | v1.2.1 | v1.27 | [Web Application Firewall (WAF) Public Preview](https://aka.ms/agc/waf), Updated to Gateway API v1.2.1, [nodeSelector support](https://github.com/Azure/AKS/issues/4370#issuecomment-2894487836), [Permissions fix for Overlay networks](https://github.com/Azure/AKS/issues/5039), fix for SAN regex matching, misc. performance improvements |
37-
| 1.6.7 | v1.1.1 | v1.27 | [Fix for SSE timeout value of 0](https://aka.ms/qa2153620), [Overlay CNI fix](https://github.com/Azure/AKS/issues/4950), [support readinessProbe port by name](https://github.com/Azure/AKS/issues/4861), leverage init container during bootstrap, misc. bug fixes and improvements |
36+
| 1.7.12 | v1.2.1 | v1.27 | Hotfix for pod crash due to [invalid Provider ID](https://github.com/Azure/AKS/issues/5310) |
37+
| 1.7.9 | v1.2.1 | v1.27 | [Web Application Firewall (WAF) Public Preview](https://aka.ms/agc/waf), Updated to Gateway API v1.2.1, [nodeSelector support](https://github.com/Azure/AKS/issues/4370#issuecomment-2894487836), [Permissions fix for Overlay networks](https://github.com/Azure/AKS/issues/5039), fix for SAN regex matching, miscellaneous performance improvements |
38+
| 1.6.7 | v1.1.1 | v1.27 | [Fix for SSE timeout value of 0](https://aka.ms/qa2153620), [Overlay CNI fix](https://github.com/Azure/AKS/issues/4950), [support readinessProbe port by name](https://github.com/Azure/AKS/issues/4861), leverage init container during bootstrap, miscellaneous bug fixes and improvements |
3839
| 1.5.2 | v1.1.1 | v1.26 | Support for Azure CNI Overlay |
39-
| 1.4.12 | v1.1.1 | v1.26 | Updated to Gateway API version 1.1.1, Regex match support for path and header match in HTTP and GRPC routes, [Wildcard hostname fix](https://github.com/Azure/AKS/issues/4713), Misc. bug fixes and improvements |
40+
| 1.4.12 | v1.1.1 | v1.26 | Updated to Gateway API version 1.1.1, Regex match support for path and header match in HTTP and GRPC routes, [Wildcard hostname fix](https://github.com/Azure/AKS/issues/4713), miscellaneous bug fixes and improvements |
4041
| 1.3.7| v1.1 | v1.26 | Minor fixes and improvements |
4142
| 1.2.3| v1.1 | v1.26 | Gateway API v1.1, gRPC support, frontend mutual authentication, readiness probe fixes, custom health probe port and TLS mode |
4243
| 1.0.2| v1 | v1.26 | ECDSA + RSA certificate support for both Ingress and Gateway API, Ingress fixes, Server-sent events support |

0 commit comments

Comments
 (0)