Skip to content
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

ADCS initial MR #76

Merged
merged 96 commits into from
Nov 22, 2023
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
96 commits
Select commit Hold shift + click to select a range
27e7e42
wip: begin porting CAA work into v3
rvazarkar Oct 5, 2022
4a28f2c
wip: add PKI ldap properties, dynamically build reserved attribute li…
rvazarkar Oct 5, 2022
8c2017c
wip: add some tests, add CertAbuseProcessor with some basic code for …
rvazarkar Oct 5, 2022
7a980ee
Merge remote-tracking branch 'origin/v3' into adcs
rvazarkar Oct 10, 2022
43bb2a8
wip: more cert abuse stuff
rvazarkar Oct 12, 2022
d881fc1
Merge remote-tracking branch 'origin/v3' into adcs
rvazarkar Oct 13, 2022
035cc6b
chore: random fixes
rvazarkar Oct 17, 2022
dd70362
Merge remote-tracking branch 'origin/v3' into adcs
rvazarkar Oct 20, 2022
13143ba
wip: more cert abuse stuff
rvazarkar Oct 25, 2022
b097c8c
Merge remote-tracking branch 'origin/v3' into adcs
rvazarkar Nov 7, 2022
6e234b0
chore: small updates for ADCS
rvazarkar Nov 9, 2022
1223db1
wip: begin porting CAA work into v3
rvazarkar Oct 5, 2022
50c5584
wip: add PKI ldap properties, dynamically build reserved attribute li…
rvazarkar Oct 5, 2022
52be9e7
wip: add some tests, add CertAbuseProcessor with some basic code for …
rvazarkar Oct 5, 2022
fd0ecde
wip: more cert abuse stuff
rvazarkar Oct 12, 2022
3ed49d6
chore: random fixes
rvazarkar Oct 17, 2022
58f5218
wip: more cert abuse stuff
rvazarkar Oct 25, 2022
6c7a1e9
chore: small updates for ADCS
rvazarkar Nov 9, 2022
d4064c2
fix: Configuration NC CN correction
JonasBK May 14, 2023
bef2040
fix: CertAuthority class name correction
JonasBK May 14, 2023
d157efb
add CertTemplate OutputBase
JonasBK May 14, 2023
1db23bb
rename cert template LDAP filter
JonasBK May 14, 2023
1010185
Add cert objects to ChildObjects for containers
JonasBK May 14, 2023
6224a55
improve collection of CA registry data
JonasBK May 24, 2023
88971ac
Add CN=Configuration to CA paths
JonasBK May 24, 2023
0d9a99b
Add enabled cert templates to CAs
JonasBK May 24, 2023
fb881a0
Add IsEnterpriseCA and IsRootCA methods
JonasBK May 26, 2023
71dce61
Add methods to get Configuration and Schema NC paths
JonasBK May 26, 2023
81bf02c
fix: Enroll right for cert templates
JonasBK Jun 8, 2023
55beec3
Add ApplicationPolicies, IssuancePolicies, and CertificateApplication…
JonasBK Jun 8, 2023
eeaab78
ignore failing ADCS test for now
JonasBK Jun 9, 2023
3f2245f
Add adcs data types
JonasBK Jun 9, 2023
c225952
fix edge name
JonasBK Jun 13, 2023
b1662ca
Split CA objects
JonasBK Jun 13, 2023
eb0bbc3
move CASecurity into Aces
JonasBK Jun 13, 2023
58e5876
rename enum file
JonasBK Jun 13, 2023
373c973
fix CARegistryData
JonasBK Jun 14, 2023
178328b
Change cert in NTAuthCert to array
JonasBK Jun 14, 2023
282a332
Add Cert extensions
JonasBK Jun 14, 2023
57a88bd
replace certificate with certThumbprint in certain objects
JonasBK Jun 16, 2023
429d7d9
Add cross certificate
JonasBK Jun 16, 2023
d51fa2f
Fix resolving certTemplates and improve EnrollmentAgent data
JonasBK Jun 19, 2023
a21227d
add 'collected' values to CA reg output
JonasBK Jun 23, 2023
0aa7544
handle when cert templates are referenced by oid
JonasBK Jun 23, 2023
a565dfc
simplify Extentions functions
JonasBK Jul 4, 2023
261e4e9
Add CARegistry collection enum
JonasBK Jul 4, 2023
469f842
change EnrollAsOther to Enroll
JonasBK Jul 5, 2023
de717b3
Rename NTAuthCert to NTAuthStore
JonasBK Jul 20, 2023
745462c
simplify oid property of cert templates
JonasBK Aug 3, 2023
f367be5
remove obsolete class
JonasBK Aug 3, 2023
14f68a5
fix enroll permissions on enrollment service
JonasBK Aug 3, 2023
cc43b93
Fix registry ACL collection
JonasBK Aug 11, 2023
dbd1e6b
Fix cert chain and add Certificate to RootCA
JonasBK Sep 5, 2023
c2bf76d
Add CertTemplate properties
JonasBK Sep 13, 2023
2abe9c0
Fix collection of cert template attributes
JonasBK Sep 14, 2023
2e0a949
Remove unused Certificate properties
JonasBK Sep 14, 2023
b33079a
chore: pull v3
urangel Sep 26, 2023
b38430a
Merge remote-tracking branch 'origin/adcs' into adcs
rvazarkar Sep 27, 2023
90cbb09
Merge branch 'v3' of github.com:BloodHoundAD/SharpHoundCommon into adcs
urangel Sep 29, 2023
4119c6b
chore: improve test coverage
urangel Oct 2, 2023
bebdd5b
fix: patch unit tests, return ntauthstoreproperties to static
urangel Oct 3, 2023
8e0c19a
Merge remote-tracking branch 'origin/adcs' into adcs
rvazarkar Oct 4, 2023
ec9191b
chore: fix tests
rvazarkar Oct 4, 2023
9c94017
Rename EnrollmentService to EnterpriseCA
JonasBK Oct 4, 2023
a7ec97a
Merge pull request #74 from BloodHoundAD/improve-coverage
urangel Oct 4, 2023
eb4b5ff
Merge remote-tracking branch 'origin/adcs' into adcs
rvazarkar Oct 4, 2023
eabd7e4
Merge pull request #75 from BloodHoundAD/rename-enrollmentservice
juggernot325 Oct 4, 2023
bcb41fd
chore: update some methods to make them more testable and make output…
rvazarkar Oct 4, 2023
d778043
Merge remote-tracking branch 'origin/adcs' into adcs
rvazarkar Oct 4, 2023
02334b8
chore: add more unit tests and some xml documentation coverage
urangel Oct 4, 2023
c1b792f
chore: use ldap properties constants
rvazarkar Oct 4, 2023
bc692fc
chore: remove todo
rvazarkar Oct 4, 2023
c950fb3
Merge pull request #77 from BloodHoundAD/coverage-two-electric-boogaloo
urangel Oct 4, 2023
869a569
Remove debug console output
JonasBK Oct 2, 2023
3a3929a
Fix data arrangement in output
JonasBK Oct 2, 2023
694c689
Add collection of DC reg keys
JonasBK Oct 3, 2023
ad2c44f
Remove unused output type
JonasBK Oct 4, 2023
23a541b
Merge pull request #78 from BloodHoundAD/dc-reg-keys-and-adcs-refactor
JonasBK Oct 5, 2023
f9b904f
chore: update output types to lift domain up a level
urangel Oct 10, 2023
9553455
fix: change domain property to domain sid and add domainsid property …
urangel Oct 11, 2023
0689b67
chore: handle hascrosscertificatepair property during collection inst…
urangel Oct 11, 2023
df2abf4
fix: add missing ;
JonasBK Oct 12, 2023
a05c24a
remove DomainSID from EnterpriseCA
JonasBK Oct 12, 2023
50ec50b
remove unused duplicate enum
JonasBK Oct 18, 2023
b725115
add NO_SECURITY_EXTENSION flag
JonasBK Oct 18, 2023
a113fe9
Add constructed EKU props
JonasBK Oct 18, 2023
be37a92
fix AIACA test
JonasBK Oct 18, 2023
82a1cdf
Merge branch 'v3' into adcs
JonasBK Oct 18, 2023
b0d6491
Merge branch 'adcs' into eku-props
rvazarkar Oct 18, 2023
fd82e42
Merge pull request #80 from BloodHoundAD/eku-props
rvazarkar Oct 18, 2023
39eb150
feat: configuration class collection
JonasBK Oct 25, 2023
f06408b
Merge pull request #81 from BloodHoundAD/BED-3838
JonasBK Nov 9, 2023
feb4ae6
chore: add CertServices to collection methods
urangel Nov 16, 2023
2cde9e5
chore: add certservices method to dconly and default options
urangel Nov 17, 2023
37438c1
feat: handle deduplication in getFilter method for LDAPFilter
urangel Nov 17, 2023
df41c18
Merge pull request #83 from BloodHoundAD/adcs-cert-services-collectio…
elikmiller Nov 22, 2023
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
13 changes: 6 additions & 7 deletions CONTRIBUTING.md
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,7 @@

## Build

``` powershell
```powershell
dotnet build
```

Expand All @@ -17,31 +17,30 @@ dotnet build
This project is configured to generate test coverage every time tests are run and produces a HTML report at
[./docfx/coverage/report](./docfx/coverage/report).


``` powershell
```powershell
dotnet test
```

## Documentation

Documentation is generated into Html from Markdown using [docfx](https://https://dotnet.github.io/docfx/).
Documentation is generated into HTML from Markdown using [docfx](https://dotnet.github.io/docfx/).

To build the docs:

``` powershell
```powershell
dotnet build docfx
```

To preview the docs:

``` powershell
```powershell
dotnet build docfx
dotnet build docfx -t:Serve
```

To preview the docs with test coverage:

``` powershell
```powershell
dotnet test
dotnet build docfx
dotnet build docfx -t:Serve
Expand Down
7 changes: 7 additions & 0 deletions src/CommonLib/EdgeNames.cs
Original file line number Diff line number Diff line change
Expand Up @@ -21,5 +21,12 @@ public static class EdgeNames
public const string AddKeyCredentialLink = "AddKeyCredentialLink";
public const string SQLAdmin = "SQLAdmin";
public const string WriteAccountRestrictions = "WriteAccountRestrictions";

//CertAbuse edges
public const string WritePKIEnrollmentFlag = "WritePKIEnrollmentFlag";
public const string WritePKINameFlag = "WritePKINameFlag";
public const string ManageCA = "ManageCA";
public const string ManageCertificates = "ManageCertificates";
public const string Enroll = "Enroll";
}
}
15 changes: 15 additions & 0 deletions src/CommonLib/Enums/CAExtensionTypes.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,15 @@
namespace SharpHoundCommonLib.Enums
{
// From https://learn.microsoft.com/en-us/windows/win32/seccertenroll/supported-extensions
public static class CAExtensionTypes
{
public const string AuthorityInformationAccess = "1.3.6.1.5.5.7.1.1";
public const string AuthorityKeyIdentifier = "2.5.29.35";
public const string BasicConstraints = "2.5.29.19";
public const string NameConstraints = "2.5.29.30";
public const string EnhancedKeyUsage = "2.5.29.37";
public const string KeyUsage = "2.5.29.15";
public const string SubjectAlternativeNames = "2.5.29.17";
public const string SubjectKeyIdentifier = "2.5.29.14";
}
}
15 changes: 15 additions & 0 deletions src/CommonLib/Enums/CertificationAuthorityRights.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,15 @@
using System;

namespace SharpHoundCommonLib.Enums
{
[Flags]
public enum CertificationAuthorityRights
{
ManageCA = 1, // Administrator
ManageCertificates = 2, // Officer
Auditor = 4,
Operator = 8,
Read = 256,
Enroll = 512
}
}
11 changes: 7 additions & 4 deletions src/CommonLib/Enums/CollectionMethods.cs
Original file line number Diff line number Diff line change
Expand Up @@ -22,10 +22,13 @@ public enum ResolvedCollectionMethod
SPNTargets = 1 << 13,
PSRemote = 1 << 14,
UserRights = 1 << 15,
CARegistry = 1 << 16,
DCRegistry = 1 << 17,
CertServices = 1 << 18,
LocalGroups = DCOM | RDP | LocalAdmin | PSRemote,
ComputerOnly = LocalGroups | Session | UserRights,
DCOnly = ACL | Container | Group | ObjectProps | Trusts | GPOLocalGroup,
Default = Group | Session | Trusts | ACL | ObjectProps | LocalGroups | SPNTargets | Container,
All = Default | LoggedOn | GPOLocalGroup | UserRights
ComputerOnly = LocalGroups | Session | UserRights | CARegistry | DCRegistry,
DCOnly = ACL | Container | Group | ObjectProps | Trusts | GPOLocalGroup | CertServices,
Default = Group | Session | Trusts | ACL | ObjectProps | LocalGroups | SPNTargets | Container | CertServices,
All = Default | LoggedOn | GPOLocalGroup | UserRights | CARegistry | DCRegistry
}
}
13 changes: 13 additions & 0 deletions src/CommonLib/Enums/CommonOids.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,13 @@
namespace SharpHoundCommonLib.Enums
{
// More can be found here: https://www.pkisolutions.com/object-identifiers-oid-in-pki/
public static class CommonOids
{
public static string AnyPurpose = "2.5.29.37.0";
public static string ClientAuthentication = "1.3.6.1.5.5.7.3.2";
public static string PKINITClientAuthentication = "1.3.6.1.5.2.3.4";
public static string SmartcardLogon = "1.3.6.1.4.1.311.20.2.2";
public static string CertificateRequestAgent = "1.3.6.1.4.1.311.20.2.1";
public static string CertificateRequestAgentPolicy = "1.3.6.1.4.1.311.20.2.1";
}
}
5 changes: 5 additions & 0 deletions src/CommonLib/Enums/DataType.cs
Original file line number Diff line number Diff line change
Expand Up @@ -9,5 +9,10 @@ public static class DataType
public const string GPOs = "gpos";
public const string OUs = "ous";
public const string Containers = "containers";
public const string RootCAs = "rootcas";
public const string AIACAs = "aiacas";
public const string NTAuthStores = "ntauthstores";
public const string EnterpriseCAs = "enterprisecas";
public const string CertTemplates = "certtemplates";
}
}
13 changes: 13 additions & 0 deletions src/CommonLib/Enums/DirectoryPaths.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,13 @@
namespace SharpHoundCommonLib.Enums
{
public class DirectoryPaths
{
public const string EnterpriseCALocation = "CN=Enrollment Services,CN=Public Key Services,CN=Services,CN=Configuration";
public const string RootCALocation = "CN=Certification Authorities,CN=Public Key Services,CN=Services,CN=Configuration";
public const string AIACALocation = "CN=AIA,CN=Public Key Services,CN=Services,CN=Configuration";
public const string CertTemplateLocation = "CN=Certificate Templates,CN=Public Key Services,CN=Services,CN=Configuration";
public const string NTAuthStoreLocation = "CN=NTAuthCertificates,CN=Public Key Services,CN=Services,CN=Configuration";
public const string PKILocation = "CN=Public Key Services,CN=Services,CN=Configuration";
public const string ConfigLocation = "CN=Configuration";
}
}
9 changes: 8 additions & 1 deletion src/CommonLib/Enums/Labels.cs
Original file line number Diff line number Diff line change
Expand Up @@ -11,6 +11,13 @@ public enum Label
GPO,
Domain,
OU,
Container
Container,
Configuration,
CertTemplate,
CertAuthority,
RootCA,
AIACA,
EnterpriseCA,
NTAuthStore
}
}
13 changes: 13 additions & 0 deletions src/CommonLib/Enums/PKICertificateAuthorityFlags.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,13 @@
using System;

namespace SharpHoundCommonLib.Enums
{
[Flags]
public enum PKICertificateAuthorityFlags
{
NO_TEMPLATE_SUPPORT = 0x00000001,
SUPPORTS_NT_AUTHENTICATION = 0x00000002,
CA_SUPPORTS_MANUAL_AUTHENTICATION = 0x00000004,
CA_SERVERTYPE_ADVANCED = 0x00000008
}
}
25 changes: 25 additions & 0 deletions src/CommonLib/Enums/PKICertificateNameFlag.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,25 @@
using System;

namespace SharpHoundCommonLib.Enums
{
[Flags]
public enum PKICertificateNameFlag : uint
{
ENROLLEE_SUPPLIES_SUBJECT = 0x00000001,
ADD_EMAIL = 0x00000002,
ADD_OBJ_GUID = 0x00000004,
OLD_CERT_SUPPLIES_SUBJECT_AND_ALT_NAME = 0x00000008,
ADD_DIRECTORY_PATH = 0x00000100,
ENROLLEE_SUPPLIES_SUBJECT_ALT_NAME = 0x00010000,
SUBJECT_ALT_REQUIRE_DOMAIN_DNS = 0x00400000,
SUBJECT_ALT_REQUIRE_SPN = 0x00800000,
SUBJECT_ALT_REQUIRE_DIRECTORY_GUID = 0x01000000,
SUBJECT_ALT_REQUIRE_UPN = 0x02000000,
SUBJECT_ALT_REQUIRE_EMAIL = 0x04000000,
SUBJECT_ALT_REQUIRE_DNS = 0x08000000,
SUBJECT_REQUIRE_DNS_AS_CN = 0x10000000,
SUBJECT_REQUIRE_EMAIL = 0x20000000,
SUBJECT_REQUIRE_COMMON_NAME = 0x40000000,
SUBJECT_REQUIRE_DIRECTORY_PATH = 0x80000000
}
}
32 changes: 32 additions & 0 deletions src/CommonLib/Enums/PKIEnrollmentFlag.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,32 @@
using System;

namespace SharpHoundCommonLib.Enums
{
// from https://docs.microsoft.com/en-us/openspecs/windows_protocols/ms-crtd/ec71fd43-61c2-407b-83c9-b52272dec8a1
// and from certutil.exe -v -dstemplate
[Flags]
public enum PKIEnrollmentFlag : uint
{
NONE = 0x00000000,
INCLUDE_SYMMETRIC_ALGORITHMS = 0x00000001,
PEND_ALL_REQUESTS = 0x00000002,
PUBLISH_TO_KRA_CONTAINER = 0x00000004,
PUBLISH_TO_DS = 0x00000008,
AUTO_ENROLLMENT_CHECK_USER_DS_CERTIFICATE = 0x00000010,
AUTO_ENROLLMENT = 0x00000020,
CT_FLAG_DOMAIN_AUTHENTICATION_NOT_REQUIRED = 0x80,
PREVIOUS_APPROVAL_VALIDATE_REENROLLMENT = 0x00000040,
USER_INTERACTION_REQUIRED = 0x00000100,
ADD_TEMPLATE_NAME = 0x200,
REMOVE_INVALID_CERTIFICATE_FROM_PERSONAL_STORE = 0x00000400,
ALLOW_ENROLL_ON_BEHALF_OF = 0x00000800,
ADD_OCSP_NOCHECK = 0x00001000,
ENABLE_KEY_REUSE_ON_NT_TOKEN_KEYSET_STORAGE_FULL = 0x00002000,
NOREVOCATIONINFOINISSUEDCERTS = 0x00004000,
INCLUDE_BASIC_CONSTRAINTS_FOR_EE_CERTS = 0x00008000,
ALLOW_PREVIOUS_APPROVAL_KEYBASEDRENEWAL_VALIDATE_REENROLLMENT = 0x00010000,
ISSUANCE_POLICIES_FROM_REQUEST = 0x00020000,
SKIP_AUTO_RENEWAL = 0x00040000,
NO_SECURITY_EXTENSION = 0x00080000
}
}
61 changes: 53 additions & 8 deletions src/CommonLib/Extensions.cs
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,7 @@
using System.DirectoryServices;
using System.DirectoryServices.Protocols;
using System.Linq;
using System.Security.Cryptography.X509Certificates;
using System.Security.Principal;
using System.Text;
using System.Threading.Tasks;
Expand Down Expand Up @@ -85,11 +86,7 @@ public static string GetSid(this DirectoryEntry result)
/// <returns></returns>
public static bool IsComputerCollectionSet(this ResolvedCollectionMethod methods)
{
return (methods & ResolvedCollectionMethod.LocalAdmin) != 0 ||
(methods & ResolvedCollectionMethod.DCOM) != 0 || (methods & ResolvedCollectionMethod.RDP) != 0 ||
(methods & ResolvedCollectionMethod.PSRemote) != 0 ||
(methods & ResolvedCollectionMethod.Session) != 0 ||
(methods & ResolvedCollectionMethod.LoggedOn) != 0;
return (methods & ResolvedCollectionMethod.ComputerOnly) != 0;
}

/// <summary>
Expand All @@ -99,9 +96,7 @@ public static bool IsComputerCollectionSet(this ResolvedCollectionMethod methods
/// <returns></returns>
public static bool IsLocalGroupCollectionSet(this ResolvedCollectionMethod methods)
{
return (methods & ResolvedCollectionMethod.DCOM) != 0 ||
(methods & ResolvedCollectionMethod.LocalAdmin) != 0 ||
(methods & ResolvedCollectionMethod.PSRemote) != 0 || (methods & ResolvedCollectionMethod.RDP) != 0;
return (methods & ResolvedCollectionMethod.LocalGroups) != 0;
}

/// <summary>
Expand Down Expand Up @@ -252,6 +247,37 @@ public static byte[] GetPropertyAsBytes(this SearchResultEntry searchResultEntry
return bytes;
}

/// <summary>
/// Gets the specified property as an int
/// </summary>
/// <param name="entry"></param>
/// <param name="property"></param>
/// <param name="value"></param>
/// <returns></returns>
public static bool GetPropertyAsInt(this SearchResultEntry entry, string property, out int value)
{
var prop = entry.GetProperty(property);
if (prop != null) return int.TryParse(prop, out value);
value = 0;
return false;
}

/// <summary>
/// Gets the specified property as an array of X509 certificates.
/// </summary>
/// <param name="searchResultEntry"></param>
/// <param name="property"></param>
/// <returns></returns>
public static X509Certificate2[] GetPropertyAsArrayOfCertificates(this SearchResultEntry searchResultEntry,
string property)
{
if (!searchResultEntry.Attributes.Contains(property))
return null;

return searchResultEntry.GetPropertyAsArrayOfBytes(property).Select(x => new X509Certificate2(x)).ToArray();
}


/// <summary>
/// Attempts to get the unique object identifier as used by BloodHound for the Search Result Entry. Tries to get
/// objectsid first, and then objectguid next.
Expand Down Expand Up @@ -343,6 +369,21 @@ public static Label GetLabel(this SearchResultEntry entry)
objectType = Label.Domain;
else if (objectClasses.Contains(ContainerClass, StringComparer.InvariantCultureIgnoreCase))
objectType = Label.Container;
else if (objectClasses.Contains(ConfigurationClass, StringComparer.InvariantCultureIgnoreCase))
objectType = Label.Configuration;
else if (objectClasses.Contains(PKICertificateTemplateClass, StringComparer.InvariantCultureIgnoreCase))
objectType = Label.CertTemplate;
else if (objectClasses.Contains(PKIEnrollmentServiceClass, StringComparer.InvariantCultureIgnoreCase))
objectType = Label.EnterpriseCA;
else if (objectClasses.Contains(CertificationAutorityClass, StringComparer.InvariantCultureIgnoreCase))
{
if (entry.DistinguishedName.Contains(DirectoryPaths.RootCALocation))
objectType = Label.RootCA;
else if (entry.DistinguishedName.Contains(DirectoryPaths.AIACALocation))
objectType = Label.AIACA;
else if (entry.DistinguishedName.Contains(DirectoryPaths.NTAuthStoreLocation))
objectType = Label.NTAuthStore;
}
}

Log.LogDebug("GetLabel - Final label for {ObjectID}: {Label}", objectId, objectType);
Expand All @@ -356,6 +397,10 @@ public static Label GetLabel(this SearchResultEntry entry)
private const string OrganizationalUnitClass = "organizationalUnit";
private const string DomainClass = "domain";
private const string ContainerClass = "container";
private const string ConfigurationClass = "configuration";
private const string PKICertificateTemplateClass = "pKICertificateTemplate";
private const string PKIEnrollmentServiceClass = "pKIEnrollmentService";
private const string CertificationAutorityClass = "certificationAuthority";

#endregion
}
Expand Down
Loading
Loading