在使用Debian的GitLab上,我遇到了自签名证书的问题。
在互联网上进行大量搜索后仔细阅读代码(我猜,这是最后的手段,FOSS很有帮助),我在gitlab-shell/lib/gitlab_net.rb
中发现以下几行让我...困惑。
if config.http_settings['self_signed_cert']
http.verify_mode = OpenSSL::SSL::VERIFY_NONE
end
关于我迄今为止遇到的各种问题的大多数Stack Overflow响应让我相信VERIFY_NONE,正如您所期望的那样,不会验证任何内容。根据我的阅读,VERIFY_PEER似乎是自签名的正确设置。
当我读到它时,感觉就像采取步骤来使用证书来保护我的连接,然后决定不使用它?这是一个错误,还是我误读了这个来源?
答案 0 :(得分:4)
gitlab-shell(在GitLab服务器上)必须通过HTTPS或SSH URL API与GitLab实例进行通信。
如果它是自签名证书,则在尝试访问这些GitLab URL时不希望出现任何错误/警告,因此SSL::VERIFY_NONE
。
但是,客户端(GitLab服务器之外)也使用相同的证书,使用浏览器中相同的GitLab HTTPS URL。 对于他们来说,只要将自签名证书安装在浏览器密钥库中,它就很有用 对于那些交易(客户到GitLab),证书将被“验证”。
OP Kheldar中的point's out Mislav's post:
OpenSSL希望在证书主题的散列名称以及以0开头的数字扩展名命名的文件中查找每个证书。
这意味着你不能只在目录中删除
My_Awesome_CA_Cert.pem
并期望它自动被选中 但是,OpenSSL附带了一个名为c_rehash
的实用程序,您可以在目录上调用该实用程序,以使用适当命名的符号链接索引所有证书。
(例如参见OpenSSL Verify location)
cd /some/where/certs
c_rehash .