Skip to content

Commit 28a9f4f

Browse files
dotnet: improve dev-certs instructions (#1095)
* dotnet: improve dev-certs instructions * Simplify export command with sudo -E * Apply suggestions from code review Co-authored-by: Samruddhi Khandale <samruddhikhandale@github.com> * Make dev-cert name more specific to dotnet * Rename 'on-create' script to 'setup-dotnet-dev-cert' --------- Co-authored-by: Samruddhi Khandale <samruddhikhandale@github.com>
1 parent ffc7f20 commit 28a9f4f

File tree

1 file changed

+50
-2
lines changed

1 file changed

+50
-2
lines changed

src/dotnet/README.md

Lines changed: 50 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -39,11 +39,59 @@ See [history](history) for information on the contents of each version and [here
3939

4040
Alternatively, you can use the contents of [.devcontainer](.devcontainer) to fully customize your container's contents or to build it for a container host architecture not supported by the image.
4141

42+
### Enabling HTTPS in ASP.NET Core by creating a dev certificate
43+
44+
You can use `dotnet dev-certs https` inside the dev container to create a development HTTPS certificate for ASP.NET Core. However, each time the container is recreated, the development certificate will be lost. To make the development certificate survive container rebuilds, you can use a named volume.
45+
46+
For example, in `devcontainer.json`, add a named volume for the `x509stores` directory inside the `vscode` user's home folder. Also add a lifecycle script, which adds the development certificate to the dev container's trust store.
47+
48+
``` json
49+
"mounts": [
50+
{
51+
"type": "volume",
52+
"source": "x509stores",
53+
"target": "/home/vscode/.dotnet/corefx/cryptography/x509stores"
54+
}
55+
],
56+
"onCreateCommand": "bash .devcontainer/setup-dotnet-dev-cert.sh"
57+
```
58+
59+
The contents of `.devcontainer/setup-dotnet-dev-cert.sh`:
60+
61+
``` bash
62+
#!/usr/bin/env bash
63+
64+
# Change ownership of the .dotnet directory to the vscode user (to avoid permission errors)
65+
sudo chown -R vscode:vscode /home/vscode/.dotnet
66+
67+
# Export the ASP.NET Core HTTPS development certificate to a PEM file
68+
# If there is no development certificate, this command will generate a new one
69+
sudo -E dotnet dev-certs https --export-path /usr/local/share/ca-certificates/dotnet-dev-cert.crt --format pem
70+
71+
# Add the PEM file to the trust store
72+
sudo update-ca-certificates
73+
```
74+
75+
You should see the following output when the dev container is created:
76+
77+
``` text
78+
Running the onCreateCommand from devcontainer.json...
79+
80+
The HTTPS developer certificate was generated successfully.
81+
Updating certificates in /etc/ssl/certs...
82+
rehash: warning: skipping ca-certificates.crt,it does not contain exactly one certificate or CRL
83+
1 added, 0 removed; done.
84+
Running hooks in /etc/ca-certificates/update.d...
85+
done.
86+
```
87+
88+
Now this certificate will survive container rebuilds. The certificate will also be trusted by code running inside the container like `System.Net.HttpClient`, or tools like `wget` and `curl`. If needed, you can use Docker Desktop to export the development certificate to a local directory, in case you need to add it to any other trust stores.
89+
4290
### Enabling HTTPS in ASP.NET using your own dev certificate
4391

44-
To enable HTTPS in ASP.NET, you can mount an exported copy of your local dev certificate.
92+
You can mount an exported copy of your local dev certificate for enhanced convenience. This solution is ideal for private projects, but please note that the password will be included in your `devcontainer.json`. Avoid using this method for team projects or open source projects to maintain security best practices.
4593

46-
1. Export it using the following command:
94+
1. Export the local certificate using the following command:
4795

4896
**Windows PowerShell**
4997

0 commit comments

Comments
 (0)