跳到主要内容

创建安全会话

客户端可以选择创建安全会话,这种会话需要使用可信的服务器证书来建立与 PubSub+ 事件代理的 TLS/SSL 加密连接。当创建安全会话时,SMF(Solace 消息格式)信息将通过 TCP 上的 TLS/SSL 传输,而不是通过明文传输。

为了创建安全会话,必须配置一些特定于 TLS/SSL 的会话属性,如下文所述。此外,安全会话将连接到的事件代理必须正确配置,并且必须提供适当的服务器证书。有关如何配置事件代理以允许安全连接的信息,请参阅 TLS/SSL 服务配置。

相关示例

有关如何创建和连接安全会话的示例,请参考适用于相应消息 API 的 SecureSession 示例。此外,您也可以通过在示例中使用的主机名前添加 “tcps:” 来使用安全会话(请参阅主机)。

TLS/SSL特定属性

要创建安全会话,必须配置以下会话属性。

JavaScript API 是通过运行它的浏览器进行配置的,不支持通过会话属性进行这些配置。

属性用途描述
主机C: SOLCLIENT_SESSION_PROP_HOST
C#/.NET: SessionProperties.Host
JCSMP: JCSMPProperties.HOST
Java RTO: SessionHandle.PROPERTIES.HOST
JavaScript: solace.SessionProperties.url
Node.js: solace.SessionProperties.url每个 TLS/SSL 连接的主机条目都需要适当的 TLS/SSL 协议,并且可以指定特定的 TLS/SSL 端口号。
如果未指定端口号,则默认使用 55443 端口。
有关配置主机的信息,请参阅主机。
SSL 排除的协议C: SOLCLIENT_SESSION_PROP_SSL_EXCLUDED_PROTOCOLS
C#/.NET: SessionProperties.SSLExcludedProtocols
JCSMP: JCSMPProperties.SSL_EXCLUDED_PROTOCOLS
Java RTO: SessionHandle.PROPERTIES.SSL_EXCLUDED_PROTOCOLS
JavaScript: 不适用
Node.js: solace.SessionProperties.sslExcludedProtocols一个逗号分隔的加密协议列表,这些协议不能用于安全连接。可能的值包括:
  • SSLv3.0 (SSLv3)
  • TLS v1.0 (TLSv1)
  • TLS v1.1 (TLSv1.1)
  • TLS v1.2 (TLSv1.2)
    有关 SSL v3.0、TLS v1.0、TLS v1.1、TLS v1.2 的特定值偏好,请参阅相关文档。默认列表为空,表示可以使用任何加密协议(没有协议被排除)。
    从 Solace PubSub+ 7.1 开始,此属性已取代已弃用的 SSL 协议属性。Solace 建议尽快切换到新属性。您不能同时使用 SSL 排除协议和 SSL 协议属性。 | | SSL 证书验证 | C: SOLCLIENT_SESSION_PROP_DEFAULT_SSL_VALIDATE_CERTIFICATE
    C#/.NET: SessionProperties.SSLValidateCertificate
    JCSMP: JCSMPProperties.SSL_VALIDATE_CERTIFICATE
    Java RTO: SessionHandle.PROPERTIES.SSL_VALIDATE_CERTIFICATE
    JavaScript: 不适用
    Node.js: solace.SessionProperties.sslValidateCertificate | 指示 API 是否应使用信任库中的可信证书验证服务器证书。
    API 特定信息如下:
  • (C、Java RTO、Node.js 和 .NET API) 信任库是服务器上的一个目录,其中包含可信证书。此属性的默认值为 True
  • (JCSMP) 使用 JKS 或 PKCS12 证书文件作为信任库。 | | SSL 证书日期验证 | C: SOLCLIENT_SESSION_PROP_DEFAULT_SSL_VALIDATE_CERTIFICATE_DATE
    C#/.NET: SessionProperties.SSLValidateCertificateDate
    JCSMP: JCSMPProperties.SSL_VALIDATE_CERTIFICATE_DATE
    Java RTO: SessionHandle.PROPERTIES.SSL_VALIDATE_CERTIFICATE_DATE
    JavaScript: 不适用
    Node.js: 不适用 | 指示当收到已过期证书或尚未使用的证书时,会话连接是否会失败。默认值为 True
    如果 SSL 证书验证属性设置为 False,则不会进行证书日期验证。 | | SSL 证书主机验证 (使用主题备用名称进行 SSL 服务器证书验证) | C: SOLCLIENT_SESSION_PROP_SSL_VALIDATE_CERTIFICATE_HOST
    C#/.NET: SessionProperties.SSLValidateCertificateHost
    JCSMP: JCSMPProperties.SSL_VALIDATE_CERTIFICATE_HOST
    Java RTO: SessionHandle.PROPERTIES.SSL_VALIDATE_CERTIFICATE_HOST
    JavaScript: 不适用
    Node.js: 不适用 | 指示会话连接是否验证 X.509 证书中的主题备用名称。如果 X.509 证书中没有主题备用名称部分,则会验证主题字段中的通用名称与 HOST 属性是否匹配。默认值和推荐设置为 True
    如果 SSL 证书验证属性设置为 False,则不会进行证书主机验证。 | | SSL 密码套件 | C: SOLCLIENT_SESSION_PROP_DEFAULT_SSL_CIPHER_SUITES
    C#/.NET: SessionProperties.SSLCipherSuites
    JCSMP: JCSMPProperties.SSL_CIPHER_SUITES
    Java RTO: SessionHandle.PROPERTIES.SSL_CIPHER_SUITES
    JavaScript: 不适用
    Node.js: solace.SessionProperties.sslCipherSuites | 一个按优先级顺序排列的密码套件列表,用于与事件代理协商。
    密码套件是一组加密参数,定义了用于身份验证、密钥协商、加密和完整性保护的安全算法和密钥大小。
    有关支持的密码套件列表,请参阅适用于相应消息 API 的 PubSub+ 消息 API 文档。默认情况下,未列出任何密码套件,表示应考虑所有支持的密码套件。 | | SSL 可信存储目录 | C: SOLCLIENT_SESSION_PROP_SSL_TRUST_STORE_DIR
    C#/.NET: SessionProperties.SSLTrustStoreDir
    JCSMP: 不适用
    Java RTO: SessionHandle.PROPERTIES.SSL_TRUST_STORE_DIR
    JavaScript: 不适用
    Node.js: 不适用 | 存储可信证书的目录。
    API 特定信息如下:
  • (仅限 Java RTO、C 和 .NET API) 存储可信证书的网络目录。
  • 对于 iOS 应用程序,OpenSSL 可信存储目录必须包含在应用程序的包中,并将 SOLCLIENT_SESSION_PROP_SSL_TRUST_STORE_DIR 属性设置为该目录的路径。有关示例,请参阅 iOS SecureSession 示例。有关运行 iOS SecureSession 示例的说明,请参阅 iOS API 安装位置的 ex/certs 目录中的 README 文件。 | | SSL 可信存储(基于文件) | C: 不适用
    C#/.NET: 不适用
    JCSMP: JCSMPProperties.SSL_TRUST_STORE
    Java RTO: 不适用
    JavaScript: 不适用
    Node.js: solace.SessionProperties.sslTrustStores | 要使用的可信存储文件。API 特定信息如下:
  • (仅限 JCSMP) 要使用的可信存储文件(以 URL 或路径格式表示)。如果 SSL_VALIDATE_CERTIFICATE 属性设置为 True,则此属性是必需的。
  • (仅限 Node.js) 要使用的可信证书文件(以路径格式表示)。如果 sslValidateCertificate 属性设置为 True,则此属性是必需的。 | | SSL 可信存储(内存中) | C: 不适用
    C#/.NET: SessionProperties.SSLTrustStore
    JCSMP: JCSMPProperties.SSL_IN_MEMORY_TRUST_STORE
    Java RTO: 不适用
    JavaScript: 不适用
    Node.js: 不适用 | 指示可用的内存中可信存储中的可信证书。API 特定信息如下:
  • (仅限 .NET API) 要使用的可信证书(以 X509CertificateCollection 格式表示)。如果 SSLValidateCertificate 属性设置为 True,则此属性是必需的。此属性不能与 SSLTrustStoreDir 属性一起使用。
  • (仅限 JCSMP) 内存中的存储以 java.security.KeyStore 格式表示。使用此属性时,不需要 SSL_TRUST_STORE_PASSWORD 属性。只能 使用 SSL_TRUST_STORESSL_IN_MEMORY_TRUST_STORE。您不能混合使用内存中和基于文件(例如,URL 或文件路径)的 SSL 可信存储属性。在使用内存中可信存储时,请记住,将 Keystore 对象传递给 PubSub+ 消息 API 后,该对象被认为是不可变的。 | | SSL 可信存储密码 | C: 不适用
    C#/.NET: 不适用
    JCSMP: SessionHandle.PROPERTIES.SSL_TRUST_STORE_PASSWORD
    Java RTO: 不适用
    JavaScript: 不适用
    Node.js: 不适用 | 指定可信存储的密码。API 特定信息如下:
  • (仅限 JCSMP) 提供给 SSL_TRUST_STORE_PASSWORD 属性的可信存储的密码。如果 SSL_VALIDATE_CERTIFICATE 属性设置为 True,则此属性是必需的。 | | SSL 可信存储格式 | C: 不适用
    C#/.NET: 不适用
    JCSMP: JCSMPProperties.SSL_TRUST_STORE_FORMAT
    Java RTO: 不适用
    JavaScript: 不适用
    Node.js: 不适用 | 指示提供的 SSL 可信存储属性所使用的格式。API 特定信息如下:
  • (仅限 JCSMP) 支持的可信存储格式为 JKS(默认值)和 PKCS12。 | | SSL 连接降级为 | C: SOLCLIENT_SESSION_PROP_SSL_CONNECTION_DOWNGRADE_TO
    C#/.NET: SessionProperties.SSLConnectionDowngradeTo
    JCSMP: SessionHandle.PROPERTIES.SSL_CONNECTION_DOWNGRADE_TO
    Java RTO: SessionHandle.PROPERTIES.SSL_CONNECTION_DOWNGRADE_TO
    JavaScript: 不适用
    Node.js: solace.SessionProperties.sslConnectionDowngradeTo | 指示在客户端身份验证后是否应将 SSL 连接降级。
    允许的 SSL 连接降级为属性的传输协议为:“PLAIN_TEXT”。此属性是可选的。 |

TLS/SSL 安全会话属性