FortiClient EMS capabilities
FortiClient EMS supports many capabilities that are integrated with the FortiGate though the EMS connector. New versions of FortiClient EMS may support new capabilities. The FortiGate is able to detect and synchronize the capabilities from each EMS server as it establishes the EMS connection.
Using EMS silent approval in the Security Fabric
FortiClient EMS with Fabric authorization and silent approval capabilities can approve the root FortiGate in a Security Fabric once, and then silently approve remaining downstream FortiGates in the Fabric. Similarly in an HA scenario, an approval only needs to be made once to the HA primary unit. The remaining cluster members are approved silently.
To use EMS silent approval:
- Configure the EMS entry on the root FortiGate or HA primary:
config endpoint-control fctems edit "ems139" set fortinetone-cloud-authentication disable set server "172.16.200.139" set https-port 443 set source-ip 0.0.0.0 set pull-sysinfo enable set pull-vulnerabilities enable set pull-avatars enable set pull-tags enable set pull-malware-hash enable unset capabilities set call-timeout 30 set websocket-override disable next end
When the entry is created, the capabilities are unset by default.
- Authenticate the FortiGate with EMS:
# execute fctems verify ems_139 ...
The FortiGate will enable the Fabric authorization and silent approval based on the EMS supported capabilities.
config endpoint-control fctems edit "ems139" set server "172.18.62.12" set capabilities fabric-auth silent-approval websocket next end
- Configure a downstream device in the Security Fabric (see Configuring the root FortiGate and downstream FortiGates for more details). The downstream device will be silently approved.
- Configure a secondary device in an HA system (see HA active-passive cluster setup and HA active-active cluster setup for more details). The secondary device will be silently approved.
Allowing deep inspection certificates to be synchronized to EMS and distributed to FortiClient
On FortiClient EMS versions that support push CA certs
capability, the FortiGate will push CA certificates used in SSL deep inspection (see Deep inspection for more details) to the EMS server. On the EMS server, the CA certificates can be selected in the managed endpoint profiles so they can be installed on managed endpoints. FortiClient EMS 7.0.1 and later is required to use this feature.
To configure deep inspection certificate synchronization to EMS:
-
Configure the EMS Fabric connector:
config endpoint-control fctems edit "ems138" set fortinetone-cloud-authentication disable set server "172.16.200.138" set https-port 443 set source-ip 0.0.0.0 set pull-sysinfo enable set pull-vulnerabilities enable set pull-avatars enable set pull-tags enable set pull-malware-hash enable set capabilities fabric-auth silent-approval websocket websocket-malware push-ca-certs set call-timeout 30 set websocket-override disable set preserve-ssl-session disable next end
-
Apply the certificate to an SSL/SSH profile for deep inspection:
config firewall ssl-ssh-profile edit "deep-inspection" set comment "Read-only deep inspection profile." config https set ports 443 set status deep-inspection end ... set server-cert-mode re-sign set caname "Fortinet_CA_SSL" set untrusted-caname "Fortinet_CA_Untrusted" next end
The default deep inspection profile, CA certificate, and untrusted CA certificates are used in this example.
-
Configure the firewall policy:
config firewall policy edit 1 set name "deep-inspection" set srcintf "port14" set dstintf "port13" set action accept set srcaddr "all" set dstaddr "all" set schedule "always" set service "ALL" set utm-status enable set inspection-mode proxy set ssl-ssh-profile "deep-inspection" set av-profile "default" set nat enable next end
-
In EMS, verify that the CA certificate was pushed to EMS:
-
Go to Endpoint Policy & Components > CA Certificates.
-
Verify the certificate table to see that the EMS server received the CA certification from the different FortiGates.
-
-
Select the CA certificate in the endpoint profile:
-
Go to Endpoint Profiles > System Settings and edit a profile. The default profile is used in this example.
-
In the Other section, enable Install CA Certificate on Client and select the Fortinet_CA_SSL certificate for the desired endpoint.
-
Click Save.
After the FortiClient endpoint is registered, it receives the CA certificate. When the FortiClient endpoint tries to access the internet through the FortiGate with the firewall policy that has deep inspection, no warning message is displayed. The server certificate is trusted with the installed CA certificate to complete the certificate chain.
-
Verification
Before configuring deep inspection certificate synchronization, a warning message is displayed when a FortiClient endpoint accesses the internet through the FortiGate with the firewall policy that has deep inspection. The FortiClient certificate store does not have the FortiGate's CA that is used in the deep inspection SSL/SSH profile.
For example, accessing https://www.facebook.com in Chrome shows a warning. In the address bar, clicking Not secure > Certificate opens the Certificate dialog, which indicates that Windows does not have enough information to verify the certificate.
After the EMS profile is pushed to FortiClient endpoint, the expected FortiGate's certificate is shown in its certificate store.
To verify the deep inspection certificate synchronization:
- In Chrome, go to Settings > Privacy and security and open Manage certificates.
- Click the Trusted Root Certification Authorities tab. The FortiGate's certificate appears in the list.
- On the FortiClient endpoint using Chrome, go to https://www.facebook.com. The website is displayed.
- In the address bar, click the padlock, then click Certificate. The dialog displays the valid certificate information.
Diagnostics
Use the diagnose endpoint fctems json deep-inspect-cert-sync
command in FortiOS to verify the certificate information. In the following example, there are multiple VDOMs with FortiGates in HA mode.
To verify the primary FortiGate:
FGT_EC_Primary (global) # diagnose endpoint fctems json deep-inspect-cert-sync JSON: """ { "fortigates":[ "FG2K5E39169*****", "FG2K5E39169*****" ], "vdoms":[ { "vdom":"root", "certs":[ { "name":"Fortinet_CA_SSL", "cert":"-----BEGIN CERTIFICATE-----\\nMIID5jCCAs6g...Sfu+Q8zE8Crmt6L1X\/bv+q\\n-----END CERTIFICATE-----\\n" }, { "name":"Fortinet_CA_Untrusted", "cert":"-----BEGIN CERTIFICATE-----\\nMIID8DCCAtig...3zBbfzP+nVUpC\\nZDPRZA==\\n-----END CERTIFICATE-----" } ] }, { "vdom":"vdom1", "certs":[ { "name":"Fortinet_CA_SSL", "cert":"-----BEGIN CERTIFICATE-----\\nMIID5jCCAs6g...Sfu+Q8zE8Crmt6L1X\/bv+q\\n-----END CERTIFICATE-----\\n" }, { "name":"Fortinet_CA_Untrusted", "cert":"-----BEGIN CERTIFICATE-----\\nMIID8DCCAtig...3zBbfzP+nVUpC\\nZDPRZA==\\n-----END CERTIFICATE-----" } ] } ] } """
To verify the secondary FortiGate:
FGT_EC_Secondary(global) # diagnose endpoint fctems json deep-inspect-cert-sync JSON: """ { "fortigates":[ "FG2K5E39169*****", "FG2K5E39169*****" ], "vdoms":[ { "vdom":"root", "certs":[ { "name":"Fortinet_CA_SSL", "cert":"-----BEGIN CERTIFICATE-----\\nMIID5jCCAs6g...Sfu+Q8zE8Crmt6L1X\/bv+q\\n-----END CERTIFICATE-----\\n" }, { "name":"Fortinet_CA_Untrusted", "cert":"-----BEGIN CERTIFICATE-----\\nMIID8DCCAtig...3zBbfzP+nVUpC\\nZDPRZA==\\n-----END CERTIFICATE-----" } ] }, { "vdom":"vdom1", "certs":[ { "name":"Fortinet_CA_SSL", "cert":"-----BEGIN CERTIFICATE-----\\nMIID5jCCAs6g...Sfu+Q8zE8Crmt6L1X\/bv+q\\n-----END CERTIFICATE-----\\n" }, { "name":"Fortinet_CA_Untrusted", "cert":"-----BEGIN CERTIFICATE-----\\nMIID8DCCAtig...3zBbfzP+nVUpC\\nZDPRZA==\\n-----END CERTIFICATE-----" } ] } ] } """
Allowing FortiClient EMS connectors to trust EMS server certificate renewals based on the CN field
When a FortiGate establishes a Fabric connection with FortiClient EMS, the FortiGate must trust the CA that signed the server certificate. Upon the approval of the EMS certificate, the FortiGate saves the CN field and will trust future certificates that are signed by the same CA and have the same CN field. This allows EMS servers to update their certificates at regular intervals without requiring re-authorization on the FortiGate side, as long as the CN field matches. This prevents interruptions to the EMS Fabric connection when a certificate is updated. Previously, upon the user's approval of the certificate, the certificate fingerprint was saved on the FortiGate, and this required the FortiGate to re-authorize the EMS connection each time the server certificate is updated.
config endpoint-control fctems edit <id> set trust-ca-cn {enable | disable} next end
This feature is supported for EMS on-premise and cloud connections, and is the default setting. To authorize based on the certificate fingerprint, disable the trust-ca-cn
setting. If the setting is changed back to be enabled at a later time, the user will have to re-approve the EMS certificate.
To configure the EMS Fabric connector to trust EMS server certificate renewals based on the CN field:
config endpoint-control fctems edit 1 set status enable set name "ems133" set dirty-reason none set fortinetone-cloud-authentication disable set server "172.18.62.35" set https-port 443 set serial-number "FCTEMS8822000000" set tenant-id "00000000000000000000000000000000" set source-ip 0.0.0.0 set pull-sysinfo enable set pull-vulnerabilities enable set pull-avatars enable set pull-tags enable set pull-malware-hash enable set capabilities fabric-auth silent-approval websocket websocket-malware push-ca-certs common-tags-api tenant-id set call-timeout 30 set out-of-sync-threshold 180 set websocket-override disable set preserve-ssl-session disable set interface-select-method auto set trust-ca-cn enable next end
To verify the configuration:
-
Download the FortiGate configuration file.
-
Verify the
ca-cn-info
entry, which lists the trusted CA certificate information. In this example, ems133 connector hastrust-ca-cn
enabled and ems138 connector hastrust-ca-cn
disabled. For ems138, theca-cn-info
entry does not appear, and there is acertificate-fingerprint
field instead:config endpoint-control fctems edit 1 set status enable set name "ems133" set server "172.18.62.35" set serial-number "FCTEMS8822000000" set tenant-id "00000000000000000000000000000000" set capabilities fabric-auth silent-approval websocket websocket-malware push-ca-certs common-tags-api tenant-id set ca-cn-info "C = CA, ST = BC, L = VANCOUVER, O = FTNT, OU = ReleaseQA, CN = Release_QA, emailAddress = ********@fortinet.comRelease_QA" next edit 2 set status enable set name "ems138" set server "172.18.62.18" set serial-number "FCTEMS8821000000" set tenant-id "00000000000000000000000000000000" set capabilities fabric-auth silent-approval websocket websocket-malware push-ca-certs common-tags-api tenant-id set certificate-fingerprint "18:51:76:67:EB:4C:31:A1:51:3F:74:F7:8E:1D:47:5C:18:0F:FE:45:DF:52:91:52:37:0B:27:E7:F1:85:5B:01:8C:7D:FB:2D:C7:D2:CC:FE:4A:E3:0E:A9:2A:1C:27:4D:D2:A6:C5:87:B8:97:98:57:75:10:15:28:EF:A2:23:7C" set trust-ca-cn disable next ... end
-
Run diagnostics to view the certificate information:
# diagnose test application fcnacd 96 ems_id 1, certificate authority and common name: C = CA, ST = BC, L = VANCOUVER, O = FTNT, OU = ReleaseQA, CN = Release_QA, emailAddress = ********@fortinet.comRelease_QA ems_id 1, fingerprint_sha512: ems_id 2, certificate authority and common name: ems_id 2, fingerprint_sha512: 18:51:76:67:EB:4C:31:A1:51:3F:74:F7:8E:1D:47:5C:18:0F:FE:45:DF:52:91:52:37:0B:27:E7:F1:85:5B:01:8C:7D:FB:2D:C7:D2:CC:FE:4A:E3:0E:A9:2A:1C:27:4D:D2:A6:C5:87:B8:97:98:57:75:10:15:28:EF:A2:23:7C