MySQL 企业加密允许您限制密钥的长度,以满足您的安全要求,同时平衡资源使用情况。您还可以配置 MySQL 8.0.30 中的 component_enterprise_encryption
组件提供的函数,以支持对由遗留 openssl_udf
共享库函数生成的内容的解密和验证。
默认情况下,MySQL 8.0.30 中的 component_enterprise_encryption
组件提供的函数不解密由遗留函数生成的加密文本,也不验证签名。这些组件函数假设加密文本使用 RSAES-OAEP 填充方案,签名使用 RSASSA-PSS 签名方案。然而,遗留函数生成的加密文本使用 RSAES-PKCS1-v1_5 填充方案,签名使用 RSASSA-PKCS1-v1_5 签名方案。
如果您想让组件函数支持 MySQL 8.0.30 之前的遗留函数生成的内容,请将组件的系统变量 enterprise_encryption.rsa_support_legacy_padding
设置为 ON
。该系统变量在组件安装时可用。当您将其设置为 ON
时,组件函数首先尝试解密或验证内容,假设它具有正常的方案。如果不成功,它们还将尝试解密或验证内容,假设它具有遗留函数使用的方案。这种行为不是默认行为,因为它增加了无法解密或验证内容的处理时间。如果您不处理遗留函数生成的内容,请将系统变量留在默认的 OFF
。
MySQL 企业加密的密钥生成函数所需的 CPU 资源随着密钥长度的增加而增加。对于某些安装,这可能会导致不可接受的 CPU 使用情况,如果应用程序频繁生成过长的密钥。
OpenSSL 指定了所有密钥的最小长度为 1024 位。OpenSSL 还指定了 RSA 密钥的最大长度为 16384 位,DSA 密钥的最大长度为 10000 位,DH 密钥的最大长度为 10000 位。
从 MySQL 8.0.30 开始,component_enterprise_encryption
组件提供的函数具有 2048 位的 RSA 密钥最小长度,这与当前的最佳实践相符。该组件的系统变量 enterprise_encryption.maximum_rsa_key_size
指定了最大密钥大小,默认为 4096 位。你可以将其更改为允许 OpenSSL 允许的最大长度,16384 位。
对于 MySQL 8.0.30 之前的版本,openssl_udf
共享库提供的遗留函数默认使用 OpenSSL 的最小和最大限制。如果最大值太高,你可以使用以下系统变量指定较低的最大密钥长度:
-
MYSQL_OPENSSL_UDF_DSA_BITS_THRESHOLD
:create_asymmetric_priv_key()
的 DSA 密钥最大长度(以位为单位)。该变量的最小和最大值分别为 1024 和 10000。 -
MYSQL_OPENSSL_UDF_RSA_BITS_THRESHOLD
:create_asymmetric_priv_key()
的 RSA 密钥最大长度(以位为单位)。该变量的最小和最大值分别为 1024 和 16384。 -
MYSQL_OPENSSL_UDF_DH_BITS_THRESHOLD
:create_dh_parameters()
的最大密钥长度(以位为单位)。该变量的最小和最大值分别为 1024 和 10000。
要使用这些环境变量,请在启动服务器的进程环境中设置它们。如果设置了,这些值将优先于 OpenSSL 强加的最大密钥长度。例如,要将 DSA 和 RSA 密钥的最大长度设置为 4096 位,请设置这些变量:
export MYSQL_OPENSSL_UDF_DSA_BITS_THRESHOLD=4096
export MYSQL_OPENSSL_UDF_RSA_BITS_THRESHOLD=4096
示例使用 Bourne shell 语法。其他 shell 的语法可能不同。