Starting from FortiOS v7.4.9, FortiGate will not allow SSL VPN to load a server certificate with an RSA key of less than 2048 bits. If a certificate with an RSA key of 1024 bits was configured for SSL VPN before upgrade and SSL VPN is enabled, the process will not be able to load successfully after upgrade. Since SSL VPN continuously attempts to load, this can cause elevated CPU use in sslvpnd processes, potentially affecting other network traffic even when no users are connecting.
Given 1024-bit RSA keys are deprecated and Public Certificate Authorities (CAs) have not allowed them for some time, this issue should only affect deployments using an expired certificate, a privately-signed server certificate with weak key strength, or a self-signed server certificate (i.e., deployments that should already be considered insecure).
A valid, publicly signed server certificate is required in the majority of SSL VPN deployments, although some enterprise and larger organizations use a private PKI infrastructure to issue their own certificates to managed devices. For security reasons, it is critical not to use expired, compromised, or self-signed server certificates in production environments.
Resolution:
Apply a server certificate with a more secure key, such as an RSA key of 2048 bits or more, or an ECDSA key.
If SSL VPN is not required, it can be disabled; see this article:Â Technical Tip:Â How to disable SSL VPN functionality on FortiGate.
Example:
The diagnostics below show the SSL VPN process failing to load the weak certificate.
config vpn ssl settings
  set banned-cipher SHA1 SHA256 SHA384
  set servercert "spoke1.server.cert"Â
  set tunnel-ip-pools "SSLVPN_TUNNEL_ADDR1"
  set tunnel-ipv6-pools "SSLVPN_TUNNEL_IPv6_ADDR1"
  set source-interface "port7"
   set port 10443
  set source-address "all"
  set default-portal "web-access"
    config authentication-rule
      edit 1
        set groups "ldap.users"
        set portal "tunnel-access"
      next
    end
end
diagnose debug disable
diagnose debug reset
diagnose debug console timestamp enable
diagnose debug application sslvpn -1
diagnose debug application fnbamd -1
diagnose debug enable
FGT # [24991:VPN:0]Reading key root_spoke1.server.cert.key for server [5]:10443
[24986:root:0]Reading key root_fortigate-ssl.key for server [0]:10443
[24990:root:0]set cert: root_fortigate-ssl.cer key: root_fortigate-ssl.key
[24990:root:0]common_create_ssl_srv_ctx:1792 cipher list: HIGH:!RC4:!MD5:!aNULL:!eNULL:@STRENGTH:!SHA1:!SHA256:!SHA384
[24990:root:0]common_create_ssl_srv_ctx:1815 ciphersuite list: TLS_AES_256_GCM_SHA384:TLS_CHACHA20_POLY1305_SHA256:TLS_AES_128_GCM_SHA256
[24991:root:0][24992:VPN:0]Reading key root_spoke1.server.cert.key for server [5]:10443
set cert: root_fortigate-ssl.cer key: root_fortigate-ssl.key
[24986:root:0]Error loading certificate or key /etc/cert/local/root_fortigate-ssl.key
[24991:root:0]common_create_ssl_srv_ctx:1792 cipher list: HIGH:!RC4:!MD5:!aNULL:!eNULL:@STRENGTH:!SHA1:!SHA256:!SHA384
[24991:root:0]common_create_ssl_srv_ctx:1815 ciphersuite list: TLS_AES_256_GCM_SHA384:TLS_CHACHA20_POLY1305_SHA256:TLS_AES_128_GCM_SHA256
 Â
diagnose debug disable
diagnose debug reset
 Note: in FortiOS v7.6.3 and later, SSL VPN tunnel mode has been deprecated. See SSL VPN tunnel mode replaced with IPsec VPN. |