傀儡证书商店
Puppet certificate store
我有一个 Puppet Enterprise Master Server 2018.1.3,它应该通过 https 从 git-Repository 获取带有代码管理器的代码,其中 git 服务器的服务器证书由第三方 CA。
在正确配置所有 afaik 之后,我得到以下信息:
> puppet-code deploy --dry-run
Dry-run deploying all environments.
Errors while collecting a list of environments to deploy (exit code: 1).
ERROR -> Unable to determine current branches for Git source 'puppet'
(/etc/puppetlabs/code-staging/environments)
Original exception:
The SSL certificate is invalid
直接执行r10k
会产生类似的错误。这是有道理的,因为我还没有在任何地方安装第三方 CA 证书。
所以我想,r10k
最有可能运行 jruby 运行 java(我不知道 ruby),所以我将安装证书在 jvm 中:
keytool -import -file gitCA.cer -alias gitCA -keystore /opt/puppetlabs/server/apps/java/lib/jvm/java/jre/lib/security/cacerts -storepass changeit
但我仍然遇到同样的错误,也是在系统重启后,所以好的,这意味着 r10k
不使用 jruby 但 ruby,所以我将安装还有 OS 中的证书,将证书放在 /etc/pki/trust/anchors
下并调用 update-ca-certificates
(在 SLES12 上)。之后,我可以使用 wget
访问 git-Repo-URL 而不会出现任何证书错误,因此证书已正确安装在 OS 中,但即使如此系统重启后,我收到与 r10k
.
相同的错误
在对证书商店和 ruby 进行了大量的观察之后,我发现
export SSL_CERT_FILE=<path_to_cert>
修复r10k
:
的直接调用
> r10k deploy display --fetch ---
:sources:
- :name: :puppet
:basedir: "/etc/puppetlabs/code/environments"
:remote: https://xxx@git.xxx/git/puppet
:environments:
- develop
- master
- production
- puppet_test
但 puppet-code
仍然无法处理相同的错误消息。但是我想,显然我现在是 root
并且 puppet-code
是由用户 pe-puppet
执行的,所以我将导出命令放在 /etc/profile.local
文件中,所以它可以用于全部用户。
仍然无法正常工作。即使在系统重新启动并删除由用户 root
创建的 /opt/puppetlabs/server/data/puppetserver/r10k/
并直接调用 r10k
.
之后
第一个问题:为什么 r10k
有效,但 puppet-code
无效?
第二个问题:该证书的正确位置在哪里?
非常感谢
迈克尔
更新:27.AUG.2018
我试过这个:
sudo -H -u pe-puppet bash -c '/opt/puppetlabs/puppet/bin/r10k deploy display --fetch'
尽管我在 /etc/profile.local
文件中设置了 SSL_CERT_FILE
变量,但它不起作用。
但我通过在 /etc/environment
文件中设置变量使其工作。
但 puppet code
仍然无法正常工作。为什么?
所以,我成功了,但对解决方案不满意。
我在 /etc/puppetlabs/puppetserver/logback.xml
上打开调试日志记录,确认 puppet-code
确实在调用 r10k
:
2018-08-27T14:54:24.149+02:00 DEBUG [qtp462609859-78] [p.c.core] Invoking shell:
/opt/puppetlabs/bin/r10k deploy --config /opt/puppetlabs/server/data/code-manager/r10k.yaml --verbose warn display --format=json --fetch
2018-08-27T14:54:24.913+02:00 ERROR [qtp462609859-78] [p.c.app] Errors while collecting a list of environments to deploy (exit code: 1).
ERROR -> Unable to determine current branches for Git source 'puppet' (/etc/puppetlabs/code-staging/environments)
Original exception:
The SSL certificate is invalid
所以我用非常快速和肮脏的方式做到了:
cd /opt/puppetlabs/puppet/bin/
mv r10k r10k-bin
touch r10k
chmod +x r10k
vi r10k
和
#!/bin/bash
export SSL_CERT_FILE=<new_cert_path>
/opt/puppetlabs/puppet/bin/r10k-bin "$@"
现在可以使用了:
puppet:~ # puppet-code deploy --dry-run
Dry-run deploying all environments.
Found 5 environments.
但不开心,有什么更好的主意吗?
对于那些正在寻找此问题解决方案的人,请查看 Puppet Support Base 上的 post。
简单地说你有两个选择:
- 使用 Git 源而不是 HTTPS 源来引用 Puppetfile 中的存储库。此选项需要将 SSH 密钥添加到 Puppet master 和存储库。
- 将存储库的证书颁发机构 (CA) 证书添加到 /opt/puppetlabs/puppet/ssl/cert.pem.
中受信任的 CA 列表中
选项一:使用 Git 源而不是 HTTPS 源
要使用 Git 源从您的存储库部署代码,请在您的 Puppet master 上配置一个 SSH 私钥并在您的存储库上配置一个 public SSH 密钥:
在您的 Puppetfile 中,将对您的 Git 存储库的引用从 HTTPS 源更改为 Git 源:
例如,更改:
mod 'site_date', :git: 'https://example.com/user/site_data.git',
至:
mod 'site_data', :git: 'ssh://user@example.com:22/user/site_data.git',
配置您的 SSH 密钥。使用我们关于如何使用 PE 2018.1 的 SSH 私钥身份验证声明模块或数据内容的文档配置私钥。
注意:使用版本选择器为您的部署选择正确的文档版本。
配置 public 密钥的详细信息取决于 Git 存储库的配置方式。与您的 Git 存储库管理员联系。
选项二:添加受信任的 CA 证书
如果您无法指定 Git s
源,通过将 CA 证书添加到文件 /opt/puppetlabs/puppet/ssl/cert.pem.
,将您的存储库添加到代码管理器信任的 CA 列表中
将证书 (ca.pem) 文件传输到您的 CA 节点。
在 CA 节点上,将证书添加到代码管理器信任的 CA 列表中:cat ca.pem >> /opt/puppetlabs/puppet/ssl/cert.pem
代理运行不会恢复对 cert.pem 所做的更改,因为该文件不受 PE 管理,但升级到 PE 将覆盖该文件。升级 PE 后,必须再次将 CA 证书添加到 cert.pem。
我有一个 Puppet Enterprise Master Server 2018.1.3,它应该通过 https 从 git-Repository 获取带有代码管理器的代码,其中 git 服务器的服务器证书由第三方 CA。
在正确配置所有 afaik 之后,我得到以下信息:
> puppet-code deploy --dry-run
Dry-run deploying all environments.
Errors while collecting a list of environments to deploy (exit code: 1).
ERROR -> Unable to determine current branches for Git source 'puppet'
(/etc/puppetlabs/code-staging/environments)
Original exception:
The SSL certificate is invalid
直接执行r10k
会产生类似的错误。这是有道理的,因为我还没有在任何地方安装第三方 CA 证书。
所以我想,r10k
最有可能运行 jruby 运行 java(我不知道 ruby),所以我将安装证书在 jvm 中:
keytool -import -file gitCA.cer -alias gitCA -keystore /opt/puppetlabs/server/apps/java/lib/jvm/java/jre/lib/security/cacerts -storepass changeit
但我仍然遇到同样的错误,也是在系统重启后,所以好的,这意味着 r10k
不使用 jruby 但 ruby,所以我将安装还有 OS 中的证书,将证书放在 /etc/pki/trust/anchors
下并调用 update-ca-certificates
(在 SLES12 上)。之后,我可以使用 wget
访问 git-Repo-URL 而不会出现任何证书错误,因此证书已正确安装在 OS 中,但即使如此系统重启后,我收到与 r10k
.
在对证书商店和 ruby 进行了大量的观察之后,我发现
export SSL_CERT_FILE=<path_to_cert>
修复r10k
:
> r10k deploy display --fetch ---
:sources:
- :name: :puppet
:basedir: "/etc/puppetlabs/code/environments"
:remote: https://xxx@git.xxx/git/puppet
:environments:
- develop
- master
- production
- puppet_test
但 puppet-code
仍然无法处理相同的错误消息。但是我想,显然我现在是 root
并且 puppet-code
是由用户 pe-puppet
执行的,所以我将导出命令放在 /etc/profile.local
文件中,所以它可以用于全部用户。
仍然无法正常工作。即使在系统重新启动并删除由用户 root
创建的 /opt/puppetlabs/server/data/puppetserver/r10k/
并直接调用 r10k
.
第一个问题:为什么 r10k
有效,但 puppet-code
无效?
第二个问题:该证书的正确位置在哪里?
非常感谢
迈克尔
更新:27.AUG.2018
我试过这个:
sudo -H -u pe-puppet bash -c '/opt/puppetlabs/puppet/bin/r10k deploy display --fetch'
尽管我在 /etc/profile.local
文件中设置了 SSL_CERT_FILE
变量,但它不起作用。
但我通过在 /etc/environment
文件中设置变量使其工作。
但 puppet code
仍然无法正常工作。为什么?
所以,我成功了,但对解决方案不满意。
我在 /etc/puppetlabs/puppetserver/logback.xml
上打开调试日志记录,确认 puppet-code
确实在调用 r10k
:
2018-08-27T14:54:24.149+02:00 DEBUG [qtp462609859-78] [p.c.core] Invoking shell:
/opt/puppetlabs/bin/r10k deploy --config /opt/puppetlabs/server/data/code-manager/r10k.yaml --verbose warn display --format=json --fetch
2018-08-27T14:54:24.913+02:00 ERROR [qtp462609859-78] [p.c.app] Errors while collecting a list of environments to deploy (exit code: 1).
ERROR -> Unable to determine current branches for Git source 'puppet' (/etc/puppetlabs/code-staging/environments)
Original exception:
The SSL certificate is invalid
所以我用非常快速和肮脏的方式做到了:
cd /opt/puppetlabs/puppet/bin/
mv r10k r10k-bin
touch r10k
chmod +x r10k
vi r10k
和
#!/bin/bash
export SSL_CERT_FILE=<new_cert_path>
/opt/puppetlabs/puppet/bin/r10k-bin "$@"
现在可以使用了:
puppet:~ # puppet-code deploy --dry-run
Dry-run deploying all environments.
Found 5 environments.
但不开心,有什么更好的主意吗?
对于那些正在寻找此问题解决方案的人,请查看 Puppet Support Base 上的 post。
简单地说你有两个选择:
- 使用 Git 源而不是 HTTPS 源来引用 Puppetfile 中的存储库。此选项需要将 SSH 密钥添加到 Puppet master 和存储库。
- 将存储库的证书颁发机构 (CA) 证书添加到 /opt/puppetlabs/puppet/ssl/cert.pem. 中受信任的 CA 列表中
选项一:使用 Git 源而不是 HTTPS 源
要使用 Git 源从您的存储库部署代码,请在您的 Puppet master 上配置一个 SSH 私钥并在您的存储库上配置一个 public SSH 密钥:
在您的 Puppetfile 中,将对您的 Git 存储库的引用从 HTTPS 源更改为 Git 源:
例如,更改:
mod 'site_date', :git: 'https://example.com/user/site_data.git',
至:
mod 'site_data', :git: 'ssh://user@example.com:22/user/site_data.git',
配置您的 SSH 密钥。使用我们关于如何使用 PE 2018.1 的 SSH 私钥身份验证声明模块或数据内容的文档配置私钥。
注意:使用版本选择器为您的部署选择正确的文档版本。
配置 public 密钥的详细信息取决于 Git 存储库的配置方式。与您的 Git 存储库管理员联系。
选项二:添加受信任的 CA 证书
如果您无法指定 Git s
源,通过将 CA 证书添加到文件 /opt/puppetlabs/puppet/ssl/cert.pem.
将证书 (ca.pem) 文件传输到您的 CA 节点。
在 CA 节点上,将证书添加到代码管理器信任的 CA 列表中:cat ca.pem >> /opt/puppetlabs/puppet/ssl/cert.pem
代理运行不会恢复对 cert.pem 所做的更改,因为该文件不受 PE 管理,但升级到 PE 将覆盖该文件。升级 PE 后,必须再次将 CA 证书添加到 cert.pem。