OpenConnect (ocserv) 配置受AnyConnect客户端信任的证书链

标题略长,这并不是一个OpenConnect(ocserv)的完整配置教程,相关的教程网络上有很多。这篇主要是记录一下OpenConnect服务器配置中关于ssl证书的一个细节,就是如何消除那个烦人的“不受信任的服务器”提示。

不论是OpenConnect客户端还是AnyConnect客户端,如果使用自签证书,都会提示该服务器证书不可信,不同的是OpenConnect选择信任之后下次连接不再提示,自用影响不大。而AnyConnect就比较烦,每次链接都需要点掉那个提示才可以继续。这个问题归根结底在于我们是否使用正规CA签发的证书,理论上只要ocserv使用正规证书,就可以消除这个问题,但是发现很多教程包括官方文档都忽略了证书链这个关键点,导致包括我在内的很多用户用了正规证书任然有这个问题。有人认为使用AnyConnect客户端兼容OpenConnect就一定会出现这个问题,甚至写进了教程广泛传播,这是个误会。和我们熟悉的apache不同,ocserv要求必须合并服务器证书中间证书和根证书来保证证书链完整。为方便后面描述,先简单说一下一套完整的ssl证书通常包含的文件,不同CA颁发的文件名称可能略有差别,但必要的文件不会有差,具体各个文件有什么作用以及原理不赘述:

ca.pem – CA的根证书
bundle.crt(也有的叫做sub.class1...或 intermediate...)– 中间证书
ssl.crt – 服务器证书
ssl.key – 证书对应的私钥

前两个一般是在您申请证书的CA官网上提供下载,后两个是CA发给您自己的文件。这里假定您已经成功从CA申请到了证书,得到了上述4个文件。注意如果您当前的证书文件已在使用当中,请务必先停掉ocserv服务再进行以下操作,否则可能出现无法启动的问题。首先如果您拿到的ssl.key是加密的,需要先将它解密为明文。

openssl rsa -in ssl.key -out ssl.key

将ssl.key重命名为server-key.pem

mv ssl.key server-key.pem

按顺序合并服务器证书,中间证书,根证书得到server-cert.pem

cat ssl.crt bundle.crt ca.pem> server-cert.pem

别忘了修改权限为只读

chmod 400 server-cert.pem server-key.pem

修改ocserv的配置文件修/etc/ocserv/ocserv.conf(已您的实际路径为准)
找到以下2行,取消注释,并修改为实际路径和文件名

server-cert = /etc/ocserv/server-cert.pem
server-key = /etc/ocserv/server-key.pem

如果其他配置没有问题的话,保存并重启ocserv,新证书即可生效。
写的比较仓促,如有问题欢迎讨论。



知识共享许可协议
除非注明,本博客文章均为原创
并采用知识共享署名-非商业性使用 4.0 国际许可协议进行许可。转载请以URL链接形式标注源地址。

标签: none

已有 3 条评论

  1. glegoo glegoo

    这几天一直在研究这个证书登陆方式,看了好多的配置教程也没有提到关于证书的位置,配置,配置文件对应链和本地客户端如何导入证书的方法。看得头晕。希望大师指点下方法。谢谢。

    1. 证书的路径可以自定义,只要在配置文件里设置好证书所在的实际路径就行,至于配置步骤和客户端导入问题,得另开一篇才能说清楚,不过网上已有不少现成的教程,明天我找找我当时参考的资料再回复你,也许有帮助

    2. 找到了当时参考的一篇教程, http://blog.dazzyd.org/blog/ocserv-letsencrypt-certificate/ ,还算详细, 如果有问题也很乐意交流讨论, 希望有帮助

添加新评论