今天遇到个实际的需求,最后决定把某个远程内网的虚拟机上的测试服务器给映射到公网上来,想到多年前就用过OpenVPN来做这个事情,所以翻看了一下http://flashing.iteye.com/blog/575402 以前的文章,按说照做即可,结果很悲桑的发现...things changed~
其实主要原因是Centos 7移除了Openssl的MD5支持(听了一年关于centos7的各种吐槽,但是自己没实际用,这马上就掉到坑里了),但是windows/ubuntu(使用14.04LTS测试),openssl仍然默认以md5作为散列算法并且可以正确识别md5散列算法,所以就悲剧了,只有cenots7不好用。关键是这个错误是大错误被小错误还掩盖了一下,所以很难被发现。
错误关键词:
A: VERIFY ERROR: depth=1, error=certificate is not yet valid
or error 9 at 1 depth lookup:certificate is not yet valid
B: VERIFY ERROR: depth=0, error=certificate signature failure
C: error 7 at 0 depth lookup:certificate signature failure
先把这些给装上:
sudo yum update
sudo yum install -y wget ntp ntpdate openvpn easy-rsa bridge-utils
解决A:
首先错误A是因为centos7默认安装(没有桌面)的情况下timezone没设置对并且时间没有校对,导致服务器时间还没到证书的签名时间,所以需要从新设置一下timezone并校对时间:
sudo timedatectl set-timezone Asia/Shanghai
sudo ntpdate time.windows.com&
sudo systemctl enable ntpd
sudo systemctl start ntpd
sudo timedatectl set-ntp true
然后执行date命令看看时间是否正确,执行timedatectl看看设置的时区等信息是否正确,ntp是否开启。
Local time: Thu 2015-10-15 12:37:25 CST Universal time: Thu 2015-10-15 04:37:25 UTC Timezone: Asia/Shanghai (CST, +0800) NTP enabled: yes NTP synchronized: no RTC in local TZ: no DST active: n/a
对于B和C,有两个问题需要解决。
第一是生成证书时候的Common Name其实是不能重复的,ca的,server的以及每个client的common都必须是唯一的,虽然校验与否是openssl的事情,大多数情况可能重复了也没问题,但是仍然建议不要重复。
Whatever method you use to generate the certificate and key files, the Common Name value used for the server and client certificates/keys must each differ from the Common Name value used for the CA certificate. Otherwise, the certificate and key files will not work for servers compiled using OpenSSL.
第二是最终问题,也就是centos7下面的openssl不支持md5,校验可以通过下面的命令:
openssl verify -CAfile ca.crt -purpose sslclient weblogic.crt
或者直接
openssl verify -CAfile ca.crt weblogic.crt
服务器当然就是
openssl verify -CAfile ca.crt -purpose sslserver server.crt
可以看到windows/ubuntu下都可以成功显示OK,centos 7则报告错误,这是openvpn报告:
error:0D0C50A1:asn1 encoding routines:ASN1_item_verify:unknown message digest algorithm:a_verify.c:179: 错误的根源。
仍然有两种方法来解决,第一是通过环境变量打开centos7下的openssl对md5的支持:
然而我这么做并未成功,主要是如果是在shell里面,su添加环境变量之后,
sudo openvpn --config /etc/openvpn/client.ovpn
是可以成功的,原因是这都是root的变量,但是centos7(7.1)的服务模式,按照原文添加在NetworkManager里面,并未生效,原因未知。
考虑到这种情况主要是之前已经有了多个证书的情况才需要仔细考虑兼容,我的情况是从新发布证书,所以果断放弃研究这个分支,不再使用md5,改用其他散列算法从新生成证书。
因为我对openssl不熟悉,也不知道在哪里设置md算法easy-rsa才可以识别,碰巧搜到github的一个patch的diff,才明白原来是在openssl.cnf里面设置。
cenots在/usr/share/easy-rsa/2.0/下面,windows就在openvpn目录里面,把windows里面openssl-1.0.0.cnf内容当中的
default_md = md5 # use public key default MD
改为
default_md = sha256 # use public key default MD
看了一下centos的easy-rsa默认设置,也是sha256,这把放心了。
然后从新生成了所有的证书,放入centos下面经过测试之后好用了。成功拨号之后ifconfig可以看到有tap0设备。
附1:几个安装的参考网址,有的有用有的没用(其实按照easy-rsa下面的readme.txt操作即可并不麻烦,当然需要改一下vars的变量设置):
http://flashing.iteye.com/blog/575402
http://www.cnblogs.com/szzchristy/p/3491757.html
https://www.digitalocean.com/community/tutorials/how-to-setup-and-configure-an-openvpn-server-on-centos-7
http://www.server-world.info/en/note?os=CentOS_6&p=openvpn
附2:centos 7 linux下面启动openvpn
拷贝client.ovpn(或者server.opvn,我这里是linux做客户端,所以是起名client.ovpn),ca.crt, 客户端证书crt文件和key文件到/etc/openvpn
sudo openvpn --config /etc/openvpn/client.ovpn
可以直接连接用作测试,如果成功,可以安装为服务
先把/etc/openvpn/client.ovpn复制为/etc/openvpn/client.conf
sudo systemctl enable openvpn@client.service
sudo systemctl start openvpn@client.service
这里@是指/etc/openvpn下面对应的conf文件名
当然停止和注销服务就是
sudo systemctl stop openvpn@client.service
sudo systemctl disable openvpn@client.service
查看服务状态是
sudo systemctl status openvpn@client.service
相关推荐
CentOS7环境下编译的openssl 3.0动态库和静态库,经过测试,库可以正常使用
openssl-1.1.1m centos 7 rpm,安装到 /usr/local/openssl111 路径,与系统库没有冲突
openssl-1.1.1k-1.el7.centos.x86_64 openssl-debuginfo-1.1.1k-1.el7.centos.x86_64 openssl-devel-1.1.1k-1.el7.centos.x86_64 openssl CentOS7安装包,解决CVE-2021-3450和CVE-2021-3449
centos7 openssl升级rpm包,openssl-1.1.1o-1.el7.x86_64.rpm
linux操作系统CentOS 7 国内yum源更新 openssh-8.2p1以及openssl-1.1.1d最新版本升级
新鲜出炉最新版本openssh openssl rpm升级包附带升级过程日志供大家参考,由于centos7本身很多软件包依赖openssl 1.0.2k的库,升级包也保留了原有的1.0.2k库
Centos 7 升级最新版的 Openssl1.1.1k 和 OpenSSH8.6p
一键执行sh脚本,完成centos7 升级openssh9.0、openssl111q
操作系统:CentOs7安静 OpenSSL Version:openssl-1.0.2j.tar.gz 目前版本最新的SSL地址为http://www.openssl.org/source/openssl-1.0.2j.tar.gz 1、将下载的压缩包放在根目录, 2、在文件夹下解压缩,命令:tar ...
这里是Linux Centos下升级Openssl使用的所有依赖包,当然也是Nginx或者Keepalived安装所需要的依赖包。按需使用。
centos 7 openssh 9.0p1+openssl 1.1.1o 2022年新版 离线数据包 分别安装OPENSSH 和 OPENSSL
压缩包内包含openssl1.0.2的安装包及全部依赖环境,下载openssl最新版可到官网http://www.openssl.org/source/下载,然后安装此依赖包均可。没有设置下载积分,如果有积分一定是CSDN自己搞得鬼,也可在百度云盘上去...
由于openssh与openssl版本漏洞需要经常进行修复加固处理,现编写对应脚本,一次构建完毕后,复制构建rpm后的安装包至cengtos...注意:centos7.x版本默认openssl版本使用1.1.1x版本,请勿指定使用3.0.x版本进行构建rpm包
漏扫报告中提示ssl、ssh版本有漏洞,本文档主要介绍在CentOS7中升级openssl、openssh步骤,经亲自测试可用,所有安装包通过网络下载源码,编译安装进行升级。
centos配置openmeetings
1.离线安装gcc pcre-devel openssl-devel zlib-devel 下载路径 http://mirrors.163.com/centos/7.4.1708/os/x86_64/Packages/ autogen-libopts-5.18-5.el7.x86_64.rpm cpp-4.8.5-16.el7.x86_64.rpm gcc-4.8.5-16....
CentOS7安装指南
centos6,centos7,ssh和openssl安装包及一键升级脚本
openssl-1.0.2k-16.el7.x86_64 openssl-devel-1.0.2k-16.el7.x86_64 openssl-libs-1.0.2k-16.el7.x86_64 pcre-devel-8.32-17.el7.x86_64 zlib-1.2.7-18.el7.x86_64.rpm zlib-devel-1.2.7-18.el7.x86_64 ntp-4.2.6p5-...
下载后,上传到centos中,执行如下命令:rpm -Uvh ./*.rpm --nodeps --force