我们编写了一个puppet函数,它需要通过tls对服务器执行http get请求。 http请求直接从puppet master完成。远程服务器显然需要比我们的函数提供的更多的最新密码(我们使用ruby Net / Http库)。因此,远程服务器immedialty关闭连接(客户端Hello,[ACK],[FIN,ACK])
def http_client
uri = URI("https://#{@config['server']}")
http = Net::HTTP.new(uri.host, uri.port)
http.use_ssl = true
http.verify_mode = OpenSSL::SSL::VERIFY_NONE unless @config['vmssc_tls_verify']
http
end
我们试图从木偶大师那里获得相同的API,但是成功的是,CuRL使用的openssl版本与木偶使用的版本不同。
我们发现的差异在于curl中我们在SHA256中有32个密码,但是使用了puppet使用的Net / Http库,我们在SHA1中只有11个密码。 Puppet服务器正在运行jruby,所以我们尝试在openJDK中添加java加密扩展但没有成功。 我们还观察到/etc/puppetlabs/puppetserver/conf.d/puppetserver.conf文件中列出的密码不受尊重(因此我们得到了客户端在tcpdump中使用的密码列表):
# settings related to HTTP client requests made by Puppet Server
http-client: {
# A list of acceptable protocols for making HTTP requests
ssl-protocols: [
TLSv1.2,
]
# A list of acceptable cipher suites for making HTTP requests
cipher-suites: [
TLS_RSA_WITH_AES_256_CBC_SHA256,
TLS_RSA_WITH_AES_256_CBC_SHA,
TLS_RSA_WITH_AES_128_CBC_SHA256,
TLS_RSA_WITH_AES_128_CBC_SHA,
]
我们尝试将openJDK的版本升级到oracle JDK但没有成功。 我们使用Jruby和openJDK 8以及TLS_Version 1.2在puppetserver版本2.7.0上运行。
当puppetserver以原生ruby启动时,一切正常,我们已经得到了货物密码。我们不希望继续使用该配置来解决性能问题。