使用StartSSL免费SSL证书为SubversionEdge添加受信任的https访问

以前搭建SVN服务器时一直是用纯手动添加svnserve服务命令行的方式做的,最近发现CollabNet推出了一款叫做SubversionEdge的整合SVN服务器一键安装程序,试了一下还是很方便的,自带一个web方式的管理界面,查日志啊,创建资源库之类的操作都可以以可视化的方式进行,很是方便!

SubversionEdge默认安装的是http方式的SVN访问方式,当然也包含https方式访问,为了提高网络传输安全性,准备尝试一下带SSL的http访问方式,在设置中勾上https访问方式直接重启就可以了,但是浏览器访问的时候会提示SSL证书错误,这是因为SubversionEdge的https使用的是自带默认的SSL证书,域名和自己架设的对不上号,当然就证书错误了,下面要做的就是申请一个正式的SSL证书修正这个错误!

SSL证书申请一般都是付费的,而且还不是非常便宜,搜索了一番发现GoDaddy上的SSL证书有一个促销产品,$4.99一年折合人民币不到40元,还算可以接受,不过继续搜索,发现一个叫StartSSL的网站提供申请一年的免费SSL证书,而且

StartSSL是StartCom公司旗下的SSL证书,貌似是现在唯一一家提供免费SSL证书服务并且被主流浏览器支持的免费SSL,包括Chrome、Firefox、IE等浏览器都可以正常识别StartSSL,任何个人都可以从StartSSL中申请到免费一年的SSL证书。

按照下面第一篇参考文章中的教程,很容易完成了SSL证书的申请,接下来就是配置SubversionEdge的内置Apache服务器为使用申请好的正式证书了,方法如官方Wiki中所述:

SSLCertificateFile    "/install-path/data/conf/server.crt"
SSLCertificateKeyFile "/install-path/data/conf/server.key"

替换安装位置对应的这两个文件为StartSSL颁发的对应文件后第一次启动服务浏览器一直loading…结果卡死最后超时失败,替换回原始自带的证书就没问题可以顺利启动,看来是证书有问题,果然,再次阅读Wiki后发现原来以非控制台的Web方式(无交互)启动Apache的话无法输入证书私钥需要的密码,也就是说需要无密码的私钥文件,好在这点可以通过openssl工具得到无密码的私钥文件:

openssl rsa -in protected.key -out server.key

执行此命令后会提示输入私钥密码,也就是申请证书时输入的那个,把新的无密码的私钥文件替换掉后,重启开启SubversionEdge服务就ok了,通过浏览器https访问资源库时也可以看到合法的证书了!

Update 1:

今天发现在Ubuntu Linux下通过svn命令行访问版本库的时候,提示类似如下信息:

Error validating server certificate for 'https://xxxxxxx':
 - The certificate is not issued by a trusted authority. Use the
   fingerprint to validate the certificate manually!
 - The certificate hostname does not match.
Certificate information:
 - Hostname: xxxxxxx
 - Valid: xxxxxxx
 - Issuer: xxxxxx
 - Fingerprint: xxxxxxxxx
(R)eject, accept (t)emporarily or accept (p)ermanently?

大意是说https服务器证书不是由受信任机构办法,使用指纹来手动识别证书,然后问是 拒绝、暂时接受还是永久接受,另外在Mac上用XCode自带的Organizer中的SVN版本库管理访问时也会提示类似的授权不受信任的信息,本来想永久接受就算了,后来想想虽然这证书没花钱吧,但也是正版证书,而且StartCom官方也说绝大部分浏览器都内置了支持,怎么就不可信了呢?

参考下面的第3个参考文章,很容易就查到了下面这个官方链接中关于Apache Web Server的额外证书设置:https://www.startssl.com/?app=21,也就是说,还是需要修改一下Subversion Edge自带Apache的配置!找到解决方法就开始修改,然后又发现自带Apache的配置文件被漂亮的重新“规划”了,分了好多include出来,好在根据之前的server.crt和server.key,很容易搜到了相关SSL的设置是在这个文件中:csvn\data\conf\csvn_main_httpd.conf,于是直接修改,先现在下来ca证书和class1的服务器中间证书放到conf下,然后在刚才提到的配置文件中的server.key和crt设置后加入下面这两段:

SSLCertificateChainFile “D:\csvn\data/conf/sub.class1.server.ca.pem”
SSLCACertificateFile “D:\csvn\data/conf/ca.pem”

重启svn服务后,发现依旧提示不受信任,于是停掉服务,再次查看.conf文件,发现刚刚修改的内容竟然被还原了!也就是说这个conf文件是由Subversion Edge管理的,每次都会重新生成,看来直接修改这个文件的路子行不通了。这点在这篇官方wiki中得到了确认:https://ctf.open.collab.net/sf/wiki/do/viewPage/projects.svnedge/wiki/MigrationPath,这里指出的是如果一定要修改Apache配置文件的话,应该直接修改httpd.conf,同时将相关内容的include文件拿掉并直接嵌入,也就是说httpd.conf文件只会在不存在时自动生成,而不会每次重置!

再深入研究后发现,其实只为添这两句证书配置的话,还是可以不用像wiki中提示的那样“大动干戈”的,因为在之前修改csvn_main_httpd.conf文件时,我注意到后面有一段内容正是Subversion Edge的Web Console(默认3343端口)里关于Server Settings里“Apache加密”项勾选后出现的Advanced Configuration中的内容,所以,只要简单的在Advanced Configuration弹出的小文本框最前加入上面那两句就可以了,修改完成后重启服务器,然后特别看了一下生成的配置文件,也确实加入了这两句,再次尝试svn访问就不会再提示不受信任了。
参考文章:

博主友情提示:

如您在评论中需要提及如QQ号、电子邮件地址或其他隐私敏感信息,欢迎使用>>博主专用加密工具v3<<处理后发布,原文只有博主可以看到。