Link Search Menu Expand Document Documentation Menu

客户端证书身份验证

在从证书颁发机构 (CA) 获取您自己的证书或使用 OpenSSL 生成您自己的证书后,您可以开始配置 OpenSearch 以使用客户端证书对用户进行身份验证。

客户端证书认证比仅使用基本认证(用户名和密码)提供更多的安全优势。因为客户端证书认证需要客户端证书及其私钥(通常由用户持有),所以它不易受到恶意个人试图猜测用户密码的暴力破解攻击。

客户端证书认证的另一个优点是,您可以将其与基本认证一起使用,提供两层安全保护。

启用客户端证书认证

要启用客户端证书认证,您必须首先在 opensearch.yml 中将 clientauth_mode 设置为 OPTIONALREQUIRE

plugins.security.ssl.http.clientauth_mode: OPTIONAL

接下来,在 config.ymlclient_auth_domain 部分启用客户端证书认证。

clientcert_auth_domain:
  description: "Authenticate via SSL client certificates"
  http_enabled: true
  transport_enabled: true
  order: 1
  http_authenticator:
    type: clientcert
    config:
      username_attribute: cn #optional, if omitted DN becomes username
    challenge: false
  authentication_backend:
    type: noop

为证书的通用名称分配角色

您现在可以将证书的通用名称 (CN) 分配给一个角色。此步骤要求您识别证书的 CN 以及要分配给它的角色。要查看所有预定义 OpenSearch 角色的列表,请参阅预定义角色。首先定义一个角色,然后将证书的 CN 映射到该角色。

确定要将哪个角色映射到证书的 CN 后,您可以使用OpenSearch Dashboardsroles_mapping.ymlREST API 来映射角色。以下示例使用 REST API 将 CN CLIENT1 映射到角色 readall

请求示例

PUT _plugins/_security/api/rolesmapping/readall
{
  "backend_roles" : ["sample_role" ],
  "hosts" : [ "example.host.com" ],
  "users" : [ "CLIENT1" ]
}

示例响应

{
  "status": "OK",
  "message": "'readall' updated."
}

将角色映射到客户端证书的 CN 后,您就可以使用这些凭据连接到您的集群了。

下面的代码示例使用 Python requests 库连接到本地 OpenSearch 集群,并向 movies 索引发送 GET 请求。

import requests
import json
base_url = 'https://:9200/'
headers = {
  'Content-Type': 'application/json'
}
cert_file_path = "/full/path/to/client-cert.pem"
key_file_path = "/full/path/to/client-cert-key.pem"
root_ca_path = "/full/path/to/root-ca.pem"

# Send the request.
path = 'movies/_doc/3'
url = base_url + path
response = requests.get(url, cert = (cert_file_path, key_file_path), verify=root_ca_path)
print(response.text)

在 Docker 中使用证书

虽然我们建议使用 ODFE 的 tarball 安装来测试客户端证书认证配置,但您也可以使用其他任何安装类型。有关使用 Docker 安全功能的说明,请参阅配置基本安全设置

剩余 350 字符

有问题?

想贡献吗?