FluentCertificates 0.4.2-ci0022
See the version list below for details.
dotnet add package FluentCertificates --version 0.4.2-ci0022
NuGet\Install-Package FluentCertificates -Version 0.4.2-ci0022
<PackageReference Include="FluentCertificates" Version="0.4.2-ci0022" />
paket add FluentCertificates --version 0.4.2-ci0022
#r "nuget: FluentCertificates, 0.4.2-ci0022"
// Install FluentCertificates as a Cake Addin #addin nuget:?package=FluentCertificates&version=0.4.2-ci0022&prerelease // Install FluentCertificates as a Cake Tool #tool nuget:?package=FluentCertificates&version=0.4.2-ci0022&prerelease
📖 FluentCertificates Overview
⚠️ Note: while version numbers are v0.x.y, this software is under initial development and there'll be breaking-changes in its API from version to version.
FluentCertificates is a library using the Immutable Fluent Builder pattern for easily creating, finding and exporting certificates. Makes it simple to generate your own certificate chains, or just stand-alone self-signed certificates.
This project is published in three NuGet packages:
- FluentCertificates: Just brings in both the FluentCertificates.Builder and FluentCertificates.Finder packages.
- FluentCertificates.Builder: Provides
CertificateBuilder
for building certificates and also includes a bunch of convenient extension-methods. Examples below - FluentCertificates.Finder: Provides
CertificateFinder
for finding certificates across a collection of X509Stores. Examples below
Unfortunately documentation is incomplete. You may find more examples within the project's unit tests.
CertificateBuilder
examples
Create a CertificateRequest
for signing, exporting and passing to a 3rd party CA:
var request = new CertificateBuilder()
.SetUsage(CertificateUsage.Server)
.SetSubject(b => b.SetCommonName("*.fake.domain"))
.SetDnsNames("*.fake.domain", "fake.domain")
.ToCertificateRequest();
Build a self-signed web server certificate:
//Using a fluent style
var cert = new CertificateBuilder()
.SetUsage(CertificateUsage.Server)
.SetFriendlyName("Example self-signed web-server certificate")
.SetSubject(b => b.SetCommonName("*.fake.domain"))
.SetDnsNames("*.fake.domain", "fake.domain")
.SetNotAfter(DateTimeOffset.UtcNow.AddMonths(1))
.Build();
//And just to demonstrate using object initializers (I'll use fluent style from now on though)
var builder = new CertificateBuilder() {
Usage = CertificateUsage.Server,
FriendlyName = "Example self-signed web-server certificate",
Subject = new X500NameBuilder().SetCommonName("*.fake.domain"),
DnsNames = new[] { "*.fake.domain", "fake.domain" },
NotAfter = DateTimeOffset.UtcNow.AddMonths(1)
};
var cert = builder.Build();
Build a CA (certificate authority):
//A CA's expiry date must be later than that of any certificates it will issue
var issuer = new CertificateBuilder()
.SetUsage(CertificateUsage.CA)
.SetFriendlyName("Example root CA")
.SetSubject(b => b.SetCommonName("Example root CA"))
.SetNotAfter(DateTimeOffset.UtcNow.AddYears(100))
.Build();
Build a client-auth certificate signed by a CA:
//Note: the 'issuer' certificate used must have a private-key attached in order to sign this new certificate
var cert = new CertificateBuilder()
.SetUsage(CertificateUsage.Client)
.SetFriendlyName("Example client-auth certificate")
.SetSubject(b => b.SetCommonName("User: Michael"))
.SetNotAfter(DateTimeOffset.UtcNow.AddYears(1))
.SetIssuer(issuer)
.Build();
Advanced: Build a certificate with customized extensions:
var cert = new CertificateBuilder()
.SetFriendlyName("Example certificate with customized extensions")
.SetSubject(b => b.SetCommonName("Example certificate with customized extensions"))
.AddExtension(new X509BasicConstraintsExtension(false, false, 0, true))
.AddExtension(new X509KeyUsageExtension(X509KeyUsageFlags.DigitalSignature | X509KeyUsageFlags.KeyEncipherment | X509KeyUsageFlags.DataEncipherment, true))
.AddExtension(new X509EnhancedKeyUsageExtension(new OidCollection { new(KeyPurposeID.AnyExtendedKeyUsage.Id) }, false))
.SetIssuer(issuer)
.Build();
CertificateFinder
examples
TODO: document this
X500NameBuilder
examples
TODO: document this; see unit tests for more examples
X509Certificate2
extension-methods
TODO: document this; see unit tests for more examples
Extension-Method | Description |
---|---|
BuildChain | |
ExportAsCert | |
ExportAsPkcs12 | |
ExportAsPkcs7 | |
ExportAsPem | |
ToPemString | |
ToBase64String | |
GetPrivateKey | |
IsValidNow | |
IsValid | |
IsSelfSigned | |
IsIssuedBy | |
VerifyIssuer |
X509Certificate2Collection
extension-methods
TODO: document this |Extension-Method|Description| |-|-| |ToEnumerable|| |ExportAsPkcs7|| |ExportAsPkcs12|| |ExportAsPem|| |ToPemString||
IEnumerable<X509Certificate2>
extension-methods
TODO: document this |Extension-Method|Description| |-|-| |ToCollection|| |FilterPrivateKeys|| |ExportAsPkcs7|| |ExportAsPkcs12|| |ExportAsPem|| |ToPemString||
X509Chain
extension-methods
TODO: document this |Extension-Method|Description| |-|-| |ToCollection|| |ToEnumerable|| |ExportAsPkcs7|| |ExportAsPkcs12|| |ExportAsPem|| |ToPemString||
X509Extension
extension-methods
Extension-Method | Description |
---|---|
dnExtension.ConvertToBouncyCastle() |
Converts a DotNet X509Extension to a BouncyCastle X509Extension . |
bcExtension.ConvertToDotNet(string oid) |
Converts a BouncyCastle X509Extension to a DotNet X509Extension . A DotNet X509Extension includes an OID, but a BouncyCastle one doesn't, therefore one must be supplied in the parameters here. |
bcExtension.ConvertToDotNet(DerObjectIdentifier oid) |
Converts a BouncyCastle X509Extension to a DotNet X509Extension . A DotNet X509Extension includes an OID, but a BouncyCastle one doesn't, therefore one must be supplied in the parameters here. |
CertificateRequest
extension-methods
Extension-Method | Description |
---|---|
ToPemString() |
Exports the CertificateRequest to a PEM string. |
ExportAsPem(string path) |
Exports the CertificateRequest to the specified PEM file. |
ExportAsPem(TextWriter writer) |
Exports the CertificateRequest in PEM format to the given TextWriter . |
ConvertToBouncyCastle() |
Converts the CertificateRequest to a BouncyCastle Pkcs10CertificationRequest |
Product | Versions Compatible and additional computed target framework versions. |
---|---|
.NET | net5.0 is compatible. net5.0-windows was computed. net6.0 is compatible. net6.0-android was computed. net6.0-ios was computed. net6.0-maccatalyst was computed. net6.0-macos was computed. net6.0-tvos was computed. net6.0-windows was computed. net7.0 was computed. net7.0-android was computed. net7.0-ios was computed. net7.0-maccatalyst was computed. net7.0-macos was computed. net7.0-tvos was computed. net7.0-windows was computed. net8.0 was computed. net8.0-android was computed. net8.0-browser was computed. net8.0-ios was computed. net8.0-maccatalyst was computed. net8.0-macos was computed. net8.0-tvos was computed. net8.0-windows was computed. |
.NET Core | netcoreapp3.0 was computed. netcoreapp3.1 was computed. |
.NET Standard | netstandard2.1 is compatible. |
MonoAndroid | monoandroid was computed. |
MonoMac | monomac was computed. |
MonoTouch | monotouch was computed. |
Tizen | tizen60 was computed. |
Xamarin.iOS | xamarinios was computed. |
Xamarin.Mac | xamarinmac was computed. |
Xamarin.TVOS | xamarintvos was computed. |
Xamarin.WatchOS | xamarinwatchos was computed. |
-
.NETStandard 2.1
- FluentCertificates.Builder (>= 0.4.2-ci0022)
- FluentCertificates.Finder (>= 0.4.2-ci0022)
-
net5.0
- FluentCertificates.Builder (>= 0.4.2-ci0022)
- FluentCertificates.Finder (>= 0.4.2-ci0022)
-
net6.0
- FluentCertificates.Builder (>= 0.4.2-ci0022)
- FluentCertificates.Finder (>= 0.4.2-ci0022)
NuGet packages
This package is not used by any NuGet packages.
GitHub repositories
This package is not used by any popular GitHub repositories.
Version | Downloads | Last updated |
---|---|---|
0.10.1-ci0001 | 68 | 11/29/2024 |
0.10.0 | 91 | 11/28/2024 |
0.9.2-ci0009 | 74 | 11/28/2024 |
0.9.2-ci0008 | 69 | 11/28/2024 |
0.9.2-ci0006 | 63 | 11/27/2024 |
0.9.2-ci0004 | 65 | 11/27/2024 |
0.9.2-ci0002 | 102 | 2/19/2024 |
0.9.1 | 397 | 8/11/2023 |
0.9.1-ci0017 | 143 | 8/11/2023 |
0.9.1-ci0007 | 143 | 8/11/2023 |
0.9.1-ci0006 | 164 | 8/11/2023 |
0.9.0 | 190 | 8/10/2023 |
0.8.1-ci0031 | 140 | 8/10/2023 |
0.8.1-ci0028 | 138 | 8/2/2023 |
0.8.1-ci0027 | 133 | 8/2/2023 |
0.8.1-ci0025 | 140 | 8/2/2023 |
0.8.1-ci0020 | 155 | 8/1/2023 |
0.8.1-ci0018 | 128 | 8/1/2023 |
0.8.1-ci0016 | 136 | 8/1/2023 |
0.8.0 | 470 | 7/7/2022 |
0.7.2-ci0010 | 187 | 7/7/2022 |
0.7.2-ci0002 | 177 | 7/6/2022 |
0.7.2-ci0001 | 165 | 7/6/2022 |
0.7.1 | 419 | 6/24/2022 |
0.7.1-ci0001 | 160 | 6/24/2022 |
0.7.0 | 420 | 6/24/2022 |
0.6.1-ci0002 | 180 | 6/24/2022 |
0.6.1-ci0001 | 159 | 6/24/2022 |
0.6.0 | 429 | 6/23/2022 |
0.5.5-ci0009 | 159 | 6/23/2022 |
0.5.5-ci0008 | 158 | 6/23/2022 |
0.5.5-ci0007 | 170 | 6/23/2022 |
0.5.5-ci0006 | 175 | 6/23/2022 |
0.5.5-ci0005 | 159 | 6/23/2022 |
0.5.5-ci0004 | 179 | 6/21/2022 |
0.5.4 | 410 | 6/20/2022 |
0.5.4-ci0002 | 159 | 6/20/2022 |
0.5.3 | 411 | 6/20/2022 |
0.5.3-ci0005 | 167 | 6/20/2022 |
0.5.3-ci0004 | 161 | 6/20/2022 |
0.5.3-ci0003 | 145 | 6/20/2022 |
0.5.2 | 437 | 6/18/2022 |
0.5.2-ci0001 | 164 | 6/18/2022 |
0.5.1 | 430 | 6/17/2022 |
0.5.1-ci0001 | 160 | 6/17/2022 |
0.5.0 | 403 | 6/17/2022 |
0.4.2-ci0022 | 169 | 6/17/2022 |
0.4.2-ci0021 | 176 | 6/17/2022 |
0.4.2-ci0020 | 167 | 6/17/2022 |
0.4.2-ci0018 | 168 | 6/17/2022 |
0.4.2-ci0014 | 169 | 6/16/2022 |
0.4.2-ci0013 | 175 | 6/16/2022 |
0.4.2-ci0012 | 187 | 6/16/2022 |
0.4.2-ci0011 | 171 | 6/16/2022 |
0.4.2-ci0010 | 150 | 6/16/2022 |
0.4.2-ci0009 | 173 | 6/16/2022 |
0.4.2-ci0007 | 157 | 6/16/2022 |
0.4.2-ci0003 | 176 | 6/15/2022 |
0.4.2-ci0002 | 193 | 6/15/2022 |
0.4.2-ci0001 | 185 | 6/10/2022 |
0.4.1 | 422 | 6/10/2022 |
0.4.1-ci0008 | 156 | 6/10/2022 |
0.4.1-ci0007 | 168 | 6/10/2022 |
0.4.1-ci0006 | 182 | 6/10/2022 |
0.4.1-ci0005 | 175 | 6/10/2022 |
0.4.1-ci0004 | 169 | 6/10/2022 |
0.4.1-ci0003 | 177 | 6/10/2022 |
0.4.1-ci0002 | 175 | 6/8/2022 |
0.4.1-ci0001 | 164 | 6/8/2022 |
0.4.0 | 437 | 6/2/2022 |
0.3.3-ci0001 | 180 | 6/2/2022 |
0.3.2 | 422 | 6/2/2022 |
0.3.2-ci0002 | 178 | 5/31/2022 |
0.3.2-ci.1 | 128 | 5/30/2022 |