From f7f5237a89aabfa8e248020683bf6f24f7599161 Mon Sep 17 00:00:00 2001 From: Kamalgurna Date: Tue, 21 Jul 2026 08:05:41 -0400 Subject: [PATCH 1/2] Ninja SSL Cert Solution upgrade - Deprecated cPVAL Enable SSL Cert Audit. Certificate auditing is no longer controlled by this custom field. - Renamed SSL Certificate Audit to [Windows - Certificates (My) - Local Machine - Audit to better reflect that the script audits all certificates in the **Local Machine Personal** certificate store rather than only SSL certificates. - Deprecated Compound Condition : SSL Audit - Servers and Compound Condition : SSL Audit - Workstations. Certificate auditing is now performed by Task Audit Local Machine Certificates, which runs the audit script on all supported Windows devices. - Separated the solution into independent **Auditing** and **Alerting** components, allowing certificate auditing to operate independently while providing optional SSL certificate expiration monitoring. - Certificate auditing no longer depends on any enablement custom field and will always maintain the certificate inventory. --- .../automations/ssl-certificate-audit.md | 42 ----- .../ssl-certificate-expiration-monitoring.md | 48 ++++++ ...indows-certificates-local-machine-audit.md | 55 ++++++ .../monitor-ssl-cert-expiration-servers.md | 37 ++++ ...onitor-ssl-cert-expiration-workstations.md | 37 ++++ .../compound-conditions/ssl-audit-servers.md | 7 +- .../ssl-audit-workstations.md | 6 +- .../cpval-enable-ssl-cert-audit.md | 9 +- .../cpval-enable-ssl-cert-expiration-alert.md | 40 +++++ ...cpval-expired-ssl-certificates-detected.md | 41 +++++ .../cpval-ssl-cert-expiry-threshold.md | 40 +++++ .../ssl-cert-expiration-alerts.md | 36 ++++ .../tasks/audit-local-machine-certificates.md | 40 +++++ docs/solutions/ssl-certificate-audit-ninja.md | 160 ++++++++++++++++-- .../image1.webp | Bin 0 -> 29456 bytes .../image1.webp | Bin 0 -> 26884 bytes .../image1.webp | Bin 10340 -> 11594 bytes .../image1.webp | Bin 0 -> 11508 bytes .../image1.webp | Bin 0 -> 11208 bytes 19 files changed, 536 insertions(+), 62 deletions(-) delete mode 100644 docs/ninjaone/automations/ssl-certificate-audit.md create mode 100644 docs/ninjaone/automations/ssl-certificate-expiration-monitoring.md create mode 100644 docs/ninjaone/automations/windows-certificates-local-machine-audit.md create mode 100644 docs/ninjaone/compound-conditions/monitor-ssl-cert-expiration-servers.md create mode 100644 docs/ninjaone/compound-conditions/monitor-ssl-cert-expiration-workstations.md create mode 100644 docs/ninjaone/custom-fields/cpval-enable-ssl-cert-expiration-alert.md create mode 100644 docs/ninjaone/custom-fields/cpval-expired-ssl-certificates-detected.md create mode 100644 docs/ninjaone/custom-fields/cpval-ssl-cert-expiry-threshold.md create mode 100644 docs/ninjaone/cw-manage-ticket-templates/ssl-cert-expiration-alerts.md create mode 100644 docs/ninjaone/tasks/audit-local-machine-certificates.md create mode 100644 static/img/docs/2c4efab3-5417-485a-b9cd-7d67ce474fd9/image1.webp create mode 100644 static/img/docs/304ab339-e99e-4b2d-9729-58a715df0a87/image1.webp create mode 100644 static/img/docs/4b6c5595-4336-4e14-a119-c6c7e2c31443/image1.webp create mode 100644 static/img/docs/60d87a2b-e5ba-4aef-bbc8-35d60d101889/image1.webp diff --git a/docs/ninjaone/automations/ssl-certificate-audit.md b/docs/ninjaone/automations/ssl-certificate-audit.md deleted file mode 100644 index 0f031a0f7e..0000000000 --- a/docs/ninjaone/automations/ssl-certificate-audit.md +++ /dev/null @@ -1,42 +0,0 @@ ---- -id: '3c9e2ed2-f805-4da9-85fb-7fa1d1d146f5' -slug: /3c9e2ed2-f805-4da9-85fb-7fa1d1d146f5 -title: 'SSL Certificate Audit' -title_meta: 'SSL Certificate Audit' -keywords: ['certificates', 'audit', 'expiration', 'status', 'thumbprint', 'issuer', 'subject', 'client', 'computer'] -description: 'This Script pulls any and all certificates in the personal certificate repository on windows machines that it is run on.' -tags: ['windows'] -draft: false -unlisted: false -last_update: - date: 2026-02-16 ---- - -## Overview -This Script pulls any and all certificates in the personal certificate repository on windows machines that it is run on. It then updates the custom field [cPVAL SSL certificate Audit](/docs/350874e6-7bef-4bff-8fce-f2772acab495) with the SSL details. - -## Sample Run - -`Play Button` > `Run Automation` > `Script` -![SampleRun1](../../../static/img/docs/b97b3d2c-ecc6-42ff-9236-36b14765c9b7/samplerun1.webp) - -![SampleRun2](../../../static/img/docs/3c9e2ed2-f805-4da9-85fb-7fa1d1d146f5/image1.webp) - -## Dependencies -- [Solution - SSL Certificate Audit](/docs/cf5acc69-183c-4838-9484-2f3d9a247877) -- [Custom field - cPVAL SSL certificate Audit](/docs/350874e6-7bef-4bff-8fce-f2772acab495) - -## Automation Setup/Import - -[Automation Configuration](https://github.com/ProVal-Tech/ninjarmm/blob/main/scripts/ssl-certificate-audit.ps1) - -## Output - -- Activity Details -- Custom Field - -## Changelog - -### 2026-02-13 - -- Initial version of the document diff --git a/docs/ninjaone/automations/ssl-certificate-expiration-monitoring.md b/docs/ninjaone/automations/ssl-certificate-expiration-monitoring.md new file mode 100644 index 0000000000..2977d1401e --- /dev/null +++ b/docs/ninjaone/automations/ssl-certificate-expiration-monitoring.md @@ -0,0 +1,48 @@ +--- +id: '4b6c5595-4336-4e14-a119-c6c7e2c31443' +slug: /4b6c5595-4336-4e14-a119-c6c7e2c31443 +title: 'SSL Certificate Expiration Monitoring' +title_meta: 'SSL Certificate Expiration Monitoring' +keywords: ['certificates', 'audit', 'expiration', 'status', 'thumbprint', 'issuer', 'subject', 'client', 'computer'] +description: 'Monitors the local machine certificate store for SSL certificates that are expiring soon or have already expired, and reports any that havent already been alerted on.' +tags: ['windows'] +draft: false +unlisted: false +last_update: + date: 2026-07-20 +--- + +## Overview + +Monitors the local machine certificate store for SSL certificates that are expiring soon or have already expired, and reports any that haven't already been alerted on. + +## Sample Run + +`Play Button` > `Run Automation` > `Script` +![SampleRun1](../../../static/img/docs/b97b3d2c-ecc6-42ff-9236-36b14765c9b7/samplerun1.webp) +![SampleRun2](../../../static/img/docs/4b6c5595-4336-4e14-a119-c6c7e2c31443/image1.webp) + +## Dependencies + +- [Solution - SSL Certificate Audit](/docs/cf5acc69-183c-4838-9484-2f3d9a247877) + +## Parameters + +| Name | Example | Accepted Values | Required | Default | Type | Description | +| ---- | ------- | --------------- | -------- | ------- | ---- | ----------- | +| SSL Cert Expiry Threshold | 15 | Numeric Values | False | - | Text | Set the number of days before SSL certificate expiration to detect and report certificates requiring attention. | + + +## Automation Setup/Import + +[Automation Configuration](https://github.com/ProVal-Tech/ninjarmm/blob/main/scripts/ssl-certificate-expiration-monitoring.ps1) + +## Output + +- Activity Details + +## Changelog + +### 2026-07-20 + +- Initial version of the document \ No newline at end of file diff --git a/docs/ninjaone/automations/windows-certificates-local-machine-audit.md b/docs/ninjaone/automations/windows-certificates-local-machine-audit.md new file mode 100644 index 0000000000..8d90e3809d --- /dev/null +++ b/docs/ninjaone/automations/windows-certificates-local-machine-audit.md @@ -0,0 +1,55 @@ +--- +id: '3c9e2ed2-f805-4da9-85fb-7fa1d1d146f5' +slug: /3c9e2ed2-f805-4da9-85fb-7fa1d1d146f5 +title: 'Windows - Certificates (My) - Local Machine - Audit' +title_meta: 'Windows - Certificates (My) - Local Machine - Audit' +keywords: ['certificates', 'audit', 'expiration', 'status', 'thumbprint', 'issuer', 'subject', 'client', 'computer'] +description: 'Audits all certificates in the local machines personal certificate store and flags expired or soon-to-expire certificates.' +tags: ['windows'] +draft: false +unlisted: false +last_update: + date: 2026-07-20 +--- + +## Overview +This Script audits all certificates in the local machine's personal certificate store and flags expired or soon-to-expire certificates. It then updates the custom field [cPVAL SSL certificate Audit](/docs/350874e6-7bef-4bff-8fce-f2772acab495) with the SSL certificate details and also sets the custom field [cPVAL Expired SSL Certificates Detected](/docs/2c4efab3-5417-485a-b9cd-7d67ce474fd9) to True if any expired or soon-to-expire certificates are found during the audit. + +## Sample Run + +`Play Button` > `Run Automation` > `Script` +![SampleRun1](../../../static/img/docs/b97b3d2c-ecc6-42ff-9236-36b14765c9b7/samplerun1.webp) +![SampleRun2](../../../static/img/docs/3c9e2ed2-f805-4da9-85fb-7fa1d1d146f5/image1.webp) + +## Dependencies + +- [Solution - SSL Certificate Audit](/docs/cf5acc69-183c-4838-9484-2f3d9a247877) +- [Custom field - cPVAL SSL certificate Audit](/docs/350874e6-7bef-4bff-8fce-f2772acab495) +- [cPVAL Expired SSL Certificates Detected](/docs/2c4efab3-5417-485a-b9cd-7d67ce474fd9) + +## Parameters + +| Name | Example | Accepted Values | Required | Default | Type | Description | +| ---- | ------- | --------------- | -------- | ------- | ---- | ----------- | +| SSL Cert Expiry Threshold | 15 | Numeric Values | False | - | Text | Set the number of days before SSL certificate expiration to detect and report certificates requiring attention. | + +**Note** : `SSL Cert Expiry Threshold should be similar to [Script : SSL Certificate Expiration Monitoring](/docs/4b6c5595-4336-4e14-a119-c6c7e2c31443) to alert for the certificates that are expired or soon to expire.` + +## Automation Setup/Import + +[Automation Configuration](https://github.com/ProVal-Tech/ninjarmm/blob/main/scripts/windows-certificates-local-machine-audit.ps1) + +## Output + +- Activity Details +- Custom Field + +## Changelog + +### 2026-07-20 + +- Renamed the script from `SSL Certificate Audit` to `Windows - Certificates (My) - Local Machine - Audit` since this script pulls all certificates and not just SSL certificates on the machine. + +### 2026-02-13 + +- Initial version of the document diff --git a/docs/ninjaone/compound-conditions/monitor-ssl-cert-expiration-servers.md b/docs/ninjaone/compound-conditions/monitor-ssl-cert-expiration-servers.md new file mode 100644 index 0000000000..cfc66e2ede --- /dev/null +++ b/docs/ninjaone/compound-conditions/monitor-ssl-cert-expiration-servers.md @@ -0,0 +1,37 @@ +--- +id: '79d5020a-7487-42ad-9dc3-1cfd7d675be5' +slug: /79d5020a-7487-42ad-9dc3-1cfd7d675be5 +title: 'Monitor SSL Cert Expiration - Servers' +title_meta: 'Monitor SSL Cert Expiration - Servers' +keywords: ['certificates', 'audit', 'expiration', 'status', 'thumbprint', 'issuer', 'subject', 'client', 'computer'] +description: 'Triggers the Script SSL Certificate Expiration Monitoring automation on Windows workstation' +tags: ['windows'] +draft: false +unlisted: false +last_update: + date: 2026-07-20 +--- + +## Summary +Triggers the [Script : SSL Certificate Expiration Monitoring](/docs/4b6c5595-4336-4e14-a119-c6c7e2c31443) automation on Windows Servers where alerting is enabled and [Custom Field : cPVAL Expired SSL Certificates Detected](/docs/2c4efab3-5417-485a-b9cd-7d67ce474fd9) is Set to `True` by [Script : Windows - Certificates (My) - Local Machine - Audit](/docs/3c9e2ed2-f805-4da9-85fb-7fa1d1d146f5). It creates tickets if [Script : SSL Certificate Expiration Monitoring](/docs/4b6c5595-4336-4e14-a119-c6c7e2c31443) detects any expired or soon-to-expire certificate that haven't already been alerted on. + +## Details + +- **Name:** `Monitor SSL Cert Expiration - Servers` +- **Description:** `Triggers the [Script : SSL Certificate Expiration Monitoring](/docs/4b6c5595-4336-4e14-a119-c6c7e2c31443) automation on Windows Servers where alerting is enabled and [Custom Field : cPVAL Expired SSL Certificates Detected](/docs/2c4efab3-5417-485a-b9cd-7d67ce474fd9) is Set to 'True' by [Script : Windows - Certificates (My) - Local Machine - Audit](/docs/3c9e2ed2-f805-4da9-85fb-7fa1d1d146f5). It creates tickets if [Script : SSL Certificate Expiration Monitoring](/docs/4b6c5595-4336-4e14-a119-c6c7e2c31443) detects any expired or soon-to-expire certificate that haven't already been alerted on.` +- **Recommended Agent Policies:** `Windows Servers` + +## Dependencies + +- [Solution - SSL Certificate Audit](/docs/cf5acc69-183c-4838-9484-2f3d9a247877) +- [Ticket Template : SSL Cert Expiration Alerts](/docs/1333942f-f022-4795-956b-ae86f815a636) + +## Compound Condition Creation + +- [Compound Condition Configuration](https://github.com/ProVal-Tech/ninjarmm/blob/main/compound-conditions/monitor-ssl-cert-expiration-servers.toml) + +## Changelog + +### 2026-07-20 + +- Initial version of the document diff --git a/docs/ninjaone/compound-conditions/monitor-ssl-cert-expiration-workstations.md b/docs/ninjaone/compound-conditions/monitor-ssl-cert-expiration-workstations.md new file mode 100644 index 0000000000..7d58592347 --- /dev/null +++ b/docs/ninjaone/compound-conditions/monitor-ssl-cert-expiration-workstations.md @@ -0,0 +1,37 @@ +--- +id: '8c096a91-90f6-4c25-a5dc-745598b19e11' +slug: /8c096a91-90f6-4c25-a5dc-745598b19e11 +title: 'Monitor SSL Cert Expiration - Workstations' +title_meta: 'Monitor SSL Cert Expiration - Workstations' +keywords: ['certificates', 'audit', 'expiration', 'status', 'thumbprint', 'issuer', 'subject', 'client', 'computer'] +description: 'Triggers the Script SSL Certificate Expiration Monitoring automation on Windows workstation' +tags: ['windows'] +draft: false +unlisted: false +last_update: + date: 2026-07-20 +--- + +## Summary +Triggers the [Script : SSL Certificate Expiration Monitoring](/docs/4b6c5595-4336-4e14-a119-c6c7e2c31443) automation on Windows workstations where alerting is enabled and [Custom Field : cPVAL Expired SSL Certificates Detected](/docs/2c4efab3-5417-485a-b9cd-7d67ce474fd9) is Set to `True` by [Script : Windows - Certificates (My) - Local Machine - Audit](/docs/3c9e2ed2-f805-4da9-85fb-7fa1d1d146f5). It creates tickets if [Script : SSL Certificate Expiration Monitoring](/docs/4b6c5595-4336-4e14-a119-c6c7e2c31443) detects any expired or soon-to-expire certificate that haven't already been alerted on. + +## Details + +- **Name:** `Monitor SSL Cert Expiration - Workstations` +- **Description:** `Triggers the [Script : SSL Certificate Expiration Monitoring](/docs/4b6c5595-4336-4e14-a119-c6c7e2c31443) automation on Windows workstations where alerting is enabled and [Custom Field : cPVAL Expired SSL Certificates Detected](/docs/2c4efab3-5417-485a-b9cd-7d67ce474fd9) is Set to 'True' by [Script : Windows - Certificates (My) - Local Machine - Audit](/docs/3c9e2ed2-f805-4da9-85fb-7fa1d1d146f5). It creates tickets if [Script : SSL Certificate Expiration Monitoring](/docs/4b6c5595-4336-4e14-a119-c6c7e2c31443) detects any expired or soon-to-expire certificate that haven't already been alerted on.` +- **Recommended Agent Policies:** `Windows Workstations` + +## Dependencies + +- [Solution - SSL Certificate Audit](/docs/cf5acc69-183c-4838-9484-2f3d9a247877) +- [Ticket Template : SSL Cert Expiration Alerts](/docs/1333942f-f022-4795-956b-ae86f815a636) + +## Compound Condition Creation + +- [Compound Condition Configuration](https://github.com/ProVal-Tech/ninjarmm/blob/main/compound-conditions/monitor-ssl-cert-expiration-workstations.toml) + +## Changelog + +### 2026-07-20 + +- Initial version of the document diff --git a/docs/ninjaone/compound-conditions/ssl-audit-servers.md b/docs/ninjaone/compound-conditions/ssl-audit-servers.md index 50b40477f2..62bbb1e4a6 100644 --- a/docs/ninjaone/compound-conditions/ssl-audit-servers.md +++ b/docs/ninjaone/compound-conditions/ssl-audit-servers.md @@ -7,7 +7,7 @@ keywords: ['certificates', 'audit', 'expiration', 'status', 'thumbprint', 'issue description: 'This compound condition performs SSL Certificate Audit once per day on Windows servers where auditing is enabled from `cPVAL Enable SSL Cert Audit` custom field. If set to Disable, the audit will not be performed.' tags: ['windows'] draft: false -unlisted: false +unlisted: true last_update: date: 2026-02-16 --- @@ -31,6 +31,11 @@ This compound condition performs SSL Certificate Audit once per day on Windows s ## Changelog +### 2026-07-20 + +- Deprecated [Compound Condition : SSL Audit - Servers](/docs/e38129a0-21bf-45fc-b6da-528312973aa0) as [Task : Audit Local Machine Certificates](/docs/f83dd443-cd43-45ce-8f05-a09e78b9ac0d) will run the Audit script on all windows machines. + + ### 2026-02-13 - Initial version of the document diff --git a/docs/ninjaone/compound-conditions/ssl-audit-workstations.md b/docs/ninjaone/compound-conditions/ssl-audit-workstations.md index 97c6a6eabe..49a40adbb3 100644 --- a/docs/ninjaone/compound-conditions/ssl-audit-workstations.md +++ b/docs/ninjaone/compound-conditions/ssl-audit-workstations.md @@ -7,7 +7,7 @@ keywords: ['certificates', 'audit', 'expiration', 'status', 'thumbprint', 'issue description: 'This compound condition performs SSL Certificate Audit once per day on Windows Workstations where auditing is enabled from `cPVAL Enable SSL Cert Audit` custom field. If set to Disable, the audit will not be performed.' tags: ['windows'] draft: false -unlisted: false +unlisted: true last_update: date: 2026-02-16 --- @@ -32,6 +32,10 @@ This compound condition performs SSL Certificate Audit once per day on Windows W ## Changelog +### 2026-07-20 + +- Deprecated [Compound Condition : SSL Audit - Servers](/docs/e38129a0-21bf-45fc-b6da-528312973aa0) and [Compound Condition : SSL Audit - Workstations](/docs/d6082c07-16ba-4b32-8eee-c01384378ac7) as [Task : Audit Local Machine Certificates](/docs/f83dd443-cd43-45ce-8f05-a09e78b9ac0d) will run the Audit script on all windows machines. + ### 2026-02-16 - Initial version of the document diff --git a/docs/ninjaone/custom-fields/cpval-enable-ssl-cert-audit.md b/docs/ninjaone/custom-fields/cpval-enable-ssl-cert-audit.md index 07497fd6a3..de32829948 100644 --- a/docs/ninjaone/custom-fields/cpval-enable-ssl-cert-audit.md +++ b/docs/ninjaone/custom-fields/cpval-enable-ssl-cert-audit.md @@ -7,9 +7,9 @@ keywords: ['certificates', 'audit', 'expiration', 'status', 'thumbprint', 'issue description: 'Custom Field to enable SSL Certificates Audit' tags: ['windows'] draft: false -unlisted: false +unlisted: true last_update: - date: 2026-02-16 + date: 2026-07-20 --- ## Summary @@ -23,6 +23,7 @@ Select the operating system for which SSL Certificate Audit should be enabled. U ## Dependencies + - [Solution - SSL Certificate Audit](/docs/cf5acc69-183c-4838-9484-2f3d9a247877) ## Custom Field Creation @@ -35,6 +36,10 @@ Select the operating system for which SSL Certificate Audit should be enabled. U ## Changelog +### 2026-07-20 + +- Deprecating this Custom Field, since its an Audit solution and no longer be controlled by the custom field. + ### 2026-02-13 - Initial version of the document diff --git a/docs/ninjaone/custom-fields/cpval-enable-ssl-cert-expiration-alert.md b/docs/ninjaone/custom-fields/cpval-enable-ssl-cert-expiration-alert.md new file mode 100644 index 0000000000..c6c409ed02 --- /dev/null +++ b/docs/ninjaone/custom-fields/cpval-enable-ssl-cert-expiration-alert.md @@ -0,0 +1,40 @@ +--- +id: '60d87a2b-e5ba-4aef-bbc8-35d60d101889' +slug: /60d87a2b-e5ba-4aef-bbc8-35d60d101889 +title: 'cPVAL Enable SSL Cert Expiration Alerts' +title_meta: 'cPVAL Enable SSL Cert Expiration Alerts' +keywords: ['certificates', 'audit', 'expiration', 'status', 'thumbprint', 'issuer', 'subject', 'client', 'computer'] +description: 'Custom Field to select the operating systems on which SSL Certificate Expiration Alerts should be enabled.' +tags: ['windows'] +draft: false +unlisted: false +last_update: + date: 2026-07-20 +--- + +## Summary +Custom Field to select the operating systems on which SSL Certificate Expiration Alerts should be enabled. It will detect expired certificates and certificates approaching expiration based on configured threshold and generate alerts for selected operating system. + +## Details + +| Label | Field Name | Definition Scope | Type | Required | Option Value | Default Value | Technician Permission | Automation Permission | API Permission | Description | Tool Tip | Footer Text | Custom Field Tab Name | +| ----- | ---- | ---------------- | ---- | -------- | ------------ | ------------- | --------------------- | --------------------- | -------------- | ----------- | -------- | ----------- | ----------- | +| cPVAL Enable SSL Cert Expiration Alerts | cpvalEnableSslCertExpirationAlerts | Organization, Location, Device | DropDown | False | Disable, Windows, Windows Workstations, Windows Servers | | Editable | Read/Write | Read/Write | Select the operating systems on which SSL Certificate Expiration Alerts should be enabled. It will detect expired certificates and certificates approaching expiration based on configured threshold and generate alerts for selected operating system.| Select the operating systems on which SSL Certificate Expiration Alerts should be enabled. It will detect expired certificates and certificates approaching expiration based on configured threshold and generate alerts for selected operating system. | Select the operating systems on which SSL Certificate Expiration Alerts should be enabled. | SSL Certificate | + +## Dependencies + +- [Solution - SSL Certificate Audit](/docs/cf5acc69-183c-4838-9484-2f3d9a247877) + +## Custom Field Creation + +- [Custom Field Configuration](https://github.com/ProVal-Tech/ninjarmm/blob/main/custom-fields/cpval-enable-ssl-cert-expiration-alert.toml) + +## Sample Screenshot + +![Image](../../../static/img/docs/60d87a2b-e5ba-4aef-bbc8-35d60d101889/image1.webp) + +## Changelog + +### 2026-07-20 + +- Initial version of the document diff --git a/docs/ninjaone/custom-fields/cpval-expired-ssl-certificates-detected.md b/docs/ninjaone/custom-fields/cpval-expired-ssl-certificates-detected.md new file mode 100644 index 0000000000..c4268938e1 --- /dev/null +++ b/docs/ninjaone/custom-fields/cpval-expired-ssl-certificates-detected.md @@ -0,0 +1,41 @@ +--- +id: '2c4efab3-5417-485a-b9cd-7d67ce474fd9' +slug: /2c4efab3-5417-485a-b9cd-7d67ce474fd9 +title: 'cPVAL Expired SSL Certificates Detected' +title_meta: 'cPVAL Expired SSL Certificates Detected' +keywords: ['certificates', 'audit', 'expiration', 'status', 'thumbprint', 'issuer', 'subject', 'client', 'computer'] +description: 'This custom field is updated by the `Windows - Certificates (My) - Local Machine - Audit` script to `True` when an expired certificate or a certificate approaching expiration date is detected on the device.' +tags: ['windows'] +draft: false +unlisted: false +last_update: + date: 2026-07-20 +--- + +## Summary +This custom field is updated by the [Script : Windows - Certificates (My) - Local Machine - Audit](/docs/3c9e2ed2-f805-4da9-85fb-7fa1d1d146f5) to `True` when an expired certificate or a certificate approaching expiration date is detected on the device. + +## Details + +| Label | Field Name | Definition Scope | Type | Required | Default Value | Technician Permission | Automation Permission | API Permission | Description | Tool Tip | Footer Text | Custom Field Tab Name | +| ----- | ---- | ---------------- | ---- | -------- | ------------- | --------------------- | --------------------- | -------------- | ----------- | -------- | ----------- | ----------- | +|cPVAL Expired SSL Certificates Detected|cpvalExpiredSslCertificatesDetected| `Device` | Text | False | | Editable | Read_Write | Read_Write | This custom field is updated by the `Windows - Certificates (My) - Local Machine - Audit` script to `True` when an expired certificate or a certificate approaching expiration date is detected on the device. | This custom field is updated by the `Windows - Certificates (My) - Local Machine - Audit` script to `True` when an expired certificate or a certificate approaching expiration date is detected on the device. | This custom field is updated by the `Windows - Certificates (My) - Local Machine - Audit` script to `True` when an expired certificate or a certificate approaching expiration date is detected on the device. | SSL Certificate | + +## Dependencies + +- [Solution - SSL Certificate Audit](/docs/cf5acc69-183c-4838-9484-2f3d9a247877) + +## Custom Field Creation + +- [Custom Field Configuration](https://github.com/ProVal-Tech/ninjarmm/blob/main/custom-fields/cpval-expired-ssl-certificates-detected.toml) + +## Sample Screenshot + +![Image](../../../static/img/docs/2c4efab3-5417-485a-b9cd-7d67ce474fd9/image1.webp) + +## Changelog + +### 2026-07-20 + +- Initial version of the document + diff --git a/docs/ninjaone/custom-fields/cpval-ssl-cert-expiry-threshold.md b/docs/ninjaone/custom-fields/cpval-ssl-cert-expiry-threshold.md new file mode 100644 index 0000000000..256e2637ab --- /dev/null +++ b/docs/ninjaone/custom-fields/cpval-ssl-cert-expiry-threshold.md @@ -0,0 +1,40 @@ +--- +id: '304ab339-e99e-4b2d-9729-58a715df0a87' +slug: /304ab339-e99e-4b2d-9729-58a715df0a87 +title: 'cPVAL SSL Cert Expiry Threshold' +title_meta: 'cPVAL SSL Cert Expiry Threshold' +keywords: ['certificates', 'audit', 'expiration', 'status', 'thumbprint', 'issuer', 'subject', 'client', 'computer'] +description: 'Custom Field to define the number of days prior to SSL certificate expiration when an alert should be generated.' +tags: ['windows'] +draft: false +unlisted: false +last_update: + date: 2026-07-20 +--- + +## Summary +Custom Field to define the number of days prior to SSL certificate expiration when an alert should be generated. Certificates that are already expired or are within the configured expiration threshold will be detected and reported. Default Value is 30 Days. + +## Details + +| Label | Field Name | Definition Scope | Type | Required | Default Value | Technician Permission | Automation Permission | API Permission | Description | Tool Tip | Footer Text | Custom Field Tab Name | +| ----- | ---- | ---------------- | ---- | -------- | ------------- | --------------------- | --------------------- | -------------- | ----------- | -------- | ----------- | ----------- | +|cPVAL SSL Cert Expiry Threshold| cpvalSslCertExpiryThreshold | `Organization`, `Location`, `Device` | Text | False | | Editable | Read_Write | Read_Write | Define the number of days prior to SSL certificate expiration when an alert should be generated. Certificates that are already expired or are within the configured expiration threshold will be detected and reported. Default Value is 30 Days. | Define the number of days prior to SSL certificate expiration when an alert should be generated. Certificates that are already expired or are within the configured expiration threshold will be detected and reported. Default Value is 30 Days. | Define the number of days prior to SSL certificate expiration when an alert should be generated. Default Value is 30 Days. | SSl Certificate | + +## Dependencies + +- [Solution - SSL Certificate Audit](/docs/cf5acc69-183c-4838-9484-2f3d9a247877) + +## Custom Field Creation + +- [Custom Field Configuration](https://github.com/ProVal-Tech/ninjarmm/blob/main/custom-fields/cpval-ssl-cert-expiry-threshold.toml) + +## Sample Screenshot + +![Image](../../../static/img/docs/304ab339-e99e-4b2d-9729-58a715df0a87/image1.webp) + +## Changelog + +### 2026-07-20 + +- Initial version of the document diff --git a/docs/ninjaone/cw-manage-ticket-templates/ssl-cert-expiration-alerts.md b/docs/ninjaone/cw-manage-ticket-templates/ssl-cert-expiration-alerts.md new file mode 100644 index 0000000000..fe6dd17816 --- /dev/null +++ b/docs/ninjaone/cw-manage-ticket-templates/ssl-cert-expiration-alerts.md @@ -0,0 +1,36 @@ +--- +id: '1333942f-f022-4795-956b-ae86f815a636' +slug: /1333942f-f022-4795-956b-ae86f815a636 +title: 'SSL Cert Expiration Alerts' +title_meta: 'SSL Cert Expiration Alerts' +keywords: ['certificates', 'audit', 'expiration', 'status', 'thumbprint', 'issuer', 'subject', 'client', 'computer'] +description: '' +tags: ['windows'] +draft: false +unlisted: false +last_update: + date: 2026-07-20 +--- + +## Overview + +This ticket template configures how a ConnectWise Manage ticket will be generated in response to the [Compound Condition : Monitor SSL Cert Expiration - Workstations](/docs/8c096a91-90f6-4c25-a5dc-745598b19e11) and [Compound Condition : Monitor SSL Cert Expiration - Servers](/docs/79d5020a-7487-42ad-9dc3-1cfd7d675be5) condition. + +## Requirement + +Ensure that the ConnectWise Manage app is enabled and connected. +![Requirement](../../../static/img/docs/86a9b907-a95e-48a8-a304-2bb243c3b6a1/requirement.webp) + +## Dependencies + +- [Solution - SSL Certificate Audit](/docs/cf5acc69-183c-4838-9484-2f3d9a247877) + +## Template Creation + +[CW Manage Ticket Template Configuration](https://github.com/ProVal-Tech/ninjarmm/blob/main/cw-manage-ticket-templates/ssl-cert-expiration-alerts.toml) + +## Changelog + +### 2026-07-20 + +- Initial version of the document \ No newline at end of file diff --git a/docs/ninjaone/tasks/audit-local-machine-certificates.md b/docs/ninjaone/tasks/audit-local-machine-certificates.md new file mode 100644 index 0000000000..72a787632e --- /dev/null +++ b/docs/ninjaone/tasks/audit-local-machine-certificates.md @@ -0,0 +1,40 @@ +--- +id: 'f83dd443-cd43-45ce-8f05-a09e78b9ac0d' +slug: /f83dd443-cd43-45ce-8f05-a09e78b9ac0d +title: 'Audit Local Machine Certificates' +title_meta: 'Audit Local Machine Certificates' +keywords: ['certificates', 'audit', 'expiration', 'status', 'thumbprint', 'issuer', 'subject', 'client', 'computer'] +description: 'This task executes Windows - Certificates (My) - Local Machine - Audit once per day.' +tags: ['windows'] +draft: false +unlisted: false +last_update: + date: 2026-07-20 +--- + +## Summary +This task executes [Script : Windows - Certificates (My) - Local Machine - Audit](/docs/3c9e2ed2-f805-4da9-85fb-7fa1d1d146f5) once per day on windows machines. + +## Dependencies + +- [Solution - SSL Certificate Audit](/docs/cf5acc69-183c-4838-9484-2f3d9a247877) +- [Group : cPVAL Windows Servers](/docs/c73e004e-6a9c-40e4-8e74-babb4b729256) +- [Group : cPVAL Windows Workstations](/docs/6c0a75ba-68b7-47a5-acb8-17ef303f9422) +- [Script : Windows - Certificates (My) - Local Machine - Audit](/docs/3c9e2ed2-f805-4da9-85fb-7fa1d1d146f5) + + +## Details + +| Name | Description | Allow Groups | Repeats | Recur every | Start At | Ends | Targets | Automations | +| ---------- | ----------- | ------------ | ------- | ----------- | -------- | ---- | ------- | ----------- | +| Audit Local Machine Certificates | This task executes 'Windows - Certificates (My) - Local Machine - Audit' once per day. | True | Daily | 1 Day | 07/17/2026 10:00 AM | Never | [Group : cPVAL Windows Servers](/docs/c73e004e-6a9c-40e4-8e74-babb4b729256), [Group : cPVAL Windows Workstations](/docs/6c0a75ba-68b7-47a5-acb8-17ef303f9422)| [Script : Windows - Certificates (My) - Local Machine - Audit](/docs/3c9e2ed2-f805-4da9-85fb-7fa1d1d146f5) | + +## Task Creation + +[Task Configuration](https://github.com/ProVal-Tech/ninjarmm/blob/main/tasks/audit-local-machine-certificates.toml) + +## Changelog + +### 2026-07-20 + +- Initial version of the document \ No newline at end of file diff --git a/docs/solutions/ssl-certificate-audit-ninja.md b/docs/solutions/ssl-certificate-audit-ninja.md index 1f2c3042a8..25759e385a 100644 --- a/docs/solutions/ssl-certificate-audit-ninja.md +++ b/docs/solutions/ssl-certificate-audit-ninja.md @@ -12,32 +12,160 @@ last_update: date: 2026-02-16 --- + ## Purpose -The purpose of this NinjaOne solution is to pull any and all certificates in the personal certificate repository on windows machines. +The purpose of this solution is to audit all certificates in the **Local Machine Personal** certificate store on Windows devices and maintain an up-to-date inventory of the certificates present on each endpoint. During each audit, the solution identifies certificates that have expired or are approaching expiration based on a configurable threshold, updates the certificate inventory custom field with the audit results, and flags endpoints containing expired or soon-to-expire certificates. By default, certificates expiring within **30 days** are considered to be approaching expiration. This threshold can be customized using either using a custom field or the script parameter. + +The solution also provides an optional alerting feature that uses the audit results to generate tickets only for devices where SSL certificate expiration monitoring has been enabled. + +### Key Capabilities + +1. **Comprehensive Certificate Auditing** + Audits all certificates in the Windows **Local Machine Personal** certificate store and maintains an up-to-date inventory of the certificates present on each endpoint. + +2. **Configurable Expiration Threshold** + Configure the number of days prior to certificate expiration when a certificate should be considered as approaching expiration. The default expiration threshold is **30 days**. + +3. **Certificate Inventory Reporting** + Updates the **[cPVAL SSL certificate Audit](/docs/350874e6-7bef-4bff-8fce-f2772acab495)** custom field with detailed information about every certificate discovered during the audit, including certificate metadata and expiration details. + +4. **Optional Expiration Alerting** + Detects expired and soon-to-expire certificates and updates the **[cPVAL Expired SSL Certificates Detected](/docs/2c4efab3-5417-485a-b9cd-7d67ce474fd9)** custom field. The optional alerting component uses this information to generate alerts only on devices where SSL certificate expiration monitoring has been enabled. + +### Important Caveats & Behavior + +1. **Certificate Store Audited** + The solution audits certificates located only in the Windows **Local Machine Personal (My)** certificate store. Certificates stored in other certificate stores are not evaluated. + +2. **Expiration Detection** + During each audit, certificates are evaluated against the configured expiration threshold. Certificates that have already expired or are within the configured threshold are flagged for reporting. + +3. **Auditing and Alerting are Independent** + Certificate auditing operates independently and always updates the certificate inventory. Alerting is optional and depends on the **[cPVAL Enable SSL Cert Expiration Alerts](/docs/60d87a2b-e5ba-4aef-bbc8-35d60d101889)** custom field being enabled. + +4. **Recurring Audits** + The audit task is designed to run on a scheduled basis to keep the certificate inventory current and ensure newly expired or soon-to-expire certificates are detected promptly. ## Associated Content -| Content | Type | Function | -|-----------------------------------------------------|-----------------------------------------------------------|--------------------------------------------------------| -| [cPVAL SSL certificate Audit](/docs/350874e6-7bef-4bff-8fce-f2772acab495) | Custom Field | List of all SSL certificates in the personal certificate repository. This Data is populated by [SSL Certificate Audit](/docs/3c9e2ed2-f805-4da9-85fb-7fa1d1d146f5) automation. | -| [cPVAL Enable SSL Cert Audit](/docs/87e79b06-8bb4-4902-8a0c-0a626dfb11ab) | Custom Field | Custom Field to enable SSL Certificates Audit | -| [SSL Certificate Audit](/docs/3c9e2ed2-f805-4da9-85fb-7fa1d1d146f5) | Automation | This Script pulls any and all certificates in the personal certificate repository on windows machines that it is run on. | -| [SSL Audit - Servers](/docs/e38129a0-21bf-45fc-b6da-528312973aa0) | Compound Condition | This compound condition performs SSL Certificate Audit once per day on Windows servers | -| [SSL Audit - Workstations](/docs/d6082c07-16ba-4b32-8eee-c01384378ac7) | Compound Condition | This compound condition performs SSL Certificate Audit once per day on Windows Workstations | +### For Auditing + +| Content | Type | Function | +|---------------------------|-----------------------------------|------------------------------------------| +| [cPVAL SSL certificate Audit](/docs/350874e6-7bef-4bff-8fce-f2772acab495) | Custom Field | Stores the inventory of all certificates discovered in the Local Machine Personal certificate store. This field is populated by [Windows - Certificates (My) - Local Machine - Audit](/docs/3c9e2ed2-f805-4da9-85fb-7fa1d1d146f5) | +| [cPVAL Expired SSL Certificates Detected](/docs/2c4efab3-5417-485a-b9cd-7d67ce474fd9) | Custom Field | Set to `True` by[Windows - Certificates (My) - Local Machine - Audit](/docs/3c9e2ed2-f805-4da9-85fb-7fa1d1d146f5) when one or more certificates are expired or approaching expiration based on the configured threshold. This custom field is also used by the alerting solution. | +| [Custom Field : cPVAL SSL Cert Expiry Threshold](/docs/304ab339-e99e-4b2d-9729-58a715df0a87) | Custom Field | Defines the number of days before certificate expiration when a certificate should be considered as approaching expiration. Certificates that have already expired or fall within the configured threshold are flagged during the audit. The default value is 30 days. This custom field is also used by the alerting solution.| +| [Windows - Certificates (My) - Local Machine - Audit](/docs/3c9e2ed2-f805-4da9-85fb-7fa1d1d146f5) | Automation | Audits all certificates in the Local Machine Personal certificate store, updates the [Custom Field : cPVAL SSL certificate Audit](/docs/350874e6-7bef-4bff-8fce-f2772acab495) with the audit results, identifies certificates that are expired or approaching expiration based on the configured threshold, and sets the [Custom Field : cPVAL Expired SSL Certificates Detected](/docs/2c4efab3-5417-485a-b9cd-7d67ce474fd9) to `True` if any such certificates are detected. | +| [Audit Local Machine Certificates](/docs/f83dd443-cd43-45ce-8f05-a09e78b9ac0d)| Task | Executes [Script : Windows - Certificates (My) - Local Machine - Audit](/docs/3c9e2ed2-f805-4da9-85fb-7fa1d1d146f5) once per day against [Group : cPVAL Windows Servers](/docs/c73e004e-6a9c-40e4-8e74-babb4b729256) and [Group : cPVAL Windows Workstations](/docs/6c0a75ba-68b7-47a5-acb8-17ef303f9422) to maintain an up-to-date certificate inventory and detect expired or soon-to-expire certificates. | + + +### For Alerting + +| Content | Type | Function | +|-------|-----------------------------------------------------------|-----------------------------| +| [cPVAL Enable SSL Cert Expiration Alerts](/docs/60d87a2b-e5ba-4aef-bbc8-35d60d101889) | Custom Field | Enables or disables SSL certificate expiration monitoring for the selected operating systems. When enabled, alerts are generated for expired or soon-to-expire certificates based on the configured expiration threshold. | +| [SSL Cert Expiration Alerts](/docs/1333942f-f022-4795-956b-ae86f815a636) | Ticket Template |Defines how ConnectWise Manage tickets are created when [Compound Condition : Monitor SSL Cert Expiration - Workstations](/docs/8c096a91-90f6-4c25-a5dc-745598b19e11) or [Compound Condition : Monitor SSL Cert Expiration - Servers](/docs/79d5020a-7487-42ad-9dc3-1cfd7d675be5) detects expired or soon-to-expire certificates. | +| [SSL Certificate Expiration Monitoring](/docs/4b6c5595-4336-4e14-a119-c6c7e2c31443) | Automation | Processes the audit results and generates alerts for expired or soon-to-expire certificates that have not already been reported. The default certificate expiration threshold is 30 days. | +| [Monitor SSL Cert Expiration - Workstations](/docs/8c096a91-90f6-4c25-a5dc-745598b19e11) | Compound Condition | Executes [Script : SSL Certificate Expiration Monitoring](/docs/4b6c5595-4336-4e14-a119-c6c7e2c31443) on Windows workstations where [Custom Field : cPVAL Enable SSL Cert Expiration Alerts](/docs/60d87a2b-e5ba-4aef-bbc8-35d60d101889)is enabled and [Custom Field : cPVAL Expired SSL Certificates Detected](/docs/2c4efab3-5417-485a-b9cd-7d67ce474fd9) is set to True. Tickets are generated only for expired or soon-to-expire certificates that have not already been alerted on. | +| [Monitor SSL Cert Expiration - Servers](/docs/79d5020a-7487-42ad-9dc3-1cfd7d675be5) | Compound Condition | Executes [Script : SSL Certificate Expiration Monitoring](/docs/4b6c5595-4336-4e14-a119-c6c7e2c31443) on Windows Servers where [Custom Field : cPVAL Enable SSL Cert Expiration Alerts](/docs/60d87a2b-e5ba-4aef-bbc8-35d60d101889)is enabled and [Custom Field : cPVAL Expired SSL Certificates Detected](/docs/2c4efab3-5417-485a-b9cd-7d67ce474fd9) is set to True. Tickets are generated only for expired or soon-to-expire certificates that have not already been alerted on. | ## Implementation -- Create the below Custom Fields using the implementation instruction provided in the documents. - - [Custom field - cPVAL SSL certificate Audit](/docs/350874e6-7bef-4bff-8fce-f2772acab495) - - [Custom field - cPVAL Enable SSL Cert Audit](/docs/87e79b06-8bb4-4902-8a0c-0a626dfb11ab) -- Create the [Automation - SSL Certificate Audit](/docs/3c9e2ed2-f805-4da9-85fb-7fa1d1d146f5) using the implementation instruction provided in the document. -- Create the below Compound Conditions using the implementation instruction provided in the documents. - - [Compound Condition - SSL Audit - Servers](/docs/e38129a0-21bf-45fc-b6da-528312973aa0) - - [Compound Condition - SSL Audit - Workstations](/docs/d6082c07-16ba-4b32-8eee-c01384378ac7) +### Step 1: Create the Following Custom Fields + +Create all the custom fields listed below. These custom fields are required for the auditing and optional alerting components to function correctly. + +- [Custom Field : cPVAL SSL certificate Audit](/docs/350874e6-7bef-4bff-8fce-f2772acab495) +- [Custom Field : cPVAL Expired SSL Certificates Detected](/docs/2c4efab3-5417-485a-b9cd-7d67ce474fd9) +- [Custom Field : cPVAL SSL Cert Expiry Threshold](/docs/304ab339-e99e-4b2d-9729-58a715df0a87) +- [Custom Field : cPVAL Enable SSL Cert Expiration Alerts](/docs/60d87a2b-e5ba-4aef-bbc8-35d60d101889) + +### Step 2: Create the Following Scripts + +Create the automation scripts listed below. + +- [Script : Windows - Certificates (My) - Local Machine - Audit](/docs/3c9e2ed2-f805-4da9-85fb-7fa1d1d146f5) +- [Script : SSL Certificate Expiration Monitoring](/docs/4b6c5595-4336-4e14-a119-c6c7e2c31443) + +### Step 3: Create the Ticket Template + +Create the following ticket template to define how alerts are converted into ConnectWise Manage tickets. + +- [Ticket Template : SSL Cert Expiration Alerts](/docs/1333942f-f022-4795-956b-ae86f815a636) + +### Step 4: Create the Audit Task + +Create the following task to execute the certificate audit on managed Windows devices. + +- [Task : Audit Local Machine Certificates](/docs/f83dd443-cd43-45ce-8f05-a09e78b9ac0d) + +Schedule the [Task : Audit Local Machine Certificates](/docs/f83dd443-cd43-45ce-8f05-a09e78b9ac0d) to run once per day against [Group : cPVAL Windows Servers](/docs/c73e004e-6a9c-40e4-8e74-babb4b729256) and [Group : cPVAL Windows Workstations](/docs/6c0a75ba-68b7-47a5-acb8-17ef303f9422) to maintain an up-to-date certificate inventory. + +### Step 5: Create the Alerting Compound Conditions + +Create the following compound conditions to enable SSL certificate expiration monitoring. + +- [Compound Condition : Monitor SSL Cert Expiration - Workstations](/docs/8c096a91-90f6-4c25-a5dc-745598b19e11) +- [Compound Condition : Monitor SSL Cert Expiration - Servers](/docs/79d5020a-7487-42ad-9dc3-1cfd7d675be5) + +### Step 6: Review and Configure the Expiration Threshold + +Review the default expiration threshold and configure the [Custom Field : cPVAL SSL Cert Expiry Threshold](/docs/304ab339-e99e-4b2d-9729-58a715df0a87) as required for your environment. If no value is configured, the solution uses the default threshold of **30 days**. Alternatively, the threshold can be overridden by passing the appropriate parameter to the audit script. + +### Step 7: Enable SSL Certificate Expiration Monitoring + +Configure the [Custom Field : cPVAL Enable SSL Cert Expiration Alerts](/docs/60d87a2b-e5ba-4aef-bbc8-35d60d101889) for the required operating systems to enable SSL certificate expiration monitoring. Only devices with monitoring enabled will execute [Script : SSL Certificate Expiration Monitoring](/docs/4b6c5595-4336-4e14-a119-c6c7e2c31443) and generate tickets for expired or soon-to-expire certificates. + + +## FAQ + +### Q: How does the SSL Certificate Audit solution work? + +> The [Script : Windows - Certificates (My) - Local Machine - Audit](/docs/3c9e2ed2-f805-4da9-85fb-7fa1d1d146f5) audits all certificates in the Windows **Local Machine Personal** certificate store, updates the [cPVAL SSL certificate Audit](/docs/350874e6-7bef-4bff-8fce-f2772acab495) custom field with the audit results, and identifies certificates that are expired or approaching expiration. If any such certificates are detected, the [cPVAL Expired SSL Certificates Detected](/docs/2c4efab3-5417-485a-b9cd-7d67ce474fd9) custom field is set to `True`. + +### Q: Which certificate store is audited? + +> The solution audits only the Windows **Local Machine Personal (My)** certificate store. Certificates stored in other certificate stores are not evaluated. + +### Q: What is the default expiration threshold? + +> By default, certificates expiring within **30 days** are considered to be approaching expiration. This threshold can be changed using the [Custom Field : cPVAL SSL Cert Expiry Threshold](/docs/304ab339-e99e-4b2d-9729-58a715df0a87) or by passing a threshold value as a parameter to the audit script and Alerting script. + +### Q: What information is stored in the certificate audit? + +> The [cPVAL SSL certificate Audit](/docs/350874e6-7bef-4bff-8fce-f2772acab495) custom field contains an inventory of all certificates discovered during the audit, including details such as the subject, issuer, thumbprint, serial number, private key status, certificate creation date, and expiration date. + +### Q: Can certificate auditing be used without enabling alerting? + +> Yes. The auditing component operates independently and always updates the certificate inventory and expiration status. Enabling SSL certificate expiration monitoring is only required if you want tickets for expired or soon-to-expire certificates. + +### Q: How are SSL certificate expiration alerts generated? + +> The [Script : SSL Certificate Expiration Monitoring](/docs/4b6c5595-4336-4e14-a119-c6c7e2c31443) processes the audit results and generates tickets only when SSL certificate expiration monitoring has been enabled and expired or soon-to-expire certificates are detected that have not already been reported. + +### Q: How often should the certificate audit run? + +> It is recommended to schedule the [Task : Audit Local Machine Certificates](/docs/f83dd443-cd43-45ce-8f05-a09e78b9ac0d) to run once per day to maintain an up-to-date certificate inventory and detect newly expired or soon-to-expire certificates. + +### Q: What happens if there are no expired or soon-to-expire certificates? + +> The audit still updates the [cPVAL SSL certificate Audit](/docs/350874e6-7bef-4bff-8fce-f2772acab495) custom field with the current certificate inventory. The [cPVAL Expired SSL Certificates Detected](/docs/2c4efab3-5417-485a-b9cd-7d67ce474fd9) custom field remains `False`, and no SSL certificate expiration alerts are generated. + +### Q: Does the solution modify, renew, or remove certificates? + +> No. This solution is intended for auditing and monitoring only. It does not install, renew, modify, or remove certificates from the endpoint. ## Changelog +### 2026-07-20 + +- Deprecated [cPVAL Enable SSL Cert Audit](/docs/87e79b06-8bb4-4902-8a0c-0a626dfb11ab). Certificate auditing is no longer controlled by this custom field. +- Renamed [SSL Certificate Audit](/docs/3c9e2ed2-f805-4da9-85fb-7fa1d1d146f5) to [Windows - Certificates (My) - Local Machine - Audit](/docs/3c9e2ed2-f805-4da9-85fb-7fa1d1d146f5) to better reflect that the script audits all certificates in the **Local Machine Personal** certificate store rather than only SSL certificates. +- Deprecated [Compound Condition : SSL Audit - Servers](/docs/e38129a0-21bf-45fc-b6da-528312973aa0) and [Compound Condition : SSL Audit - Workstations](/docs/d6082c07-16ba-4b32-8eee-c01384378ac7). Certificate auditing is now performed by [Task : Audit Local Machine Certificates](/docs/f83dd443-cd43-45ce-8f05-a09e78b9ac0d), which runs the audit script on all supported Windows devices. +- Separated the solution into independent **Auditing** and **Alerting** components, allowing certificate auditing to operate independently while providing optional SSL certificate expiration monitoring. +- Certificate auditing no longer depends on any enablement custom field and will always maintain the certificate inventory. + ### 2026-02-16 -- Initial version of the document +- Initial version of the document. diff --git a/static/img/docs/2c4efab3-5417-485a-b9cd-7d67ce474fd9/image1.webp b/static/img/docs/2c4efab3-5417-485a-b9cd-7d67ce474fd9/image1.webp new file mode 100644 index 0000000000000000000000000000000000000000..89f88d983fe824b34fa2e7ce4149d49dcc3de48c GIT binary patch literal 29456 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 Xp{I2Y)&FZ(y@!m%(*GIo|Fr)fE~H4- literal 0 HcmV?d00001 diff --git a/static/img/docs/304ab339-e99e-4b2d-9729-58a715df0a87/image1.webp b/static/img/docs/304ab339-e99e-4b2d-9729-58a715df0a87/image1.webp new file mode 100644 index 0000000000000000000000000000000000000000..181a1c7960325d5e6640a7fca746926aed7447a1 GIT binary patch literal 26884 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 Rhy-F_)&Kwi00000008pbhyMTo literal 0 HcmV?d00001 diff --git a/static/img/docs/3c9e2ed2-f805-4da9-85fb-7fa1d1d146f5/image1.webp b/static/img/docs/3c9e2ed2-f805-4da9-85fb-7fa1d1d146f5/image1.webp index 3bccf52533c54f904bb8237473773a82b28dd74d..f9c38ad20901ccd0b78bdd06872ed3623ca8a517 100644 GIT binary patch literal 11594 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 z%0DQKeJ97n?*2%8w0G-A6=cRJ6m5!drndS2>DKUsXP-Z95+bf zPbAG^b=+ETilXk&oiKP%riJSMU$l9Qa^%jY+gph(U7=*hWbg-~T|RkazcTpty5|%s zC6g86laXJ~*#7HM5Aa1$zZ0+sZN0EP??#Q0UB#~lt0-_6=_!MB^s~!Bd5qBFA08NOvUg@|iZk=#Cv)Cs`#c zNqGNT2xGNvUB=LztqC)_HeJt~wrJ7sVlIK4Q-0(R8g+z>fwYubRwCkpU*Z^5@B+ib zMUeVvO$hrj84J$Zpm#sd9kuB-*CE$o(Py7jZr}QA+H-i;5-ObeGLwFzGM|rVun&$$ zDMf*Rjuw($u$n%ZWo4$l=gykT`oc#FquD;ZxYtJj2uF4**YgE6Mb??AnvAZ`H@_Z6 z*Ubypm^8s%tA^>>$BN|S%g&MUV+dyRy+|C7wjjw_HmFcLwqfLUlT{@Hwm~6~<~bgM z#8=*mD{|N2EGI>p)`K$yuQjXiU#BL)ccO<$=Vc)%H1U8R?WDGwv;8eTJCop!u0xmp zs156deoQ7pI%n}E(o(lO%*V8X@ z%Psw2ZMX(ho@COw6NkPMeT(wFhka{&)y0tu|$*RvJp70I9^7AO# z7_gROA66lNmOVcQ!o!iI=o?BNS$7LE5x2*J*`r7{JY=G#2k*KE0udKWXx5K2^K|Ck zCJnrwU$O4|(Q(~4jMAhOG8Mc+ojr3VxQ{n2^aY#>mYS?)&hWe+f{lh6JE?C9aDLIw8?3n1uV}yja6=pV5>+ zy9&6ur~dMb-)=!{+~sdh#mqCE(mK5a6*bFY<@gtHdByxHfRAxbxV$v4DxAM=ZPp1W@9*l@N=ENMgM{JbXWvc@C3#{k zzMdpqachu^iJoZr&VWvRYd4opt(wA?Q0Y2c=~_ACKs-zL17(` z{h0Z3coRD5;9tAWxp{hyQoW_&gTEK-%gxY0+=a>%V(H;i#GHubX}wh;Lx)y&;aO&Z zyh;%4{;CA4<0-Glc77CXEl#2*R4Q8VndrzQ6u045xrbRfk)lCUwBD7VgJ?OgS zZLn^_t9vvKure?HmYhDGPNX~fFfg{b4%lxqm|K^I8Bb3SGDw!E+lE=3bom8~E8$5* zB6~&cmP@_B|1EP2>v!8f=;=3J?bJbwI-|g$;2u%18sM{TbnBn9SON1d%d78iyd*%; zR_&|zhk_D~vn^SsS8Bt6MaZ^Dxj)7wp`DXl-_$3VW26y^<8_NQNVEtJYEo4$!Cb?Z zFGp@5gICz{q`yXZ{@|(D{w%@UC0+k#5-P39MkI}_1cUqSZ85C`*8`wa_}bxvhzhDQ zt6>@W?pwpVP1s`N%=*T3f3$}K>8GqSn^s7&qrLD8@%A}j?;O=F_won{iDV=?v734j zU7n2l6}$8?xf}xDe#+;L({a)@I*(kW;*SIfHfC6PacdP?Op9D3Ivi@Qr!eOMa_A{j zWs38Y(6QT2g-9o^nMdLPi0|VlkZ^fgdbMr4G?ha3fTM|1x5wr7eXjQ@jaqMH<8OjF-rqkDH1(7*VV71d?()5<+{W6|fEvbt zu~0G2EWo(&ZwyoK!h@E3&y_(`&3*B*BVDK2$Wn+waS(lu%k_XdT#bn$8zDndo84dS zs~G~?DjP!BYvDu0WLhN~M@bM2M3C0)B%Nn~ugk~m>j+o2M@!zb*RTxR0xPG0yvNsz zF<{oENY(Kk3z;ox_3bdLwq2UzqQyTEDPny7Lo=laWu5Ai3b0iAS^wIf3+`Nhg|eK3 z%&<6}1U6=27J`{(bzs)=7NjCSaTv@abPxDiYYWCJliZc>Ujzv>L*eEMkR10L;t$`jA|eT8_n`k}8~yEH~53q0lEK(CG}qFNkybjqzCRaFDk^6DW9|lh)`p@I)ES zb-xt$m@4eQMqx?ykP|%;zqG4YdwiIHOpO01+7$=&R_QDewgeIjN#TTOq0WHXj93VB zMJ_OiM^2Ohe+htyGvyLu%{oeo3h?A2$7@#7?jKq>o2nc90x(sbaL45T5i2VqILHY{ z5wlgGKDwEO?tBmkrEAIDlaFQ7twCY%9R_%Oh-%2tvAY>8TbrPS>F!^mib~Y?fD9Ym z5JOYsSqToLoxt1m*kOPEP14hmYZcYb+%Of^Y~qp)XAAZegW}k^qN-4h#1H}mwdX3c zfZ3)v4d2Ppx3m{ug_B8iakzh1J&uJ)A%m&>J+~ZQ1el&;7k}JZU*8+lDB$WIOn%^z zydX&aOyeBaOueI}hpfl`1S_WUzMin5_TWWEa~l6oWzq`yrRkvOcJH!9Pl$id-238- z@eQjivTC0&^WzHq$-{@7QhY%Zk!z9LSu-N9! zbMx1L102z+c?hR=CXE`0BZ`%%Ihq#v!RlUMa1%bOf#@_LBNvLS#OFZb`v_IUCtBnT~1neWs;gFp_7-Exil`NCYDh!(eOI(EhMtqG@<2rgJqDw!2M<^4VST zp!@n0J)#y;Z*tVf8t^tq@`0}!e1g&ha{yc2$I?2VNN+-}d5y!tW>Hd0s=jw{o|EqC zy0d=czN|-e4<<8JgeC?a>w{=q=jv*ib)|nAKQ^!OK7XfW=mJVdHeo@Ts~;D~EfDZ{ zIN9mJeCc|9v3SD8D7EtCCOd1MO6@6q=nsi^VC?8aFjn~7Lm&9HkgD^;kn*S|jxgxA zm2zGiNhPJmFG-NI!b?4-LZqaxGnlI+(7agsdrUMq)vm3WjSPd*_AGs=!VqF)HYc}~ zGUjnX-kPBagiY456O0-akd|Dmac@kMLNzKmCU|PxE{2-hl_1~M4!@>fkPED4N7$?X zaZf6`ZO4?@GN9Ws^Fh5TOtNl6PbFChd7)WO%4Y%FqebH{^g6HgE#t^9xsnHe%?@?? z2PrbL$!hqOvy%!n(wS>Lu%_*D)N3yY2wv+=Ep>MupUYr^B9>28w zN174+N-adWlKyp{I)xZ8iE%|%|%Cc5>rb(DDkeupa zctcYq)uov8M=gwIELe``YpXH}PImjaC$lKD?#>sW#%#Lc>%8sA2sbyW4=HugMjIfP zSw$IehBmG^f!7gnbPO3!)%3VrHCBrR(un{e7mN4QkSWK6JJ-k_Lw?|4^`FozZj-Oy z4cC@8-XAZ%bK38n#SG$n7LzFR;+uSecj9zBLm0-+%sbFmz2?nqx@eWJ+6Svzm~vw7 zsIo$!dIr6faLnN)^r|(_rtB^4Q9J(R4eqZ-OW%ca?S*|U5l=0Nz`E{#7}SQJK_TS- zlAy05lr70eRB@nKsYR;R4b|Yh)(J7i5!GAk0gmP|1TwkGF{A#0#$?cJ;7C1CH9b)3 z1_@OPZv?w)Yoc(4Z%sM$yO|~v(w@<>#=g0X#6)JfZ+11kV_*=J&h-{uEIj*kFr4FO zawb6B3OQ+x@zIJuuhM_w(_c3YM36+pHDj5kUxi6YM}d37ZsjBUNaiXcm7(`dWWkTb6xxo*g?$r;9buk&Zj*_+jZ=$)v)91a8O}5Eg^VFz~-E3^-jLlD&^xM?Zu&C_?;E=-cX`(XIa36Rn z(TPMd*Q;UJ9Q>UdG}iLNyuY5*Sb?AEK>`Vh$>D}s@>@n*S8MwNLf9KS#28T@eoqKy zkgWKdyL#K2rm4(Z`pA*z3r4@GDSVZ>W@YglRO;BJdNEoh1KsW_;Q4TB~0 zTS;lK5Twqf^4`2dwfwa(z4sg_n<@v$2LIHji-*0fAkfjL*}Dzb1R;*j>vN zDNw@DZDuKWC!IIsrcIE){KOUm$j{%Ji!h><=8jMcB-GFIdqqyMnyk!!IVRI5_TG5t ztuqM{hIcttgFD;cL&rpL)U!69l>7nP`}!3o*2n_Z-on!i>Ay6jd>jc4dsjl`U`|aG z#T$I}lQ3g_cTwjDcoC{+1=i7Dh1lzs6k+X*U{0^M#>&0$njJWYZhDCW0^>!#0G@*G zQ*~3z|6C=CarPRC`et%-s>iO0BLcG;={cCVk>`)PQp3%{^@pGz7UTRZBrEE=6S-Yj+76?Tc& zF#-Kaq+C5s!{Rf?ow|&nal4g$mzY?I@|{RPWkL*wdLRZbQ6vwy6`X!!CQJs*dXfOf z<|v|plMS}?t`54Cx}G#BYhcx67ak~)B{B>Baw}FYzrIuS?(ezXf!WZ()u;}&Y-DB6 zSu{o7Ydlq*CeH z0uK~=XRvL`>2=Siq|9jOGzFpNBW%Lf=Xp_(9%vl};P_@@N`dhxW?FPQjOcoz?3pUn zfQ$g50u~q_mP_95a3u=IuDoKJ8r%F#VPTtg_DjJlTtg!(VCkN;;KH{G5g|fBc?1|+|$QyW5>Hj7~-Ax zen}ZF70)TIKf9}x3-gM^Zpqu$5`(^dBTCefeIo3g5{*Wjw?o!qAI^)6l0QsKZ--UtZjW|14j`U7XC$L z0#z9Lk$JAzt?ag*da!szpPMEjeU>DjP~%G7yj;^F(e`)m*)5TI$KBojND?wrJFHG=PJLMm*+rb}-$x0#$2eROvd9zp3q2+;`?{6M72deUq}lB63keAGgbtuAfYiNAo|i0ONvWTE+$$Lr~H#LAY+Hh+6T;iPAQXR1aeaQ{mZF} zZACJGQ__nALl_`TF2qCjl|2||`83M_5q+r=;92#@i(O~Y$0qV9awbZL7Vj2IuaXu zKgLya``~{MPSFkTu^as|9Nga1bh?Eq5~=j6HWQ%61*l_73ReP|FrrsF=juz{e}1tc zSA)TI;+H%(_1ZWGV>Pp}-=R6!Fe=Zo>XitA65>mTh2LRR)0d0z0_E^@G3QWz&XLv+ zztQ3NVN={`+e(62YboeZU@n=y49Jd*MUIQVH4HK1lWay?^;U&owO^utRH?C)>n|k~ z$nn_-!19fG!TZ=NO!?ylO>IRfECS1I-^M0MQKa@-YjUD-$f_~s4dv*aS3z4h`T z=*(20|J`f)*}F63bbF?Hnmx}f6`W8fbo~nsUry(vx)!ka28Z=9^YZKRQUbeO-0jRc zM8!-LUIGi`G8lez3_U0p=FE{MSZxJ^yDc{sO@{?<%388poRie%*%la z_2=VV>!zKyg55&O#*N9Dhh>9c2*0&;853-)?7t#%wU1x$smj2a)qozX$*Yt)x@&xb zb&+Rbkj+p~+M0=H-Ep>;rze0x81)&-Got|>E(eH_l=IAkdEzK}LNv7GLF(b(rVvP} zOa(qxkFWtZ-e!vP-AWc=^YCJ`g@Ks(a1J4DF(h(u*RX-fN@I z>)=bgne{p?2+^Nh071%MRY00qXcJuGMH>v;<6=S&4)}iuv(@NHRrd&q&8lMQvmZ>p zh%o)2lF$VjxaJHWZEWXoH^^(XKMBEmj-+|ORRMlF<&Q!Ws&S99d>_oFP!;I;iGeb!=Mk z`HPKSy7y07RfuBOutx@cMpdQo7AuUaA?{=1t#NF8w4fguz3K#|66Kw*EEa)Lbk&Sq z*F%LFYT#e4P%-k`XQ&rVClViS~u?_Q~W2i2gi&&}*xFqof|FP+|j`oxW8sq`R4)mL6F@v0c z`3{-d{VLFLKav^IlP-;zpCR{ZD%f;wp4oU(NphdeWdvglIsa4| zM-35HI%f*s11`X0mzouR(V)NHLi#%xJA@qj_r#kQv%fvJZcQjXel5nbG( zViU0&!z*zes9FyFse>JTG~HP!@I2Y|j)+?;U_s#B8#IcfQ9EOBT@Rm8b(nXEe3I%E z=TP&hs_D)JzvaQwtqiRZtqtCPb(mmZaeUbK15yD>`y8}vd8Sxm%Wg8AhG}`s+7mBu zqZ7$`nf=ZcD{q!@&2Suv61EO|x0t8jFDJ4B(*kRwOfL?K=7R8@#7~Rs;EfGZ5~H!a zN^ABy{(=O!FR0qyu4f4`V-N<}-L93pdC}-o$S+9CYK0)LhOsLo)xTSJ=jNNd4}B)P zVDHzgr*3F!WfN$5RB+*)$(aA?_pt$}cMHE8o1;;2kmtpYr<&hi4_AJHhb zmfKCwYm#W6EIRbk-CeGW%kZp%Ac;@JK#IKt3VJtiXKh#Vww#Q(mF(tr#XSf#CWz;EECl5BrsTLV1%TLNO3Zk%KLc11> z0X0n6ws#CZwiDQ%Fl42POhv`Wlh$*H;$p-$x%s;kMNe?20&c$Ep}?aBGZt1gm@?69 zKzKOFc-w=vJ0Rpm03*bS`+XnQV@?gDoeZ=bzI78yX1^{Xl2^xaAmmmG}G>jOK5B=Qd^E3 zv#%9pzYh!y44jr0UPV|o3a`^ck-Mzc8H*skQBpy^jV=zNpP#5xf3h1%Z=+>s2g&&0 z=p;YgZQ}i8@hi0#}i%TE$N1E^A7 zTxa@d8M~kSYJ&s(mto4qKpYH_(3t-`Vj?5I$1!!`HkoI>-ZdP_&XB_zKo>8}lTGMW zOtH*OJ_R9=(Xv@Ft`4!Rre7Wl2@@!?14Tl1IUEOFFE9u$EW$cEGowgUi|%Qe{9O7J z@77Hguot%p>Ve_5q~9dhrt{=X-$|IkPaJ)|rZ69}ObH`LyCzMjk%p!0>iZH8Lz>tZ zb1Sa#uq?&%EYlCmh(loCS=zZ>FsWyxL-ImD^N<14^=yV|RnHvTa(eZ zb-I=l!4hX@-*WS~<2b>z5^atxaHR6YfGfv-5m7y0$e|N3o=4p?Sq=kDyG_c5hS&~h z54mjMHBx2j7o0>p4qM z0$ENqiNE)F%fudfi&XXjZEot@3es96Y(W+#yTLoi zxasln?5ZZ2TgyzxcfmDhWqqX04`9%lZO=0Wdz!4V=00X5%4f0bI0^<4jh~>3@ILY> nubZhDn!Jto99Sgo%nc_eC0r5K4LF%ya6NeJ`7M>c2ll@JlSfOY diff --git a/static/img/docs/4b6c5595-4336-4e14-a119-c6c7e2c31443/image1.webp b/static/img/docs/4b6c5595-4336-4e14-a119-c6c7e2c31443/image1.webp new file mode 100644 index 0000000000000000000000000000000000000000..f3a9490ef49a22c512defd718bee2a320f3867b4 GIT binary patch literal 11508 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 literal 0 HcmV?d00001 diff --git a/static/img/docs/60d87a2b-e5ba-4aef-bbc8-35d60d101889/image1.webp b/static/img/docs/60d87a2b-e5ba-4aef-bbc8-35d60d101889/image1.webp new file mode 100644 index 0000000000000000000000000000000000000000..f90dcd09de0f4857d6bf493e3c5cdfdf90feafed GIT binary patch literal 11208 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 QX{YR`+yjxxrhS0_1y^RhH2?qr literal 0 HcmV?d00001 From c22257e15a4047d0c214572e32552d295bd66bac Mon Sep 17 00:00:00 2001 From: Rj98-sh Date: Wed, 22 Jul 2026 14:51:06 -0400 Subject: [PATCH 2/2] QA - Update --- .../ssl-certificate-expiration-monitoring.md | 4 ++-- ...indows-certificates-local-machine-audit.md | 7 +++--- .../monitor-ssl-cert-expiration-servers.md | 6 ++--- ...onitor-ssl-cert-expiration-workstations.md | 6 ++--- .../cpval-enable-ssl-cert-expiration-alert.md | 13 ++++++----- ...cpval-expired-ssl-certificates-detected.md | 12 +++++----- .../cpval-ssl-cert-expiry-threshold.md | 10 ++++----- .../cpval-ssl-certificate-audit.md | 2 +- .../ssl-cert-expiration-alerts.md | 4 ++-- .../tasks/audit-local-machine-certificates.md | 5 +++-- docs/solutions/ssl-certificate-audit-ninja.md | 22 +++++++++---------- 11 files changed, 47 insertions(+), 44 deletions(-) diff --git a/docs/ninjaone/automations/ssl-certificate-expiration-monitoring.md b/docs/ninjaone/automations/ssl-certificate-expiration-monitoring.md index 2977d1401e..33af71275c 100644 --- a/docs/ninjaone/automations/ssl-certificate-expiration-monitoring.md +++ b/docs/ninjaone/automations/ssl-certificate-expiration-monitoring.md @@ -9,7 +9,7 @@ tags: ['windows'] draft: false unlisted: false last_update: - date: 2026-07-20 + date: 2026-07-22 --- ## Overview @@ -43,6 +43,6 @@ Monitors the local machine certificate store for SSL certificates that are expir ## Changelog -### 2026-07-20 +### 2026-07-22 - Initial version of the document \ No newline at end of file diff --git a/docs/ninjaone/automations/windows-certificates-local-machine-audit.md b/docs/ninjaone/automations/windows-certificates-local-machine-audit.md index 8d90e3809d..89645ffd8f 100644 --- a/docs/ninjaone/automations/windows-certificates-local-machine-audit.md +++ b/docs/ninjaone/automations/windows-certificates-local-machine-audit.md @@ -9,10 +9,11 @@ tags: ['windows'] draft: false unlisted: false last_update: - date: 2026-07-20 + date: 2026-07-22 --- ## Overview + This Script audits all certificates in the local machine's personal certificate store and flags expired or soon-to-expire certificates. It then updates the custom field [cPVAL SSL certificate Audit](/docs/350874e6-7bef-4bff-8fce-f2772acab495) with the SSL certificate details and also sets the custom field [cPVAL Expired SSL Certificates Detected](/docs/2c4efab3-5417-485a-b9cd-7d67ce474fd9) to True if any expired or soon-to-expire certificates are found during the audit. ## Sample Run @@ -33,7 +34,7 @@ This Script audits all certificates in the local machine's personal certificate | ---- | ------- | --------------- | -------- | ------- | ---- | ----------- | | SSL Cert Expiry Threshold | 15 | Numeric Values | False | - | Text | Set the number of days before SSL certificate expiration to detect and report certificates requiring attention. | -**Note** : `SSL Cert Expiry Threshold should be similar to [Script : SSL Certificate Expiration Monitoring](/docs/4b6c5595-4336-4e14-a119-c6c7e2c31443) to alert for the certificates that are expired or soon to expire.` +**Note** : SSL Cert Expiry Threshold should be similar to [Script : SSL Certificate Expiration Monitoring](/docs/4b6c5595-4336-4e14-a119-c6c7e2c31443) to alert for the certificates that are expired or soon to expire. ## Automation Setup/Import @@ -46,7 +47,7 @@ This Script audits all certificates in the local machine's personal certificate ## Changelog -### 2026-07-20 +### 2026-07-22 - Renamed the script from `SSL Certificate Audit` to `Windows - Certificates (My) - Local Machine - Audit` since this script pulls all certificates and not just SSL certificates on the machine. diff --git a/docs/ninjaone/compound-conditions/monitor-ssl-cert-expiration-servers.md b/docs/ninjaone/compound-conditions/monitor-ssl-cert-expiration-servers.md index cfc66e2ede..7500dac770 100644 --- a/docs/ninjaone/compound-conditions/monitor-ssl-cert-expiration-servers.md +++ b/docs/ninjaone/compound-conditions/monitor-ssl-cert-expiration-servers.md @@ -9,7 +9,7 @@ tags: ['windows'] draft: false unlisted: false last_update: - date: 2026-07-20 + date: 2026-07-22 --- ## Summary @@ -18,7 +18,7 @@ Triggers the [Script : SSL Certificate Expiration Monitoring](/docs/4b6c5595-433 ## Details - **Name:** `Monitor SSL Cert Expiration - Servers` -- **Description:** `Triggers the [Script : SSL Certificate Expiration Monitoring](/docs/4b6c5595-4336-4e14-a119-c6c7e2c31443) automation on Windows Servers where alerting is enabled and [Custom Field : cPVAL Expired SSL Certificates Detected](/docs/2c4efab3-5417-485a-b9cd-7d67ce474fd9) is Set to 'True' by [Script : Windows - Certificates (My) - Local Machine - Audit](/docs/3c9e2ed2-f805-4da9-85fb-7fa1d1d146f5). It creates tickets if [Script : SSL Certificate Expiration Monitoring](/docs/4b6c5595-4336-4e14-a119-c6c7e2c31443) detects any expired or soon-to-expire certificate that haven't already been alerted on.` +- **Description:** Triggers the [Script : SSL Certificate Expiration Monitoring](/docs/4b6c5595-4336-4e14-a119-c6c7e2c31443) automation on Windows Servers where alerting is enabled and [Custom Field : cPVAL Expired SSL Certificates Detected](/docs/2c4efab3-5417-485a-b9cd-7d67ce474fd9) is Set to 'True' by [Script : Windows - Certificates (My) - Local Machine - Audit](/docs/3c9e2ed2-f805-4da9-85fb-7fa1d1d146f5). It creates tickets if [Script : SSL Certificate Expiration Monitoring](/docs/4b6c5595-4336-4e14-a119-c6c7e2c31443) detects any expired or soon-to-expire certificate that haven't already been alerted on. - **Recommended Agent Policies:** `Windows Servers` ## Dependencies @@ -32,6 +32,6 @@ Triggers the [Script : SSL Certificate Expiration Monitoring](/docs/4b6c5595-433 ## Changelog -### 2026-07-20 +### 2026-07-22 - Initial version of the document diff --git a/docs/ninjaone/compound-conditions/monitor-ssl-cert-expiration-workstations.md b/docs/ninjaone/compound-conditions/monitor-ssl-cert-expiration-workstations.md index 7d58592347..725f27850c 100644 --- a/docs/ninjaone/compound-conditions/monitor-ssl-cert-expiration-workstations.md +++ b/docs/ninjaone/compound-conditions/monitor-ssl-cert-expiration-workstations.md @@ -9,7 +9,7 @@ tags: ['windows'] draft: false unlisted: false last_update: - date: 2026-07-20 + date: 2026-07-22 --- ## Summary @@ -18,7 +18,7 @@ Triggers the [Script : SSL Certificate Expiration Monitoring](/docs/4b6c5595-433 ## Details - **Name:** `Monitor SSL Cert Expiration - Workstations` -- **Description:** `Triggers the [Script : SSL Certificate Expiration Monitoring](/docs/4b6c5595-4336-4e14-a119-c6c7e2c31443) automation on Windows workstations where alerting is enabled and [Custom Field : cPVAL Expired SSL Certificates Detected](/docs/2c4efab3-5417-485a-b9cd-7d67ce474fd9) is Set to 'True' by [Script : Windows - Certificates (My) - Local Machine - Audit](/docs/3c9e2ed2-f805-4da9-85fb-7fa1d1d146f5). It creates tickets if [Script : SSL Certificate Expiration Monitoring](/docs/4b6c5595-4336-4e14-a119-c6c7e2c31443) detects any expired or soon-to-expire certificate that haven't already been alerted on.` +- **Description:** Triggers the [Script : SSL Certificate Expiration Monitoring](/docs/4b6c5595-4336-4e14-a119-c6c7e2c31443) automation on Windows workstations where alerting is enabled and [Custom Field : cPVAL Expired SSL Certificates Detected](/docs/2c4efab3-5417-485a-b9cd-7d67ce474fd9) is Set to 'True' by [Script : Windows - Certificates (My) - Local Machine - Audit](/docs/3c9e2ed2-f805-4da9-85fb-7fa1d1d146f5). It creates tickets if [Script : SSL Certificate Expiration Monitoring](/docs/4b6c5595-4336-4e14-a119-c6c7e2c31443) detects any expired or soon-to-expire certificate that haven't already been alerted on. - **Recommended Agent Policies:** `Windows Workstations` ## Dependencies @@ -32,6 +32,6 @@ Triggers the [Script : SSL Certificate Expiration Monitoring](/docs/4b6c5595-433 ## Changelog -### 2026-07-20 +### 2026-07-22 - Initial version of the document diff --git a/docs/ninjaone/custom-fields/cpval-enable-ssl-cert-expiration-alert.md b/docs/ninjaone/custom-fields/cpval-enable-ssl-cert-expiration-alert.md index c6c409ed02..eed81b9982 100644 --- a/docs/ninjaone/custom-fields/cpval-enable-ssl-cert-expiration-alert.md +++ b/docs/ninjaone/custom-fields/cpval-enable-ssl-cert-expiration-alert.md @@ -9,17 +9,18 @@ tags: ['windows'] draft: false unlisted: false last_update: - date: 2026-07-20 + date: 2026-07-22 --- ## Summary -Custom Field to select the operating systems on which SSL Certificate Expiration Alerts should be enabled. It will detect expired certificates and certificates approaching expiration based on configured threshold and generate alerts for selected operating system. + +Select the operating systems for which SSL Certificate Expiration Alerts should be enabled. It will detect expired and approaching expiration certificates based on configured threshold and generate alerts for the selected operating system. ## Details -| Label | Field Name | Definition Scope | Type | Required | Option Value | Default Value | Technician Permission | Automation Permission | API Permission | Description | Tool Tip | Footer Text | Custom Field Tab Name | -| ----- | ---- | ---------------- | ---- | -------- | ------------ | ------------- | --------------------- | --------------------- | -------------- | ----------- | -------- | ----------- | ----------- | -| cPVAL Enable SSL Cert Expiration Alerts | cpvalEnableSslCertExpirationAlerts | Organization, Location, Device | DropDown | False | Disable, Windows, Windows Workstations, Windows Servers | | Editable | Read/Write | Read/Write | Select the operating systems on which SSL Certificate Expiration Alerts should be enabled. It will detect expired certificates and certificates approaching expiration based on configured threshold and generate alerts for selected operating system.| Select the operating systems on which SSL Certificate Expiration Alerts should be enabled. It will detect expired certificates and certificates approaching expiration based on configured threshold and generate alerts for selected operating system. | Select the operating systems on which SSL Certificate Expiration Alerts should be enabled. | SSL Certificate | +| Label | Field Name | Definition Scope | Type | Required | Option Value | Default Value | Technician Permission | Automation Permission | API Permission | Custom Field Tab Name | +| ----- | ---- | ---------------- | ---- | -------- | ------------ | ------------- | --------------------- | --------------------- | -------------- | ----------- | +| cPVAL Enable SSL Cert Expiration Alerts | cpvalEnableSslCertExpirationAlerts | Organization, Location, Device | DropDown | False | Disable, Windows, Windows Workstations, Windows Servers | | Editable | Read/Write | Read/Write | SSL Certificate | ## Dependencies @@ -35,6 +36,6 @@ Custom Field to select the operating systems on which SSL Certificate Expiration ## Changelog -### 2026-07-20 +### 2026-07-22 - Initial version of the document diff --git a/docs/ninjaone/custom-fields/cpval-expired-ssl-certificates-detected.md b/docs/ninjaone/custom-fields/cpval-expired-ssl-certificates-detected.md index c4268938e1..f54f0c2594 100644 --- a/docs/ninjaone/custom-fields/cpval-expired-ssl-certificates-detected.md +++ b/docs/ninjaone/custom-fields/cpval-expired-ssl-certificates-detected.md @@ -9,17 +9,17 @@ tags: ['windows'] draft: false unlisted: false last_update: - date: 2026-07-20 + date: 2026-07-22 --- ## Summary -This custom field is updated by the [Script : Windows - Certificates (My) - Local Machine - Audit](/docs/3c9e2ed2-f805-4da9-85fb-7fa1d1d146f5) to `True` when an expired certificate or a certificate approaching expiration date is detected on the device. +This custom field is updated by the [Script : Windows - Certificates (My) - Local Machine - Audit](/docs/3c9e2ed2-f805-4da9-85fb-7fa1d1d146f5) and set to `True` when an expired certificate or a certificate approaching expiration date is detected on the device. ## Details -| Label | Field Name | Definition Scope | Type | Required | Default Value | Technician Permission | Automation Permission | API Permission | Description | Tool Tip | Footer Text | Custom Field Tab Name | -| ----- | ---- | ---------------- | ---- | -------- | ------------- | --------------------- | --------------------- | -------------- | ----------- | -------- | ----------- | ----------- | -|cPVAL Expired SSL Certificates Detected|cpvalExpiredSslCertificatesDetected| `Device` | Text | False | | Editable | Read_Write | Read_Write | This custom field is updated by the `Windows - Certificates (My) - Local Machine - Audit` script to `True` when an expired certificate or a certificate approaching expiration date is detected on the device. | This custom field is updated by the `Windows - Certificates (My) - Local Machine - Audit` script to `True` when an expired certificate or a certificate approaching expiration date is detected on the device. | This custom field is updated by the `Windows - Certificates (My) - Local Machine - Audit` script to `True` when an expired certificate or a certificate approaching expiration date is detected on the device. | SSL Certificate | +| Label | Field Name | Definition Scope | Type | Required | Default Value | Technician Permission | Automation Permission | API Permission | Custom Field Tab Name | +| ----- | ---- | ---------------- | ---- | -------- | ------------- | --------------------- | --------------------- | -------------- | ----------- | +|cPVAL Expired SSL Certificates Detected|cpvalExpiredSslCertificatesDetected| `Device` | Text | False | | Editable | Read_Write | Read_Write | SSL Certificate | ## Dependencies @@ -35,7 +35,7 @@ This custom field is updated by the [Script : Windows - Certificates (My) - Loca ## Changelog -### 2026-07-20 +### 2026-07-22 - Initial version of the document diff --git a/docs/ninjaone/custom-fields/cpval-ssl-cert-expiry-threshold.md b/docs/ninjaone/custom-fields/cpval-ssl-cert-expiry-threshold.md index 256e2637ab..4e0d4b4409 100644 --- a/docs/ninjaone/custom-fields/cpval-ssl-cert-expiry-threshold.md +++ b/docs/ninjaone/custom-fields/cpval-ssl-cert-expiry-threshold.md @@ -9,7 +9,7 @@ tags: ['windows'] draft: false unlisted: false last_update: - date: 2026-07-20 + date: 2026-07-22 --- ## Summary @@ -17,9 +17,9 @@ Custom Field to define the number of days prior to SSL certificate expiration wh ## Details -| Label | Field Name | Definition Scope | Type | Required | Default Value | Technician Permission | Automation Permission | API Permission | Description | Tool Tip | Footer Text | Custom Field Tab Name | -| ----- | ---- | ---------------- | ---- | -------- | ------------- | --------------------- | --------------------- | -------------- | ----------- | -------- | ----------- | ----------- | -|cPVAL SSL Cert Expiry Threshold| cpvalSslCertExpiryThreshold | `Organization`, `Location`, `Device` | Text | False | | Editable | Read_Write | Read_Write | Define the number of days prior to SSL certificate expiration when an alert should be generated. Certificates that are already expired or are within the configured expiration threshold will be detected and reported. Default Value is 30 Days. | Define the number of days prior to SSL certificate expiration when an alert should be generated. Certificates that are already expired or are within the configured expiration threshold will be detected and reported. Default Value is 30 Days. | Define the number of days prior to SSL certificate expiration when an alert should be generated. Default Value is 30 Days. | SSl Certificate | +| Label | Field Name | Definition Scope | Type | Required | Default Value | Technician Permission | Automation Permission | API Permission | Custom Field Tab Name | +| ----- | ---- | ---------------- | ---- | -------- | ------------- | --------------------- | --------------------- | -------------- | ----------- | +|cPVAL SSL Cert Expiry Threshold| cpvalSslCertExpiryThreshold | `Organization`, `Location`, `Device` | Text | False | | Editable | Read_Write | Read_Write | SSL Certificate | ## Dependencies @@ -35,6 +35,6 @@ Custom Field to define the number of days prior to SSL certificate expiration wh ## Changelog -### 2026-07-20 +### 2026-07-22 - Initial version of the document diff --git a/docs/ninjaone/custom-fields/cpval-ssl-certificate-audit.md b/docs/ninjaone/custom-fields/cpval-ssl-certificate-audit.md index 1374576104..62f6d6a941 100644 --- a/docs/ninjaone/custom-fields/cpval-ssl-certificate-audit.md +++ b/docs/ninjaone/custom-fields/cpval-ssl-certificate-audit.md @@ -13,7 +13,7 @@ last_update: --- ## Summary -List of all SSL certificates in the personal certificate repository. This Data is populated by [SSL Certificate Audit](/docs/3c9e2ed2-f805-4da9-85fb-7fa1d1d146f5)` automation. +List of all SSL certificates in the personal certificate repository. This Data is populated by [Windows - Certificates (My) - Local Machine - Audit](/docs/3c9e2ed2-f805-4da9-85fb-7fa1d1d146f5) automation. ## Details diff --git a/docs/ninjaone/cw-manage-ticket-templates/ssl-cert-expiration-alerts.md b/docs/ninjaone/cw-manage-ticket-templates/ssl-cert-expiration-alerts.md index fe6dd17816..97931e8656 100644 --- a/docs/ninjaone/cw-manage-ticket-templates/ssl-cert-expiration-alerts.md +++ b/docs/ninjaone/cw-manage-ticket-templates/ssl-cert-expiration-alerts.md @@ -9,7 +9,7 @@ tags: ['windows'] draft: false unlisted: false last_update: - date: 2026-07-20 + date: 2026-07-22 --- ## Overview @@ -31,6 +31,6 @@ Ensure that the ConnectWise Manage app is enabled and connected. ## Changelog -### 2026-07-20 +### 2026-07-22 - Initial version of the document \ No newline at end of file diff --git a/docs/ninjaone/tasks/audit-local-machine-certificates.md b/docs/ninjaone/tasks/audit-local-machine-certificates.md index 72a787632e..f031cd7ece 100644 --- a/docs/ninjaone/tasks/audit-local-machine-certificates.md +++ b/docs/ninjaone/tasks/audit-local-machine-certificates.md @@ -9,10 +9,11 @@ tags: ['windows'] draft: false unlisted: false last_update: - date: 2026-07-20 + date: 2026-07-22 --- ## Summary + This task executes [Script : Windows - Certificates (My) - Local Machine - Audit](/docs/3c9e2ed2-f805-4da9-85fb-7fa1d1d146f5) once per day on windows machines. ## Dependencies @@ -35,6 +36,6 @@ This task executes [Script : Windows - Certificates (My) - Local Machine - Audit ## Changelog -### 2026-07-20 +### 2026-07-22 - Initial version of the document \ No newline at end of file diff --git a/docs/solutions/ssl-certificate-audit-ninja.md b/docs/solutions/ssl-certificate-audit-ninja.md index 25759e385a..bef821cd07 100644 --- a/docs/solutions/ssl-certificate-audit-ninja.md +++ b/docs/solutions/ssl-certificate-audit-ninja.md @@ -9,7 +9,7 @@ tags: ['windows'] draft: false unlisted: false last_update: - date: 2026-02-16 + date: 2026-07-22 --- @@ -53,9 +53,9 @@ The solution also provides an optional alerting feature that uses the audit resu | Content | Type | Function | |---------------------------|-----------------------------------|------------------------------------------| -| [cPVAL SSL certificate Audit](/docs/350874e6-7bef-4bff-8fce-f2772acab495) | Custom Field | Stores the inventory of all certificates discovered in the Local Machine Personal certificate store. This field is populated by [Windows - Certificates (My) - Local Machine - Audit](/docs/3c9e2ed2-f805-4da9-85fb-7fa1d1d146f5) | -| [cPVAL Expired SSL Certificates Detected](/docs/2c4efab3-5417-485a-b9cd-7d67ce474fd9) | Custom Field | Set to `True` by[Windows - Certificates (My) - Local Machine - Audit](/docs/3c9e2ed2-f805-4da9-85fb-7fa1d1d146f5) when one or more certificates are expired or approaching expiration based on the configured threshold. This custom field is also used by the alerting solution. | -| [Custom Field : cPVAL SSL Cert Expiry Threshold](/docs/304ab339-e99e-4b2d-9729-58a715df0a87) | Custom Field | Defines the number of days before certificate expiration when a certificate should be considered as approaching expiration. Certificates that have already expired or fall within the configured threshold are flagged during the audit. The default value is 30 days. This custom field is also used by the alerting solution.| +| [cPVAL SSL Certificate Audit](/docs/350874e6-7bef-4bff-8fce-f2772acab495) | Custom Field | Stores the inventory of all certificates discovered in the Local Machine Personal certificate store. This field is populated by [Windows - Certificates (My) - Local Machine - Audit](/docs/3c9e2ed2-f805-4da9-85fb-7fa1d1d146f5) | +| [cPVAL Expired SSL Certificates Detected](/docs/2c4efab3-5417-485a-b9cd-7d67ce474fd9) | Custom Field | Set to `True` by [Windows - Certificates (My) - Local Machine - Audit](/docs/3c9e2ed2-f805-4da9-85fb-7fa1d1d146f5) when one or more certificates are expired or approaching expiration based on the configured threshold. This custom field is also used by the alerting solution. | +| [cPVAL SSL Cert Expiry Threshold](/docs/304ab339-e99e-4b2d-9729-58a715df0a87) | Custom Field | Defines the number of days before certificate expiration when a certificate should be considered as approaching expiration. Certificates that have already expired or fall within the configured threshold are flagged during the audit. The default value is 30 days. This custom field is also used by the alerting solution.| | [Windows - Certificates (My) - Local Machine - Audit](/docs/3c9e2ed2-f805-4da9-85fb-7fa1d1d146f5) | Automation | Audits all certificates in the Local Machine Personal certificate store, updates the [Custom Field : cPVAL SSL certificate Audit](/docs/350874e6-7bef-4bff-8fce-f2772acab495) with the audit results, identifies certificates that are expired or approaching expiration based on the configured threshold, and sets the [Custom Field : cPVAL Expired SSL Certificates Detected](/docs/2c4efab3-5417-485a-b9cd-7d67ce474fd9) to `True` if any such certificates are detected. | | [Audit Local Machine Certificates](/docs/f83dd443-cd43-45ce-8f05-a09e78b9ac0d)| Task | Executes [Script : Windows - Certificates (My) - Local Machine - Audit](/docs/3c9e2ed2-f805-4da9-85fb-7fa1d1d146f5) once per day against [Group : cPVAL Windows Servers](/docs/c73e004e-6a9c-40e4-8e74-babb4b729256) and [Group : cPVAL Windows Workstations](/docs/6c0a75ba-68b7-47a5-acb8-17ef303f9422) to maintain an up-to-date certificate inventory and detect expired or soon-to-expire certificates. | @@ -67,8 +67,8 @@ The solution also provides an optional alerting feature that uses the audit resu | [cPVAL Enable SSL Cert Expiration Alerts](/docs/60d87a2b-e5ba-4aef-bbc8-35d60d101889) | Custom Field | Enables or disables SSL certificate expiration monitoring for the selected operating systems. When enabled, alerts are generated for expired or soon-to-expire certificates based on the configured expiration threshold. | | [SSL Cert Expiration Alerts](/docs/1333942f-f022-4795-956b-ae86f815a636) | Ticket Template |Defines how ConnectWise Manage tickets are created when [Compound Condition : Monitor SSL Cert Expiration - Workstations](/docs/8c096a91-90f6-4c25-a5dc-745598b19e11) or [Compound Condition : Monitor SSL Cert Expiration - Servers](/docs/79d5020a-7487-42ad-9dc3-1cfd7d675be5) detects expired or soon-to-expire certificates. | | [SSL Certificate Expiration Monitoring](/docs/4b6c5595-4336-4e14-a119-c6c7e2c31443) | Automation | Processes the audit results and generates alerts for expired or soon-to-expire certificates that have not already been reported. The default certificate expiration threshold is 30 days. | -| [Monitor SSL Cert Expiration - Workstations](/docs/8c096a91-90f6-4c25-a5dc-745598b19e11) | Compound Condition | Executes [Script : SSL Certificate Expiration Monitoring](/docs/4b6c5595-4336-4e14-a119-c6c7e2c31443) on Windows workstations where [Custom Field : cPVAL Enable SSL Cert Expiration Alerts](/docs/60d87a2b-e5ba-4aef-bbc8-35d60d101889)is enabled and [Custom Field : cPVAL Expired SSL Certificates Detected](/docs/2c4efab3-5417-485a-b9cd-7d67ce474fd9) is set to True. Tickets are generated only for expired or soon-to-expire certificates that have not already been alerted on. | -| [Monitor SSL Cert Expiration - Servers](/docs/79d5020a-7487-42ad-9dc3-1cfd7d675be5) | Compound Condition | Executes [Script : SSL Certificate Expiration Monitoring](/docs/4b6c5595-4336-4e14-a119-c6c7e2c31443) on Windows Servers where [Custom Field : cPVAL Enable SSL Cert Expiration Alerts](/docs/60d87a2b-e5ba-4aef-bbc8-35d60d101889)is enabled and [Custom Field : cPVAL Expired SSL Certificates Detected](/docs/2c4efab3-5417-485a-b9cd-7d67ce474fd9) is set to True. Tickets are generated only for expired or soon-to-expire certificates that have not already been alerted on. | +| [Monitor SSL Cert Expiration - Workstations](/docs/8c096a91-90f6-4c25-a5dc-745598b19e11) | Compound Condition | Executes [Script : SSL Certificate Expiration Monitoring](/docs/4b6c5595-4336-4e14-a119-c6c7e2c31443) on Windows workstations where [Custom Field : cPVAL Enable SSL Cert Expiration Alerts](/docs/60d87a2b-e5ba-4aef-bbc8-35d60d101889) is enabled and [Custom Field : cPVAL Expired SSL Certificates Detected](/docs/2c4efab3-5417-485a-b9cd-7d67ce474fd9) is set to True. Tickets are generated only for expired or soon-to-expire certificates that have not already been alerted on. | +| [Monitor SSL Cert Expiration - Servers](/docs/79d5020a-7487-42ad-9dc3-1cfd7d675be5) | Compound Condition | Executes [Script : SSL Certificate Expiration Monitoring](/docs/4b6c5595-4336-4e14-a119-c6c7e2c31443) on Windows Servers where [Custom Field : cPVAL Enable SSL Cert Expiration Alerts](/docs/60d87a2b-e5ba-4aef-bbc8-35d60d101889) is enabled and [Custom Field : cPVAL Expired SSL Certificates Detected](/docs/2c4efab3-5417-485a-b9cd-7d67ce474fd9) is set to True. Tickets are generated only for expired or soon-to-expire certificates that have not already been alerted on. | ## Implementation @@ -158,13 +158,13 @@ Configure the [Custom Field : cPVAL Enable SSL Cert Expiration Alerts](/docs/60d ## Changelog -### 2026-07-20 +### 2026-07-22 -- Deprecated [cPVAL Enable SSL Cert Audit](/docs/87e79b06-8bb4-4902-8a0c-0a626dfb11ab). Certificate auditing is no longer controlled by this custom field. -- Renamed [SSL Certificate Audit](/docs/3c9e2ed2-f805-4da9-85fb-7fa1d1d146f5) to [Windows - Certificates (My) - Local Machine - Audit](/docs/3c9e2ed2-f805-4da9-85fb-7fa1d1d146f5) to better reflect that the script audits all certificates in the **Local Machine Personal** certificate store rather than only SSL certificates. -- Deprecated [Compound Condition : SSL Audit - Servers](/docs/e38129a0-21bf-45fc-b6da-528312973aa0) and [Compound Condition : SSL Audit - Workstations](/docs/d6082c07-16ba-4b32-8eee-c01384378ac7). Certificate auditing is now performed by [Task : Audit Local Machine Certificates](/docs/f83dd443-cd43-45ce-8f05-a09e78b9ac0d), which runs the audit script on all supported Windows devices. +- Deprecated custom field `cPVAL Enable SSL Cert Audit`. Certificate auditing is no longer controlled by this custom field. +- Renamed script to [Windows - Certificates (My) - Local Machine - Audit](/docs/3c9e2ed2-f805-4da9-85fb-7fa1d1d146f5) to better reflect that the script audits all certificates in the **Local Machine Personal** certificate store rather than only SSL certificates. +- Deprecated `Compound Condition : SSL Audit - Servers` and `Compound Condition : SSL Audit - Workstations`. Certificate auditing is now performed by [Task : Audit Local Machine Certificates](/docs/f83dd443-cd43-45ce-8f05-a09e78b9ac0d), which runs the audit script on all supported Windows devices. - Separated the solution into independent **Auditing** and **Alerting** components, allowing certificate auditing to operate independently while providing optional SSL certificate expiration monitoring. -- Certificate auditing no longer depends on any enablement custom field and will always maintain the certificate inventory. + ### 2026-02-16