获取OIDC身份提供商的指纹
当您在IAM中创建OIDC身份提供商时,IAM需要获取外部身份提供商(IdP)JWKS端点的顶级中间CA证书的指纹。指纹是指该CA证书的签名,当您创建IAM OIDC身份提供商时,表示您信任对应外部身份提供商验证的身份,并允许它访问您的华为云账号。IAM使用CA证书的指纹,这样您便可以信任由该CA签发的、且具有与JWKS域名相同的任何终端实体证书。CA证书的有效期一般比较长,在CA证书有效期内,可以允许您经常轮转外部身份提供商的终端实体证书,而无需在IAM中更新身份提供商的信任关系。
- IAM使用其受信任的根证书颁发机构(CA)库来保护与OIDC身份提供商之间的通信,并通过这些CA验证JSON Web Key Set(JWKS)端点的TLS证书。如果你的OIDC身份提供商使用的证书不是由这些受信任的CA之一签发的,那么我们将使用你在身份提供商配置中设置的指纹(thumbprint)来保障通信安全。
- IAM自动获取指纹时,默认是取JWKS端点证书链中的最后一本证书进行计算的。一般来说,JWKS端点的证书链的最后一本证书便是顶级中间CA证书,不过这取决于外部OIDC身份提供商的具体实现。在一些特殊场景中,例如:证书链中只有一本终端实体证书、或者证书链最后一本为根CA证书,那么最后得到的指纹分别便是这一本终端实体证书和根CA证书的。
操作步骤
如果您获得的指纹与您在IAM OIDC身份提供商详细信息中看到的指纹不匹配,则不应使用该OIDC提供商。此时,您应该删除在IAM中已经创建OIDC提供商,等待一段时间后再次尝试创建OIDC提供商,如果第二次尝试后指纹仍然不匹配,你可以提交工单联系IAM。
- 您需要自行安装OpenSSL工具,然后才能获取OIDC身份提供商的指纹。您可使用安装好的OpenSSL下载OIDC身份提供商的证书链并生成证书链中最后一本证书的指纹。注意:IAM不提供OpenSSL工具的安装教程,请自行在网上搜索教程安装。
- 先获取OIDC身份提供商的URL(例如:https://www.idpserver.com),然后添加 /.well-known/openid-configuration以构成OIDC发现文档的URL(例如:https://www.idpserver.com/.well-known/openid-configuration)。
- 使用浏览器打开OIDC发现文档URL(注意:您需要将www.idpserver.com替换为真实的外部身份提供商的URL),在返回的JSON格式的内容中找到里面的"jwks_uri",OIDC发现文档示例如下:
{ "issuer": "https://accounts.example.com", "authorization_endpoint": "https://www.idpserver.com/oauth2/v3/authorize", "token_endpoint": "https://www.idpserver.com/oauth2/v3/token", "revocation_endpoint": "https://www.idpserver.com/oauth2/v3/revoke", "jwks_uri": "https://www.idpserver.com/oauth2/v3/certs", ...... } - 使用命令行工具运行以下OpenSSL命令:
openssl s_client -servername www.idpserver.com -showcerts -connect www.idpserver.com: 443
- 在命令窗口中向上滚动,直至看到类似于下面示例的证书。如果您看到多个证书,请找到显示的最后一个证书(在命令输出底部)。一般来说,最后这一本证书就是证书链中的顶级中间CA证书,不过这取决于具体的外部OIDC身份提供商,IAM默认获取的用于计算指纹的证书就是证书链中的最后一本证书。
-----BEGIN CERTIFICATE----- BASE64编码的证书 -----END CERTIFICATE-----
复制证书(包括 -----BEGIN CERTIFICATE----- 和 -----END CERTIFICATE----- 行)并将其粘贴到文本文件中。然后使用文件名certificate.crt保存该文件。
JWKS URL的证书链必须以包含JWKS域名的终端实体证书开始,可以包含任何中间证书,然后以顶级中间CA证书或者根CA证书结尾。如果证书链顺序不同、包含重复证书或其他证书,您将在IAM中创建OIDC身份提供商失败,请修改服务器返回的证书链以解决错误。
- 使用命令行工具运行以下OpenSSL命令:
openssl x509 -in certificate.crt -fingerprint -sha256 -noout
- 您的命令行工具将显示类似于以下示例的证书指纹:
SHA256 Fingerprint=29: 60: 3B: 04:B1:E6: 78: 29:DC:A1: 84:A5:CB:B0: 87: 08: 09: 23: 40: 73: 27: 8C: 69: 07:A3: 5F:7E:BC:DE:D7: 21: 4B
- 然后去掉冒号,并转成小写,得到最终指纹如下:
29603b04b1e67829dca184a5cbb0870809234073278c6907a35f7ebcded7214b