<reponame>pulumiverse/pulumi-fortios// *** WARNING: this file was generated by the Pulumi Terraform Bridge (tfgen) Tool. ***
// *** Do not edit by hand unless you're certain you know what you are doing! ***

using System;
using System.Collections.Generic;
using System.Collections.Immutable;
using System.Threading.Tasks;
using Pulumi.Serialization;
using Pulumi;

namespace Pulumiverse.Fortios
{
    /// <summary>
    /// Configure SSL/SSH protocol options.
    /// 
    /// ## Example Usage
    /// 
    /// ```csharp
    /// using System.Collections.Generic;
    /// using System.Linq;
    /// using Pulumi;
    /// using Fortios = Pulumiverse.Fortios;
    /// 
    /// return await Deployment.RunAsync(() =&gt; 
    /// {
    ///     var t1 = new Fortios.FirewallSslsshprofile("t1", new()
    ///     {
    ///         Ftps = new Fortios.Inputs.FirewallSslsshprofileFtpsArgs
    ///         {
    ///             Ports = "990",
    ///         },
    ///         Https = new Fortios.Inputs.FirewallSslsshprofileHttpsArgs
    ///         {
    ///             Ports = "443 127 422 392",
    ///         },
    ///         Imaps = new Fortios.Inputs.FirewallSslsshprofileImapsArgs
    ///         {
    ///             Ports = "993 1123",
    ///         },
    ///         Pop3s = new Fortios.Inputs.FirewallSslsshprofilePop3sArgs
    ///         {
    ///             Ports = "995",
    ///         },
    ///         Smtps = new Fortios.Inputs.FirewallSslsshprofileSmtpsArgs
    ///         {
    ///             Ports = "465",
    ///         },
    ///         Ssl = new Fortios.Inputs.FirewallSslsshprofileSslArgs
    ///         {
    ///             InspectAll = "disable",
    ///         },
    ///     });
    /// 
    ///     var t2 = new Fortios.FirewallSslsshprofile("t2", new()
    ///     {
    ///         Https = new Fortios.Inputs.FirewallSslsshprofileHttpsArgs
    ///         {
    ///             Ports = "443",
    ///         },
    ///         Ssl = new Fortios.Inputs.FirewallSslsshprofileSslArgs
    ///         {
    ///             InspectAll = "deep-inspection",
    ///         },
    ///     });
    /// 
    /// });
    /// ```
    /// 
    /// ## Import
    /// 
    /// Firewall SslSshProfile can be imported using any of these accepted formats
    /// 
    /// ```sh
    ///  $ pulumi import fortios:index/firewallSslsshprofile:FirewallSslsshprofile labelname {{name}}
    /// ```
    /// 
    ///  If you do not want to import arguments of block$ export "FORTIOS_IMPORT_TABLE"="false"
    /// 
    /// ```sh
    ///  $ pulumi import fortios:index/firewallSslsshprofile:FirewallSslsshprofile labelname {{name}}
    /// ```
    /// 
    ///  $ unset "FORTIOS_IMPORT_TABLE"
    /// </summary>
    [FortiosResourceType("fortios:index/firewallSslsshprofile:FirewallSslsshprofile")]
    public partial class FirewallSslsshprofile : global::Pulumi.CustomResource
    {
        /// <summary>
        /// Enable/disable exempting servers by FortiGuard allowlist. Valid values: `enable`, `disable`.
        /// </summary>
        [Output("allowlist")]
        public Output<string> Allowlist { get; private set; } = null!;

        /// <summary>
        /// Enable/disable blocking SSL-based botnet communication by FortiGuard certificate blacklist. Valid values: `disable`, `enable`.
        /// </summary>
        [Output("blockBlacklistedCertificates")]
        public Output<string> BlockBlacklistedCertificates { get; private set; } = null!;

        /// <summary>
        /// Enable/disable blocking SSL-based botnet communication by FortiGuard certificate blocklist. Valid values: `disable`, `enable`.
        /// </summary>
        [Output("blockBlocklistedCertificates")]
        public Output<string> BlockBlocklistedCertificates { get; private set; } = null!;

        /// <summary>
        /// CA certificate used by SSL Inspection.
        /// </summary>
        [Output("caname")]
        public Output<string> Caname { get; private set; } = null!;

        /// <summary>
        /// Optional comments.
        /// </summary>
        [Output("comment")]
        public Output<string?> Comment { get; private set; } = null!;

        /// <summary>
        /// Configure DNS over TLS options. The structure of `dot` block is documented below.
        /// </summary>
        [Output("dot")]
        public Output<Outputs.FirewallSslsshprofileDot> Dot { get; private set; } = null!;

        /// <summary>
        /// Sort sub-tables, please do not set this parameter when configuring static sub-tables. Options: [ false, true, natural, alphabetical ]. false: Default value, do not sort tables; true/natural: sort tables in natural order. For example: [ a10, a2 ] -&gt; [ a2, a10 ]; alphabetical: sort tables in alphabetical order. For example: [ a10, a2 ] -&gt; [ a10, a2 ].
        /// </summary>
        [Output("dynamicSortSubtable")]
        public Output<string?> DynamicSortSubtable { get; private set; } = null!;

        /// <summary>
        /// Configure FTPS options. The structure of `ftps` block is documented below.
        /// </summary>
        [Output("ftps")]
        public Output<Outputs.FirewallSslsshprofileFtps> Ftps { get; private set; } = null!;

        /// <summary>
        /// Configure HTTPS options. The structure of `https` block is documented below.
        /// </summary>
        [Output("https")]
        public Output<Outputs.FirewallSslsshprofileHttps> Https { get; private set; } = null!;

        /// <summary>
        /// Configure IMAPS options. The structure of `imaps` block is documented below.
        /// </summary>
        [Output("imaps")]
        public Output<Outputs.FirewallSslsshprofileImaps> Imaps { get; private set; } = null!;

        /// <summary>
        /// Enable/disable inspection of MAPI over HTTPS. Valid values: `enable`, `disable`.
        /// </summary>
        [Output("mapiOverHttps")]
        public Output<string> MapiOverHttps { get; private set; } = null!;

        /// <summary>
        /// Name.
        /// </summary>
        [Output("name")]
        public Output<string> Name { get; private set; } = null!;

        /// <summary>
        /// Configure POP3S options. The structure of `pop3s` block is documented below.
        /// </summary>
        [Output("pop3s")]
        public Output<Outputs.FirewallSslsshprofilePop3s> Pop3s { get; private set; } = null!;

        /// <summary>
        /// Enable/disable inspection of RPC over HTTPS. Valid values: `enable`, `disable`.
        /// </summary>
        [Output("rpcOverHttps")]
        public Output<string> RpcOverHttps { get; private set; } = null!;

        /// <summary>
        /// Certificate used by SSL Inspection to replace server certificate.
        /// </summary>
        [Output("serverCert")]
        public Output<string> ServerCert { get; private set; } = null!;

        /// <summary>
        /// Re-sign or replace the server's certificate. Valid values: `re-sign`, `replace`.
        /// </summary>
        [Output("serverCertMode")]
        public Output<string> ServerCertMode { get; private set; } = null!;

        /// <summary>
        /// Configure SMTPS options. The structure of `smtps` block is documented below.
        /// </summary>
        [Output("smtps")]
        public Output<Outputs.FirewallSslsshprofileSmtps> Smtps { get; private set; } = null!;

        /// <summary>
        /// Configure SSH options. The structure of `ssh` block is documented below.
        /// </summary>
        [Output("ssh")]
        public Output<Outputs.FirewallSslsshprofileSsh> Ssh { get; private set; } = null!;

        /// <summary>
        /// Configure SSL options. The structure of `ssl` block is documented below.
        /// </summary>
        [Output("ssl")]
        public Output<Outputs.FirewallSslsshprofileSsl> Ssl { get; private set; } = null!;

        /// <summary>
        /// Enable/disable logging SSL anomalies. Valid values: `disable`, `enable`.
        /// </summary>
        [Output("sslAnomaliesLog")]
        public Output<string> SslAnomaliesLog { get; private set; } = null!;

        /// <summary>
        /// Enable/disable logging SSL anomalies. Valid values: `disable`, `enable`.
        /// </summary>
        [Output("sslAnomalyLog")]
        public Output<string> SslAnomalyLog { get; private set; } = null!;

        /// <summary>
        /// Enable/disable IP based URL rating. Valid values: `enable`, `disable`.
        /// </summary>
        [Output("sslExemptionIpRating")]
        public Output<string> SslExemptionIpRating { get; private set; } = null!;

        /// <summary>
        /// Enable/disable logging SSL exemptions. Valid values: `disable`, `enable`.
        /// </summary>
        [Output("sslExemptionLog")]
        public Output<string> SslExemptionLog { get; private set; } = null!;

        /// <summary>
        /// Enable/disable logging SSL exemptions. Valid values: `disable`, `enable`.
        /// </summary>
        [Output("sslExemptionsLog")]
        public Output<string> SslExemptionsLog { get; private set; } = null!;

        /// <summary>
        /// Servers to exempt from SSL inspection. The structure of `ssl_exempt` block is documented below.
        /// </summary>
        [Output("sslExempts")]
        public Output<ImmutableArray<Outputs.FirewallSslsshprofileSslExempt>> SslExempts { get; private set; } = null!;

        /// <summary>
        /// Enable/disable logging of TLS handshakes. Valid values: `disable`, `enable`.
        /// </summary>
        [Output("sslHandshakeLog")]
        public Output<string> SslHandshakeLog { get; private set; } = null!;

        /// <summary>
        /// Enable/disable logging SSL negotiation. Valid values: `disable`, `enable`.
        /// </summary>
        [Output("sslNegotiationLog")]
        public Output<string> SslNegotiationLog { get; private set; } = null!;

        /// <summary>
        /// Enable/disable logging of server certificate information. Valid values: `disable`, `enable`.
        /// </summary>
        [Output("sslServerCertLog")]
        public Output<string> SslServerCertLog { get; private set; } = null!;

        /// <summary>
        /// SSL servers. The structure of `ssl_server` block is documented below.
        /// </summary>
        [Output("sslServers")]
        public Output<ImmutableArray<Outputs.FirewallSslsshprofileSslServer>> SslServers { get; private set; } = null!;

        /// <summary>
        /// Configure ALPN option. Valid values: `http1-1`, `http2`, `all`, `none`.
        /// </summary>
        [Output("supportedAlpn")]
        public Output<string> SupportedAlpn { get; private set; } = null!;

        /// <summary>
        /// Untrusted CA certificate used by SSL Inspection.
        /// </summary>
        [Output("untrustedCaname")]
        public Output<string> UntrustedCaname { get; private set; } = null!;

        /// <summary>
        /// Enable/disable the use of SSL server table for SSL offloading. Valid values: `disable`, `enable`.
        /// </summary>
        [Output("useSslServer")]
        public Output<string> UseSslServer { get; private set; } = null!;

        /// <summary>
        /// Specifies the vdom to which the resource will be applied when the FortiGate unit is running in VDOM mode. Only one vdom can be specified. If you want to inherit the vdom configuration of the provider, please do not set this parameter.
        /// </summary>
        [Output("vdomparam")]
        public Output<string?> Vdomparam { get; private set; } = null!;

        /// <summary>
        /// Enable/disable exempting servers by FortiGuard whitelist. Valid values: `enable`, `disable`.
        /// </summary>
        [Output("whitelist")]
        public Output<string> Whitelist { get; private set; } = null!;


        /// <summary>
        /// Create a FirewallSslsshprofile resource with the given unique name, arguments, and options.
        /// </summary>
        ///
        /// <param name="name">The unique name of the resource</param>
        /// <param name="args">The arguments used to populate this resource's properties</param>
        /// <param name="options">A bag of options that control this resource's behavior</param>
        public FirewallSslsshprofile(string name, FirewallSslsshprofileArgs? args = null, CustomResourceOptions? options = null)
            : base("fortios:index/firewallSslsshprofile:FirewallSslsshprofile", name, args ?? new FirewallSslsshprofileArgs(), MakeResourceOptions(options, ""))
        {
        }

        private FirewallSslsshprofile(string name, Input<string> id, FirewallSslsshprofileState? state = null, CustomResourceOptions? options = null)
            : base("fortios:index/firewallSslsshprofile:FirewallSslsshprofile", name, state, MakeResourceOptions(options, id))
        {
        }

        private static CustomResourceOptions MakeResourceOptions(CustomResourceOptions? options, Input<string>? id)
        {
            var defaultOptions = new CustomResourceOptions
            {
                Version = Utilities.Version,
                PluginDownloadURL = "github://api.github.com/pulumiverse/pulumi-fortios",
            };
            var merged = CustomResourceOptions.Merge(defaultOptions, options);
            // Override the ID if one was specified for consistency with other language SDKs.
            merged.Id = id ?? merged.Id;
            return merged;
        }
        /// <summary>
        /// Get an existing FirewallSslsshprofile resource's state with the given name, ID, and optional extra
        /// properties used to qualify the lookup.
        /// </summary>
        ///
        /// <param name="name">The unique name of the resulting resource.</param>
        /// <param name="id">The unique provider ID of the resource to lookup.</param>
        /// <param name="state">Any extra arguments used during the lookup.</param>
        /// <param name="options">A bag of options that control this resource's behavior</param>
        public static FirewallSslsshprofile Get(string name, Input<string> id, FirewallSslsshprofileState? state = null, CustomResourceOptions? options = null)
        {
            return new FirewallSslsshprofile(name, id, state, options);
        }
    }

    public sealed class FirewallSslsshprofileArgs : global::Pulumi.ResourceArgs
    {
        /// <summary>
        /// Enable/disable exempting servers by FortiGuard allowlist. Valid values: `enable`, `disable`.
        /// </summary>
        [Input("allowlist")]
        public Input<string>? Allowlist { get; set; }

        /// <summary>
        /// Enable/disable blocking SSL-based botnet communication by FortiGuard certificate blacklist. Valid values: `disable`, `enable`.
        /// </summary>
        [Input("blockBlacklistedCertificates")]
        public Input<string>? BlockBlacklistedCertificates { get; set; }

        /// <summary>
        /// Enable/disable blocking SSL-based botnet communication by FortiGuard certificate blocklist. Valid values: `disable`, `enable`.
        /// </summary>
        [Input("blockBlocklistedCertificates")]
        public Input<string>? BlockBlocklistedCertificates { get; set; }

        /// <summary>
        /// CA certificate used by SSL Inspection.
        /// </summary>
        [Input("caname")]
        public Input<string>? Caname { get; set; }

        /// <summary>
        /// Optional comments.
        /// </summary>
        [Input("comment")]
        public Input<string>? Comment { get; set; }

        /// <summary>
        /// Configure DNS over TLS options. The structure of `dot` block is documented below.
        /// </summary>
        [Input("dot")]
        public Input<Inputs.FirewallSslsshprofileDotArgs>? Dot { get; set; }

        /// <summary>
        /// Sort sub-tables, please do not set this parameter when configuring static sub-tables. Options: [ false, true, natural, alphabetical ]. false: Default value, do not sort tables; true/natural: sort tables in natural order. For example: [ a10, a2 ] -&gt; [ a2, a10 ]; alphabetical: sort tables in alphabetical order. For example: [ a10, a2 ] -&gt; [ a10, a2 ].
        /// </summary>
        [Input("dynamicSortSubtable")]
        public Input<string>? DynamicSortSubtable { get; set; }

        /// <summary>
        /// Configure FTPS options. The structure of `ftps` block is documented below.
        /// </summary>
        [Input("ftps")]
        public Input<Inputs.FirewallSslsshprofileFtpsArgs>? Ftps { get; set; }

        /// <summary>
        /// Configure HTTPS options. The structure of `https` block is documented below.
        /// </summary>
        [Input("https")]
        public Input<Inputs.FirewallSslsshprofileHttpsArgs>? Https { get; set; }

        /// <summary>
        /// Configure IMAPS options. The structure of `imaps` block is documented below.
        /// </summary>
        [Input("imaps")]
        public Input<Inputs.FirewallSslsshprofileImapsArgs>? Imaps { get; set; }

        /// <summary>
        /// Enable/disable inspection of MAPI over HTTPS. Valid values: `enable`, `disable`.
        /// </summary>
        [Input("mapiOverHttps")]
        public Input<string>? MapiOverHttps { get; set; }

        /// <summary>
        /// Name.
        /// </summary>
        [Input("name")]
        public Input<string>? Name { get; set; }

        /// <summary>
        /// Configure POP3S options. The structure of `pop3s` block is documented below.
        /// </summary>
        [Input("pop3s")]
        public Input<Inputs.FirewallSslsshprofilePop3sArgs>? Pop3s { get; set; }

        /// <summary>
        /// Enable/disable inspection of RPC over HTTPS. Valid values: `enable`, `disable`.
        /// </summary>
        [Input("rpcOverHttps")]
        public Input<string>? RpcOverHttps { get; set; }

        /// <summary>
        /// Certificate used by SSL Inspection to replace server certificate.
        /// </summary>
        [Input("serverCert")]
        public Input<string>? ServerCert { get; set; }

        /// <summary>
        /// Re-sign or replace the server's certificate. Valid values: `re-sign`, `replace`.
        /// </summary>
        [Input("serverCertMode")]
        public Input<string>? ServerCertMode { get; set; }

        /// <summary>
        /// Configure SMTPS options. The structure of `smtps` block is documented below.
        /// </summary>
        [Input("smtps")]
        public Input<Inputs.FirewallSslsshprofileSmtpsArgs>? Smtps { get; set; }

        /// <summary>
        /// Configure SSH options. The structure of `ssh` block is documented below.
        /// </summary>
        [Input("ssh")]
        public Input<Inputs.FirewallSslsshprofileSshArgs>? Ssh { get; set; }

        /// <summary>
        /// Configure SSL options. The structure of `ssl` block is documented below.
        /// </summary>
        [Input("ssl")]
        public Input<Inputs.FirewallSslsshprofileSslArgs>? Ssl { get; set; }

        /// <summary>
        /// Enable/disable logging SSL anomalies. Valid values: `disable`, `enable`.
        /// </summary>
        [Input("sslAnomaliesLog")]
        public Input<string>? SslAnomaliesLog { get; set; }

        /// <summary>
        /// Enable/disable logging SSL anomalies. Valid values: `disable`, `enable`.
        /// </summary>
        [Input("sslAnomalyLog")]
        public Input<string>? SslAnomalyLog { get; set; }

        /// <summary>
        /// Enable/disable IP based URL rating. Valid values: `enable`, `disable`.
        /// </summary>
        [Input("sslExemptionIpRating")]
        public Input<string>? SslExemptionIpRating { get; set; }

        /// <summary>
        /// Enable/disable logging SSL exemptions. Valid values: `disable`, `enable`.
        /// </summary>
        [Input("sslExemptionLog")]
        public Input<string>? SslExemptionLog { get; set; }

        /// <summary>
        /// Enable/disable logging SSL exemptions. Valid values: `disable`, `enable`.
        /// </summary>
        [Input("sslExemptionsLog")]
        public Input<string>? SslExemptionsLog { get; set; }

        [Input("sslExempts")]
        private InputList<Inputs.FirewallSslsshprofileSslExemptArgs>? _sslExempts;

        /// <summary>
        /// Servers to exempt from SSL inspection. The structure of `ssl_exempt` block is documented below.
        /// </summary>
        public InputList<Inputs.FirewallSslsshprofileSslExemptArgs> SslExempts
        {
            get => _sslExempts ?? (_sslExempts = new InputList<Inputs.FirewallSslsshprofileSslExemptArgs>());
            set => _sslExempts = value;
        }

        /// <summary>
        /// Enable/disable logging of TLS handshakes. Valid values: `disable`, `enable`.
        /// </summary>
        [Input("sslHandshakeLog")]
        public Input<string>? SslHandshakeLog { get; set; }

        /// <summary>
        /// Enable/disable logging SSL negotiation. Valid values: `disable`, `enable`.
        /// </summary>
        [Input("sslNegotiationLog")]
        public Input<string>? SslNegotiationLog { get; set; }

        /// <summary>
        /// Enable/disable logging of server certificate information. Valid values: `disable`, `enable`.
        /// </summary>
        [Input("sslServerCertLog")]
        public Input<string>? SslServerCertLog { get; set; }

        [Input("sslServers")]
        private InputList<Inputs.FirewallSslsshprofileSslServerArgs>? _sslServers;

        /// <summary>
        /// SSL servers. The structure of `ssl_server` block is documented below.
        /// </summary>
        public InputList<Inputs.FirewallSslsshprofileSslServerArgs> SslServers
        {
            get => _sslServers ?? (_sslServers = new InputList<Inputs.FirewallSslsshprofileSslServerArgs>());
            set => _sslServers = value;
        }

        /// <summary>
        /// Configure ALPN option. Valid values: `http1-1`, `http2`, `all`, `none`.
        /// </summary>
        [Input("supportedAlpn")]
        public Input<string>? SupportedAlpn { get; set; }

        /// <summary>
        /// Untrusted CA certificate used by SSL Inspection.
        /// </summary>
        [Input("untrustedCaname")]
        public Input<string>? UntrustedCaname { get; set; }

        /// <summary>
        /// Enable/disable the use of SSL server table for SSL offloading. Valid values: `disable`, `enable`.
        /// </summary>
        [Input("useSslServer")]
        public Input<string>? UseSslServer { get; set; }

        /// <summary>
        /// Specifies the vdom to which the resource will be applied when the FortiGate unit is running in VDOM mode. Only one vdom can be specified. If you want to inherit the vdom configuration of the provider, please do not set this parameter.
        /// </summary>
        [Input("vdomparam")]
        public Input<string>? Vdomparam { get; set; }

        /// <summary>
        /// Enable/disable exempting servers by FortiGuard whitelist. Valid values: `enable`, `disable`.
        /// </summary>
        [Input("whitelist")]
        public Input<string>? Whitelist { get; set; }

        public FirewallSslsshprofileArgs()
        {
        }
        public static new FirewallSslsshprofileArgs Empty => new FirewallSslsshprofileArgs();
    }

    public sealed class FirewallSslsshprofileState : global::Pulumi.ResourceArgs
    {
        /// <summary>
        /// Enable/disable exempting servers by FortiGuard allowlist. Valid values: `enable`, `disable`.
        /// </summary>
        [Input("allowlist")]
        public Input<string>? Allowlist { get; set; }

        /// <summary>
        /// Enable/disable blocking SSL-based botnet communication by FortiGuard certificate blacklist. Valid values: `disable`, `enable`.
        /// </summary>
        [Input("blockBlacklistedCertificates")]
        public Input<string>? BlockBlacklistedCertificates { get; set; }

        /// <summary>
        /// Enable/disable blocking SSL-based botnet communication by FortiGuard certificate blocklist. Valid values: `disable`, `enable`.
        /// </summary>
        [Input("blockBlocklistedCertificates")]
        public Input<string>? BlockBlocklistedCertificates { get; set; }

        /// <summary>
        /// CA certificate used by SSL Inspection.
        /// </summary>
        [Input("caname")]
        public Input<string>? Caname { get; set; }

        /// <summary>
        /// Optional comments.
        /// </summary>
        [Input("comment")]
        public Input<string>? Comment { get; set; }

        /// <summary>
        /// Configure DNS over TLS options. The structure of `dot` block is documented below.
        /// </summary>
        [Input("dot")]
        public Input<Inputs.FirewallSslsshprofileDotGetArgs>? Dot { get; set; }

        /// <summary>
        /// Sort sub-tables, please do not set this parameter when configuring static sub-tables. Options: [ false, true, natural, alphabetical ]. false: Default value, do not sort tables; true/natural: sort tables in natural order. For example: [ a10, a2 ] -&gt; [ a2, a10 ]; alphabetical: sort tables in alphabetical order. For example: [ a10, a2 ] -&gt; [ a10, a2 ].
        /// </summary>
        [Input("dynamicSortSubtable")]
        public Input<string>? DynamicSortSubtable { get; set; }

        /// <summary>
        /// Configure FTPS options. The structure of `ftps` block is documented below.
        /// </summary>
        [Input("ftps")]
        public Input<Inputs.FirewallSslsshprofileFtpsGetArgs>? Ftps { get; set; }

        /// <summary>
        /// Configure HTTPS options. The structure of `https` block is documented below.
        /// </summary>
        [Input("https")]
        public Input<Inputs.FirewallSslsshprofileHttpsGetArgs>? Https { get; set; }

        /// <summary>
        /// Configure IMAPS options. The structure of `imaps` block is documented below.
        /// </summary>
        [Input("imaps")]
        public Input<Inputs.FirewallSslsshprofileImapsGetArgs>? Imaps { get; set; }

        /// <summary>
        /// Enable/disable inspection of MAPI over HTTPS. Valid values: `enable`, `disable`.
        /// </summary>
        [Input("mapiOverHttps")]
        public Input<string>? MapiOverHttps { get; set; }

        /// <summary>
        /// Name.
        /// </summary>
        [Input("name")]
        public Input<string>? Name { get; set; }

        /// <summary>
        /// Configure POP3S options. The structure of `pop3s` block is documented below.
        /// </summary>
        [Input("pop3s")]
        public Input<Inputs.FirewallSslsshprofilePop3sGetArgs>? Pop3s { get; set; }

        /// <summary>
        /// Enable/disable inspection of RPC over HTTPS. Valid values: `enable`, `disable`.
        /// </summary>
        [Input("rpcOverHttps")]
        public Input<string>? RpcOverHttps { get; set; }

        /// <summary>
        /// Certificate used by SSL Inspection to replace server certificate.
        /// </summary>
        [Input("serverCert")]
        public Input<string>? ServerCert { get; set; }

        /// <summary>
        /// Re-sign or replace the server's certificate. Valid values: `re-sign`, `replace`.
        /// </summary>
        [Input("serverCertMode")]
        public Input<string>? ServerCertMode { get; set; }

        /// <summary>
        /// Configure SMTPS options. The structure of `smtps` block is documented below.
        /// </summary>
        [Input("smtps")]
        public Input<Inputs.FirewallSslsshprofileSmtpsGetArgs>? Smtps { get; set; }

        /// <summary>
        /// Configure SSH options. The structure of `ssh` block is documented below.
        /// </summary>
        [Input("ssh")]
        public Input<Inputs.FirewallSslsshprofileSshGetArgs>? Ssh { get; set; }

        /// <summary>
        /// Configure SSL options. The structure of `ssl` block is documented below.
        /// </summary>
        [Input("ssl")]
        public Input<Inputs.FirewallSslsshprofileSslGetArgs>? Ssl { get; set; }

        /// <summary>
        /// Enable/disable logging SSL anomalies. Valid values: `disable`, `enable`.
        /// </summary>
        [Input("sslAnomaliesLog")]
        public Input<string>? SslAnomaliesLog { get; set; }

        /// <summary>
        /// Enable/disable logging SSL anomalies. Valid values: `disable`, `enable`.
        /// </summary>
        [Input("sslAnomalyLog")]
        public Input<string>? SslAnomalyLog { get; set; }

        /// <summary>
        /// Enable/disable IP based URL rating. Valid values: `enable`, `disable`.
        /// </summary>
        [Input("sslExemptionIpRating")]
        public Input<string>? SslExemptionIpRating { get; set; }

        /// <summary>
        /// Enable/disable logging SSL exemptions. Valid values: `disable`, `enable`.
        /// </summary>
        [Input("sslExemptionLog")]
        public Input<string>? SslExemptionLog { get; set; }

        /// <summary>
        /// Enable/disable logging SSL exemptions. Valid values: `disable`, `enable`.
        /// </summary>
        [Input("sslExemptionsLog")]
        public Input<string>? SslExemptionsLog { get; set; }

        [Input("sslExempts")]
        private InputList<Inputs.FirewallSslsshprofileSslExemptGetArgs>? _sslExempts;

        /// <summary>
        /// Servers to exempt from SSL inspection. The structure of `ssl_exempt` block is documented below.
        /// </summary>
        public InputList<Inputs.FirewallSslsshprofileSslExemptGetArgs> SslExempts
        {
            get => _sslExempts ?? (_sslExempts = new InputList<Inputs.FirewallSslsshprofileSslExemptGetArgs>());
            set => _sslExempts = value;
        }

        /// <summary>
        /// Enable/disable logging of TLS handshakes. Valid values: `disable`, `enable`.
        /// </summary>
        [Input("sslHandshakeLog")]
        public Input<string>? SslHandshakeLog { get; set; }

        /// <summary>
        /// Enable/disable logging SSL negotiation. Valid values: `disable`, `enable`.
        /// </summary>
        [Input("sslNegotiationLog")]
        public Input<string>? SslNegotiationLog { get; set; }

        /// <summary>
        /// Enable/disable logging of server certificate information. Valid values: `disable`, `enable`.
        /// </summary>
        [Input("sslServerCertLog")]
        public Input<string>? SslServerCertLog { get; set; }

        [Input("sslServers")]
        private InputList<Inputs.FirewallSslsshprofileSslServerGetArgs>? _sslServers;

        /// <summary>
        /// SSL servers. The structure of `ssl_server` block is documented below.
        /// </summary>
        public InputList<Inputs.FirewallSslsshprofileSslServerGetArgs> SslServers
        {
            get => _sslServers ?? (_sslServers = new InputList<Inputs.FirewallSslsshprofileSslServerGetArgs>());
            set => _sslServers = value;
        }

        /// <summary>
        /// Configure ALPN option. Valid values: `http1-1`, `http2`, `all`, `none`.
        /// </summary>
        [Input("supportedAlpn")]
        public Input<string>? SupportedAlpn { get; set; }

        /// <summary>
        /// Untrusted CA certificate used by SSL Inspection.
        /// </summary>
        [Input("untrustedCaname")]
        public Input<string>? UntrustedCaname { get; set; }

        /// <summary>
        /// Enable/disable the use of SSL server table for SSL offloading. Valid values: `disable`, `enable`.
        /// </summary>
        [Input("useSslServer")]
        public Input<string>? UseSslServer { get; set; }

        /// <summary>
        /// Specifies the vdom to which the resource will be applied when the FortiGate unit is running in VDOM mode. Only one vdom can be specified. If you want to inherit the vdom configuration of the provider, please do not set this parameter.
        /// </summary>
        [Input("vdomparam")]
        public Input<string>? Vdomparam { get; set; }

        /// <summary>
        /// Enable/disable exempting servers by FortiGuard whitelist. Valid values: `enable`, `disable`.
        /// </summary>
        [Input("whitelist")]
        public Input<string>? Whitelist { get; set; }

        public FirewallSslsshprofileState()
        {
        }
        public static new FirewallSslsshprofileState Empty => new FirewallSslsshprofileState();
    }
}
