Skip to content
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
49 commits
Select commit Hold shift + click to select a range
1e50b04
certificate: bind to AD over LDAP as the machine using Kerberos
denisonbarbosa Jun 1, 2026
4fb5758
certificate: discover CAs and templates directly from Active Directory
denisonbarbosa Jun 1, 2026
f8efc88
certificate: make LDAP enrollment idempotent and trust discovered CAs
denisonbarbosa Jun 1, 2026
1f9d084
certificate: issue certificates from AD CS without cepces
denisonbarbosa Jun 1, 2026
8f20d6b
consts: let administrators choose the enrollment backend
denisonbarbosa Jun 1, 2026
2aaf2a9
tests: keep the integration suite runnable on modern Samba and NSS users
denisonbarbosa Jun 8, 2026
0afb703
certificate: select the enrollment backend when applying policy
denisonbarbosa Jun 1, 2026
4fd0fde
debian: default fresh installs to native LDAP certificate enrollment
denisonbarbosa Jul 6, 2026
8eaedae
debian: right-size CEPCES and Samba packaging for the native default
denisonbarbosa Jul 6, 2026
1fc4a54
docs: document the LDAP enrollment method
denisonbarbosa Jun 1, 2026
17ca431
certificate: harden LDAP/TLS and trust store against MITM and rogue CAs
denisonbarbosa Jun 26, 2026
e8a9c88
certificate: fix orphaned certs, unreachable skip path, and state com…
denisonbarbosa Jun 26, 2026
b1280e8
certificate: validate the enrollment method in adsysservice options
denisonbarbosa Jun 26, 2026
209f738
certificate: harden LDAP enrollment robustness and renew certs before…
denisonbarbosa Jun 26, 2026
3b6d911
certificate: resolve Kerberos KDCs and SPNs the way stock domain memb…
denisonbarbosa Jul 6, 2026
1d55e30
certificate: bind against domain controllers that enforce channel bin…
denisonbarbosa Jul 6, 2026
04c3ad3
certificate: allow the first LDAP enrollment to trust a not-yet-insta…
denisonbarbosa Jul 6, 2026
6ecab2f
debian: require the Go toolchain the module is declared to build with
denisonbarbosa Jul 6, 2026
a7c4a7f
debian: keep package configuration non-interactive during install
denisonbarbosa Jul 6, 2026
9bad8f0
certificate: add a management API for LDAP-enrolled certificates
denisonbarbosa Jul 15, 2026
9d8d3fd
adsysservice: expose certificate management over gRPC
denisonbarbosa Jul 15, 2026
0929c46
cmd: add adsysctl certificate management commands
denisonbarbosa Jul 15, 2026
f284371
docs: document certificate management
denisonbarbosa Jul 15, 2026
bce54d6
test: isolate policy update dependency PATH
denisonbarbosa Jul 21, 2026
5d94431
privilege: normalize sudoers file ending
denisonbarbosa Jul 21, 2026
2067b06
debian: address LDAP enrollment packaging review
denisonbarbosa Jul 21, 2026
ba6c810
e2e: update backport builds for Go 1.25
denisonbarbosa Jul 21, 2026
cf94977
certificate: harden LDAP transport discovery
denisonbarbosa Jul 21, 2026
eb89f2c
certificate: complete LDAP context and sequence handling
denisonbarbosa Jul 21, 2026
d052a57
fix(certificate): secure residual LDAP operations
denisonbarbosa Jul 21, 2026
c45902c
fix(certificate): serialize KDC deadline cancellation and match LDAP …
denisonbarbosa Jul 21, 2026
48ca0d7
fix(certificate): enforce CA chains and template ACLs
denisonbarbosa Jul 21, 2026
120709a
fix(certificate): enforce AD discovery trust boundaries
denisonbarbosa Jul 21, 2026
0750010
fix(certificate): bind enrollments to exact trust chains
denisonbarbosa Jul 21, 2026
42c1a4a
fix(certificate): correct renewal, removal, verification and trust ed…
denisonbarbosa Jul 21, 2026
324a344
fix(certificate): close ownership and rollback gaps
denisonbarbosa Jul 21, 2026
849f549
fix(certificate): make enrollment durable and atomic
denisonbarbosa Jul 21, 2026
c6fe3a8
fix(certificate): reconcile enrollment publication failures
denisonbarbosa Jul 21, 2026
e99d821
fix(certificate): clean finalized pending material
denisonbarbosa Jul 21, 2026
ba56ade
certificate: retire CEPCES enrollment when switching to LDAP
denisonbarbosa Jul 23, 2026
7c90138
certificate: confine template queries to domain discovery without locks
denisonbarbosa Jul 23, 2026
e4f284d
certificate: bound the renewal window for short-lived certificates
denisonbarbosa Jul 23, 2026
ebc8208
certificate: report not-yet-valid certificates as non-healthy
denisonbarbosa Jul 23, 2026
79c72b1
certificate: keep last_enrolled per template across failures and removal
denisonbarbosa Jul 23, 2026
7020ea3
certificate: authenticate CRLs and treat unknown revocation as such
denisonbarbosa Jul 23, 2026
9d83a59
docs: correct certificate management examples and patch hygiene
denisonbarbosa Jul 23, 2026
73ef04a
e2e: validate certificate enrollment per selected backend
denisonbarbosa Jul 23, 2026
79fb2d2
tests: pacify golangci-lint for new certificate tests
denisonbarbosa Jul 23, 2026
4219e79
docs: let the spell checker accept "untrusted"
denisonbarbosa Aug 10, 2026
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
801 changes: 757 additions & 44 deletions adsys.pb.go

Large diffs are not rendered by default.

80 changes: 80 additions & 0 deletions adsys.proto
Original file line number Diff line number Diff line change
Expand Up @@ -15,6 +15,13 @@ service service {
rpc ListUsers(ListUsersRequest) returns (stream StringResponse);
rpc GPOListScript(Empty) returns (stream StringResponse);
rpc CertAutoEnrollScript(Empty) returns (stream StringResponse);
rpc CertList(CertTargetRequest) returns (stream CertInfo);
rpc CertStatus(CertItemRequest) returns (stream CertInfo);
rpc CertRenew(CertItemRequest) returns (stream StringResponse);
rpc CertRemove(CertItemRequest) returns (stream StringResponse);
rpc CertVerify(CertItemRequest) returns (stream CertVerifyResult);
rpc CertListCAs(CertTargetRequest) returns (stream CAInfo);
rpc CertTemplates(CertTemplatesRequest) returns (stream StringResponse);
}

message Empty {}
Expand Down Expand Up @@ -62,4 +69,77 @@ message GetDocRequest {

message ListDocReponse {
repeated string chapters = 1;
}

// Certificate management messages (native "ldap" enrollment method).

message CertTargetRequest {
string target = 1; // short machine hostname; empty means the local host
}

message CertItemRequest {
string target = 1;
string nickname = 2; // on-disk nickname, e.g. "CA-Name.Machine"
bool all = 3;
bool force = 4;
bool online = 5;
}

message CertTemplatesRequest {
string server = 1; // CA server hostname to query for supported templates
}

enum CertHealth {
CERT_HEALTH_UNSPECIFIED = 0;
CERT_HEALTH_HEALTHY = 1;
CERT_HEALTH_DUE_RENEWAL = 2; // within the renewal window of expiry
CERT_HEALTH_EXPIRED = 3;
CERT_HEALTH_MISSING = 4; // referenced by state but absent on disk
CERT_HEALTH_KEY_MISMATCH = 5;
CERT_HEALTH_UNPARSEABLE = 6;
CERT_HEALTH_NOT_YET_VALID = 7; // before its NotBefore
}

message CertInfo {
string nickname = 1;
string template = 2;
string ca_name = 3;
string ca_hostname = 4;
string subject = 5;
string issuer = 6;
string serial = 7;
string not_before = 8; // RFC3339
string not_after = 9; // RFC3339
int64 days_until_expiry = 10;
repeated string sans = 11;
repeated string eku = 12;
string key_algo = 13;
int64 key_size = 14;
string key_file = 15;
string cert_file = 16;
repeated string root_cert_files = 17;
repeated string trust_symlinks = 18;
bool on_disk = 19;
bool key_matches_cert = 20;
CertHealth health = 21;
string last_enrolled = 22; // RFC3339
}

message CAInfo {
string name = 1;
string hostname = 2;
repeated string templates = 3;
repeated string root_fingerprints = 4; // hex SHA-256 of discovered CA cert(s)
bool installed_in_trust = 5;
bool enrolled = 6;
}

message CertVerifyResult {
string nickname = 1;
bool chain_ok = 2;
bool validity_ok = 3;
bool key_match_ok = 4;
bool revocation_checked = 5;
bool revoked = 6;
repeated string messages = 7;
}
Loading
Loading