用Strongswan测试ECDSA证书认证

来源:互联网 发布:阿里云服务器ecs ip 编辑:程序博客网 时间:2024/05/16 02:32
最近为了验证IPSec中ECDSA证书的正确性,需要用Strongswan模拟IPSec的安全网关。在搭建测试环境的过程中遇到不少问题,好在google的帮助下终于最终搞定。虽然都是些简单的问题,但是却常常给初次接触的人造成困扰,所以整理一下,希望可以帮到需要的人。

Openssl和Strongswan的安装
Strongswan和Openssl有很强的联系。它利用了Openssl的许多特性,所以在安装Strongswan之前,必须首先安装Openssl。安装Openssl有诸多方式,既可以通过软件仓库,比如Fedora的yum命令或者Ubuntu的aptitude命令来安装,也可以从Openssl的网站上直接下载最新源代码,自己编译安装。

这里推荐的方式是自己下载Openssl的源代码来编译安装。原因在于,通过软件仓库发行的Openssl是一个阉割版本,有许多的特性,比如椭圆曲线在某些版本中默认没有包含进来。而自己下载源代码来安装则可以使用Openssl全部的特性。编译和安装的步骤在下载的源代码里的INSTALL文件里有详细的说明,并不复杂。最终用make install命令将编译好的可执行文件安装到系统中。如果安装后想删除的话,用make uninstall即可完整删除。

Strongswan也是一样,推荐自己编译安装。在编译时需要注意的是,在配置编译选项时,务必使用下面的命令:
./configure --enable-openssl --enable-xcbc --enable-ccm --enable-gcm --enable-unity --enable-radattr --enable-xauth-noauth --enable-xauth-eap --enable-eap-radius --enable-eap-peap --enable-eap-ttls --enable-eap-tls --enable-eap-mschapv2 --enable-eap-gtc --enable-eap-md5 --enable-eap-identity

否则,不带任何参数的配置命令生成的makefile文件不会将某些特性编译进去,从而导致Strongswan无法使用这些插件。

生成ECDSA证书
用Openssl生成ECDSA证书的过程很简单:
    第一步 生成ECDSA密钥文件
          openssl ecparam -name secp384r1 -genkey -out ecdsa384.key

以上的命令生成一个ECDSA384的私钥文件,文件内容如下:

它包含两个部分,第一部分是EC参数,第二部分是EC Private Key。对于一个私钥文件来说,真正有意义的部分是Private Key,其他的部分都可以删除。如果不删除,对于Openssl来说,它使用这样的文件不会有任何问题;但是Strongswan则会报错,错误信息是”building CRED_PRIVATE_KEY - ECDSA failed“。这是Strongswan的一个限制,或者说一个缺陷。

    第二步 生成ECDSA证书请求
           openssl req -sha1 -days 3650 -new -key ecdsa384.key -out ecdsa384.req
           
           注意,这里的摘要算法必须是sha1,如果是md5,在CA签发证书的时候可能会出错。

    第三步 用CA签发ECDSA证书
            openssl ca -in ecdsa384.req -out ecdsa384.pem

            如果机器上没有配置CA,则必须首先生成并安装一个自签名的CA证书。

搭建Strongswan的测试环境
Strongswan的测试环境主要包含以下几个方面的配置:
在Fedora中,这三个文件位于/etc/strongswan目录,在Ubuntu中,通常在/usr/local/etc下面。
strongswan.conf文件
ipsec.conf文件
ipsec.secrets文件

首先是strongswan.conf文件。它的作用是定义一些可供所有strongswan应用读取的配置项。其可配置的选项都列在http://wiki.strongswan.org/projects/strongswan/wiki/StrongswanConf。对于这个测试而言,需要了解的是load配置项,它用来加载Strongswan的一些插件。Strongswan是伴随着一堆插件一起发布的。这使得我们可以对它进行扩展和增加某些特殊的功能,从而使Strongswan的内核尽可能小。Strongswan支持的插件都列在http://wiki.strongswan.org/projects/strongswan/wiki/PluginList。一些新的算法通常都通过插件的方式来支持。为了能够运行ECDSA384的测试,需要加载如下插件:


charon {
  load = curl pem pkcs1 openssl revocation random hmac stroke kernel-netlink socket-default
}


然后是ipsec.conf文件,这个文件定义了IPsec的各种参数,包括IKE/IPsec的算法,生存时间等等,可参考如下链接来进行配置:
http://wiki.strongswan.org/projects/strongswan/wiki/IpsecConf
http://www.strongswan.org/testresults4.html

最后需要配置的是证书文件。将CA证书、公钥、私钥分别拷贝到ipsec.d目录下的各个目录,然后在ipsec.secrets中配置私钥文件的位置。

最后想说的是,Strongswan的网站上有很多现成的测试场景和配置文件,涵盖了绝大多数常见的场景,有很好的参考价值。