我们有一个私有的Gitlab实例,我们计划在外部公开,为了确保只有员工可以连接到网站,我已经推出了一个带有用户证书的小型内部CA,以便相互授权。 当我打开它ssl_verify_client在web服务器端做预期的,如果没有证书(或无效的证书)出现400返回错误,如果提交了有效的证书,然后页面加载正确。
奇怪的是,它打破了Gitlab根据ssh密钥识别用户的能力。
例:
网站conf的片段:
ssl_certificate /usr/local/nginx/config/gitlab.chained.crt; ssl_certificate_key /usr/local/nginx/config/gitlab.key; ssl_client_certificate /usr/local/nginx/config/Root_CA.crt; ssl_ciphers HIGH+aRSA:!kSRP; ssl_prefer_server_ciphers on; ssl_dhparam /usr/local/nginx/config/dh2048.pem; ssl_protocols TLSv1 TLSv1.1 TLSv1.2; # ssl_verify_client on; ssl_verify_depth 2;
用户框:
% ssh git@gitlab PTY allocation request failed on channel 0 Welcome to GitLab, [username]! Connection to gitlab.domain.local closed.
网站conf的片段:
ssl_certificate /usr/local/nginx/config/gitlab.chained.crt; ssl_certificate_key /usr/local/nginx/config/gitlab.key; ssl_client_certificate /usr/local/nginx/config/Root_CA.crt; ssl_ciphers HIGH+aRSA:!kSRP; ssl_prefer_server_ciphers on; ssl_dhparam /usr/local/nginx/config/dh2048.pem; ssl_protocols TLSv1 TLSv1.1 TLSv1.2; ssl_verify_client on; ssl_verify_depth 2;
用户框:
% ssh git@gitlab PTY allocation request failed on channel 0 Welcome to GitLab, Anonymous! Connection to gitlab.domain.local closed.
有人可以解释这是怎么发生的,以及如何解决它? 我不知道,因为他们完全不同的服务? 除非有我丢失的东西,壳处理SSH是通过nginx连接失败。 说实话,我并不完全理解gitlab体系结构如何与ssh,git和gitlab-shell之间的整合。 也许如果我把这只适用于外部连接,那么它会工作? 在我在黑暗中拍摄之前,将不胜感激投入。
好的,那肯定是基于gitlab-shell日志中这些条目发生了什么:
E, [2014-02-18T12:12:46.275674 #20681] ERROR -- : API call <GET https://gitlab.premiumsoftware.co.za//api/v3/internal/discover?key_id=2> failed: 400 => <<html> <head><title>400 No required SSL certificate was sent</title></head> <body bgcolor="white"> <center><h1>400 Bad Request</h1></center> <center>No required SSL certificate was sent</center> <hr><center>nginx</center> </body> </html> >.
问题是,给它一个客户端证书来处理或修改nginx conf是否更好,因此它只需要来自外部IP的HTTPS? 我认为后者是更好的,否则有一个SSL连接开销是不必要的,因为它只是在框之间的服务。
我写了一篇关于如何解决问题的博客文章,你可以在这里阅读。
作为一个总结,我设置了一个nginx服务器来处理外部的HTTPS连接(即浏览Web界面的用户)和第二个只监听本地主机的HTTP服务器。 然后,我configurationgitlab-shell使用连接到http://localhost/因此绕过了HTTPS证书错误的问题。
将我们的gitlab服务器移动到一个新的域后,我有同样的错误。 编辑/home/git/gitlab-shell/config.yml后,我解决了这个问题
改变的设置是靠近文件顶部的gitlab_url: "https://mynewdomain.com/" 。