Atom feed of this document
  

 调试PKI中间件

当你和OpenStack打交道时,如果接收到Invalid OpenStack Identity Credentials的消息,这在Grizzly版中是由从UUID令牌向PKI令牌转换中引起的。学习下如何修复此错误。

基于PKI令牌的验证模式依赖于来自身份服务的证书,而此证书是通过HTTP拿到的并存放在本地目录。此目录的具体位置是由signing_dir配置项所决定的。在你的服务的配置文件中,找到类似如下内容的一节:

[keystone_authtoken]
signing_dir = /var/cache/glance/api
auth_uri = http://控制器:5000/v2.0
identity_uri = http://控制器:35357
admin_tenant_name = service
admin_user = glance

检查的第一件事就是signing_dir ,事实上是看它是否存在,如果存在的话,检查其中的证书文件是否在:

$ ls -la /var/cache/glance/api/
total 24
drwx------. 2 ayoung root 4096 Jul 22 10:58 .
drwxr-xr-x. 4 root root 4096 Nov 7 2012 ..
-rw-r-----. 1 ayoung ayoung 1424 Jul 22 10:58 cacert.pem
-rw-r-----. 1 ayoung ayoung 15 Jul 22 10:58 revoked.pem
-rw-r-----. 1 ayoung ayoung 4518 Jul 22 10:58 signing_cert.pem

此目录包含了两个证书和一个令牌废弃列表。如果这些文件都不存在,你的服务就无法从身份服务中获取它们。要修复此问题,如下面所示,尝试和身份服务沟通确保它是正确的文件:

$ curl http://localhost:35357/v2.0/certificates/signing

此命令获取签名证书:

Certificate:
    Data:
        Version: 3 (0x2)
        Serial Number: 1 (0x1)
    Signature Algorithm: sha1WithRSAEncryption
        Issuer: C=US, ST=Unset, L=Unset, O=Unset, CN=www.example.com
        Validity
            Not Before: Jul 22 14:57:31 2013 GMT
            Not After : Jul 20 14:57:31 2023 GMT
        Subject: C=US, ST=Unset, O=Unset, CN=www.example.com

请注意,已过期的证书:

Not Before: Jul 22 14:57:31 2013 GMT
Not After : Jul 20 14:57:31 2023 GMT

令牌废弃列表会每分钟更新一次,但是证书不会。一个可能的问题是证书是错误的或者是废弃的。你可以删除这些文件,然后运行其它命令来满足你的服务器:它们按需获取。

身份服务日志须显示证书文件的访问记录。你要上调你的日志级别。在你的身份配置文件中设置 debug = Trueverbose = True ,然后重启身份服务。

(keystone.common.wsgi): 2013-07-24 12:18:11,461 DEBUG wsgi __call__
arg_dict: {}
(access): 2013-07-24 12:18:11,462 INFO core __call__ 127.0.0.1 - - [24/Jul/2013:16:18:11 +0000]
"GET http://localhost:35357/v2.0/certificates/signing HTTP/1.0" 200 4518

如果完成这些之后,文件还没有出现在你的目录中,它可能是下面原因的其中一种:

  • 你的服务配置错误,无法和身份服务通信。检查auth_portauth_host的值,然后如上面所示的那样通过cURL确保可以访问哪些服务。

  • 你的签名目录无法写入。使用命令chmod来变更权限,以让服务(POSIX)用户可以写入。通过sutouch来对变更做验证。

  • SELinux规则禁止访问目录。

当你使用基于Fedora/RHEL软件包时,若你选择的配置属性和标准的策略不匹配时,经常会遇到SELinux的问题。运行命令setenforce permissive。如果你有不同的做法,你须重新给目录打标签。如果你使用了 /var/cache/ 目录下的子目录,运行下面的命令:

# restorecon /var/cache/

如果你没有使用 /var/cache子目录,你须为你的服务更改signing_dir配置项然后重启。

返回 setenforce enforcing的设置,来确认你的变更解决了问题。

如果你的证书是按需获取的,PKI验证会正常工作。多数情况下,你试图正在执行的操作并不验证来自身份服务的令牌,所以你的用户的操作须切换为不同角色。

Questions? Discuss on ask.openstack.org
Found an error? Report a bug against this page


loading table of contents...