Atom feed of this document
  

 证书的PKI

PKI代表的是公钥基础设施。令牌均是文档,使用X509标准签署加密。为了能够正常的工作,令牌的生成需要一个公有/私有 密钥对。公钥必须签名到X509证书中,且证书所使用动签名必须能作为证书颁发(CA)来用。这些文件既可以使用 keystone-manage工具来生成,也可以使用外部工具生成。文件的位置须放在上面章节中所指定的身份服务配置文件keystone.conf的顶端。另外,私钥须保证只能让运行在身份服务的系统用户只读。

[警告]警告

证书可以让所有的用户去读取,但是私钥不可以。私钥只能让打算签名令牌的账户读取。当使用keystone-manage pki_setup命令生成文件时,你最好是运行在PKI用户名下。如果你以root运行的keystone-manage,你可以为其添加参数--keystone-user--keystone-group从而为keystone设置用户名和组。

指定到哪里去读取证书在配置文件中[signing]一节设置,配置的值是:

  • certfile - 用于验证令牌的证书位置。默认是/etc/keystone/ssl/certs/signing_cert.pem

  • keyfile - 用于签名令牌的私钥位置。默认是/etc/keystone/ssl/private/signing_key.pem

  • ca_certs - 颁发上述证书的证书位置。默认是/etc/keystone/ssl/certs/ca.pem

  • ca_key - CA使用的私钥位置。默认是/etc/keystone/ssl/private/cakey.pem

  • key_size - 默认是 2048

  • valid_days - 默认是 3650

  • cert_subject - 证书主题(自动生成的证书),针对令牌签名。默认是/C=US/ST=Unset/L=Unset/O=Unset/CN=www.example.com

当使用命令keystone-manage pki_setup生成证书时,会用到ca_key, key_size, 以及 valid_days的配置项。

如果不使用命令keystone-manage pki_setup 来生成证书,或者你提供自己的证书,这三个值是不需要设置的。

如果在keystone的配置中的[token]一节设置了 provider=keystone.token.providers.uuid.Provider,那么典型的令牌看起来是这样53f7f6ef0cc344b5be706bcc8b1479e1。如果是provider=keystone.token.providers.pki.Provider的话,典型的令牌是很长的字符,例如:

MIIKtgYJKoZIhvcNAQcCoIIKpzCCCqMCAQExCTAHBgUrDgMCGjCCCY8GCSqGSIb3DQEHAaCCCYAEggl8eyJhY2Nlc3MiOiB7InRva2VuIjogeyJpc3N1ZWRfYXQiOiAiMjAxMy0wNS0z
MFQxNTo1MjowNi43MzMxOTgiLCAiZXhwaXJlcyI6ICIyMDEzLTA1LTMxVDE1OjUyOjA2WiIsICJpZCI6ICJwbGFjZWhvbGRlciIsICJ0ZW5hbnQiOiB7ImRlc2NyaXB0aW9uIjogbnVs
bCwgImVuYWJsZWQiOiB0cnVlLCAiaWQiOiAiYzJjNTliNGQzZDI4NGQ4ZmEwOWYxNjljYjE4MDBlMDYiLCAibmFtZSI6ICJkZW1vIn19LCAic2VydmljZUNhdGFsb2ciOiBbeyJlbmRw
b2ludHMiOiBbeyJhZG1pblVSTCI6ICJodHRwOi8vMTkyLjE2OC4yNy4xMDA6ODc3NC92Mi9jMmM1OWI0ZDNkMjg0ZDhmYTA5ZjE2OWNiMTgwMGUwNiIsICJyZWdpb24iOiAiUmVnaW9u
T25lIiwgImludGVybmFsVVJMIjogImh0dHA6Ly8xOTIuMTY4LjI3LjEwMDo4Nzc0L3YyL2MyYzU5YjRkM2QyODRkOGZhMDlmMTY5Y2IxODAwZTA2IiwgImlkIjogIjFmYjMzYmM5M2Y5
ODRhNGNhZTk3MmViNzcwOTgzZTJlIiwgInB1YmxpY1VSTCI6ICJodHRwOi8vMTkyLjE2OC4yNy4xMDA6ODc3NC92Mi9jMmM1OWI0ZDNkMjg0ZDhmYTA5ZjE2OWNiMTgwMGUwNiJ9XSwg
ImVuZHBvaW50c19saW5rcyI6IFtdLCAidHlwZSI6ICJjb21wdXRlIiwgIm5hbWUiOiAibm92YSJ9LCB7ImVuZHBvaW50cyI6IFt7ImFkbWluVVJMIjogImh0dHA6Ly8xOTIuMTY4LjI3
LjEwMDozMzMzIiwgInJlZ2lvbiI6ICJSZWdpb25PbmUiLCAiaW50ZXJuYWxVUkwiOiAiaHR0cDovLzE5Mi4xNjguMjcuMTAwOjMzMzMiLCAiaWQiOiAiN2JjMThjYzk1NWFiNDNkYjhm
MGU2YWNlNDU4NjZmMzAiLCAicHVibGljVVJMIjogImh0dHA6Ly8xOTIuMTY4LjI3LjEwMDozMzMzIn1dLCAiZW5kcG9pbnRzX2xpbmtzIjogW10sICJ0eXBlIjogInMzIiwgIm5hbWUi
OiAiczMifSwgeyJlbmRwb2ludHMiOiBbeyJhZG1pblVSTCI6ICJodHRwOi8vMTkyLjE2OC4yNy4xMDA6OTI5MiIsICJyZWdpb24iOiAiUmVnaW9uT25lIiwgImludGVybmFsVVJMIjog
Imh0dHA6Ly8xOTIuMTY4LjI3LjEwMDo5MjkyIiwgImlkIjogIjczODQzNTJhNTQ0MjQ1NzVhM2NkOTVkN2E0YzNjZGY1IiwgInB1YmxpY1VSTCI6ICJodHRwOi8vMTkyLjE2OC4yNy4x
MDA6OTI5MiJ9XSwgImVuZHBvaW50c19saW5rcyI6IFtdLCAidHlwZSI6ICJpbWFnZSIsICJuYW1lIjogImdsYW5jZSJ9LCB7ImVuZHBvaW50cyI6IFt7ImFkbWluVVJMIjogImh0dHA6
Ly8xOTIuMTY4LjI3LjEwMDo4Nzc2L3YxL2MyYzU5YjRkM2QyODRkOGZhMDlmMTY5Y2IxODAwZTA2IiwgInJlZ2lvbiI6ICJSZWdpb25PbmUiLCAiaW50ZXJuYWxVUkwiOiAiaHR0cDov
LzE5Mi4xNjguMjcuMTAwOjg3NzYvdjEvYzJjNTliNGQzZDI4NGQ4ZmEwOWYxNjljYjE4MDBlMDYiLCAiaWQiOiAiMzQ3ZWQ2ZThjMjkxNGU1MGFlMmJiNjA2YWQxNDdjNTQiLCAicHVi
bGljVVJMIjogImh0dHA6Ly8xOTIuMTY4LjI3LjEwMDo4Nzc2L3YxL2MyYzU5YjRkM2QyODRkOGZhMDlmMTY5Y2IxODAwZTA2In1dLCAiZW5kcG9pbnRzX2xpbmtzIjogW10sICJ0eXBl
IjogInZvbHVtZSIsICJuYW1lIjogImNpbmRlciJ9LCB7ImVuZHBvaW50cyI6IFt7ImFkbWluVVJMIjogImh0dHA6Ly8xOTIuMTY4LjI3LjEwMDo4NzczL3NlcnZpY2VzL0FkbWluIiwg
InJlZ2lvbiI6ICJSZWdpb25PbmUiLCAiaW50ZXJuYWxVUkwiOiAiaHR0cDovLzE5Mi4xNjguMjcuMTAwOjg3NzMvc2VydmljZXMvQ2xvdWQiLCAiaWQiOiAiMmIwZGMyYjNlY2U4NGJj
YWE1NDAzMDMzNzI5YzY3MjIiLCAicHVibGljVVJMIjogImh0dHA6Ly8xOTIuMTY4LjI3LjEwMDo4NzczL3NlcnZpY2VzL0Nsb3VkIn1dLCAiZW5kcG9pbnRzX2xpbmtzIjogW10sICJ0
eXBlIjogImVjMiIsICJuYW1lIjogImVjMiJ9LCB7ImVuZHBvaW50cyI6IFt7ImFkbWluVVJMIjogImh0dHA6Ly8xOTIuMTY4LjI3LjEwMDozNTM1Ny92Mi4wIiwgInJlZ2lvbiI6ICJS
ZWdpb25PbmUiLCAiaW50ZXJuYWxVUkwiOiAiaHR0cDovLzE5Mi4xNjguMjcuMTAwOjUwMDAvdjIuMCIsICJpZCI6ICJiNTY2Y2JlZjA2NjQ0ZmY2OWMyOTMxNzY2Yjc5MTIyOSIsICJw
dWJsaWNVUkwiOiAiaHR0cDovLzE5Mi4xNjguMjcuMTAwOjUwMDAvdjIuMCJ9XSwgImVuZHBvaW50c19saW5rcyI6IFtdLCAidHlwZSI6ICJpZGVudGl0eSIsICJuYW1lIjogImtleXN0
b25lIn1dLCAidXNlciI6IHsidXNlcm5hbWUiOiAiZGVtbyIsICJyb2xlc19saW5rcyI6IFtdLCAiaWQiOiAiZTVhMTM3NGE4YTRmNDI4NWIzYWQ3MzQ1MWU2MDY4YjEiLCAicm9sZXMi
OiBbeyJuYW1lIjogImFub3RoZXJyb2xlIn0sIHsibmFtZSI6ICJNZW1iZXIifV0sICJuYW1lIjogImRlbW8ifSwgIm1ldGFkYXRhIjogeyJpc19hZG1pbiI6IDAsICJyb2xlcyI6IFsi
YWRiODM3NDVkYzQzNGJhMzk5ODllNjBjOTIzYWZhMjgiLCAiMzM2ZTFiNjE1N2Y3NGFmZGJhNWUwYTYwMWUwNjM5MmYiXX19fTGB-zCB-AIBATBcMFcxCzAJBgNVBAYTAlVTMQ4wDAYD
VQQIEwVVbnNldDEOMAwGA1UEBxMFVW5zZXQxDjAMBgNVBAoTBVVuc2V0MRgwFgYDVQQDEw93d3cuZXhhbXBsZS5jb20CAQEwBwYFKw4DAhowDQYJKoZIhvcNAQEBBQAEgYCAHLpsEs2R
nouriuiCgFayIqCssK3SVdhOMINiuJtqv0sE-wBDFiEj-Prcudqlz-n+6q7VgV4mwMPszz39-rwp+P5l4AjrJasUm7FrO-4l02tPLaaZXU1gBQ1jUG5e5aL5jPDP08HbCWuX6wr-QQQB
SrWY8lF3HrTcJT23sZIleg==

 由外部CA颁发的注册证书

你可以使用由外部CA所颁发动注册证书来取代keystone-manage生成的证书。然而,由外部CA颁发的证书须满足下列条件:

  • 所有的证书和密钥文件必须是增强保密邮件(PEM)格式

  • 私钥文件必须是没有被密码保护的

当使用由外部CA颁发的注册证书时,你无需指定key_size, valid_days, 和 ca_password,它们将会被忽略。

使用由外部CA颁发的注册证书的基本工作流涉及:

  1. 从外部CA请求注册证书

  2. 如果有需要的话,将证书和私钥转换为PEM

  3. 安装外部注册证书

 从一个外部CA请求一个注册证书

其中从外部CA请求注册证书的一个办法是使用 OpenSSL 命令行来第一次生成一个 PKCS #10 证书请求语法(CRS)。

创建一个证书请求配置文件。例如,创建如下cert_req.conf文件:

[ req ]
default_bits            = 1024
default_keyfile         = keystonekey.pem
default_md              = sha1

prompt                  = no
distinguished_name      = distinguished_name

[ distinguished_name ]
countryName             = US
stateOrProvinceName     = CA
localityName            = Sunnyvale
organizationName        = OpenStack
organizationalUnitName  = Keystone
commonName              = Keystone Signing
emailAddress            = keystone@openstack.org

然后用OpenSSL 命令行生成一个CRS。不要为生成的私钥加密,必须使用-nodes属性。

例如:

$ openssl req -newkey rsa:1024 -keyout signing_key.pem -keyform PEM \
  -out signing_cert_req.pem -outform PEM -config cert_req.conf -nodes

如果一切顺利的话,你会得到signing_cert_req.pemsigning_key.pem。发送signing_cert_req.pem给你的CA来请求一个令牌注册证书,且确保所询问动证书是PEM格式。还有,确保你信任的CA证书链也是PEM格式。

 安装外部签名证书

假设你已经拥有下列内容项:

  • signing_cert.pem - (Keystone token) PEM格式的这册证书

  • signing_key.pem - 对应的(非加密) PEM格式的私钥

  • cacert.pem -PEM格式的信任CA证书链

复制上述内容到你的证书目录。例如:

# mkdir -p /etc/keystone/ssl/certs
# cp signing_cert.pem /etc/keystone/ssl/certs/
# cp signing_key.pem /etc/keystone/ssl/certs/
# cp cacert.pem /etc/keystone/ssl/certs/
# chmod -R 700 /etc/keystone/ssl/certs
[注意]注意

确保证书目录之用root可访问:

[注意]注意

如果在第一次运行keystone-manage pki_setup之后则可改进复制私钥和证书文件的过程,因为此命令会创建其它需要的文件,诸如index.txtserial文件。

同样,当拷贝必要的文件到不同的服务器,用来复制功能的话,文件的整个目录也是必要的,不仅仅是私钥和证书文件。

如果你的证书目录不是默认的/etc/keystone/ssl/certs,请在配置文件的[signing]一节也做相应的修改。

 换出过期的签名证书

下面的步骤详细说明了如何换出过期的签名证书,还无须中断。

  1. 生成新的签名密钥。

  2. 生成新的证书请求。

  3. 利用已有的CA签名新的证书来生成新的signing_cert

  4. 将新的signing_cert附加到旧的signing_cert,要确保旧的证书在文件的第一行。

  5. 从所有的主机中删除所有的签名证书,强制OpenStack计算下载新的signing_cert

  6. 将旧的签名密钥替换为新的签名密钥。在signing_cert文件中移动新的签名证书到旧的之上。

  7. 在旧的证书过期之后,你就可以从文件中将旧的签名证书安全的删除掉了。

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


loading table of contents...