通过最新的pkgsrc-stable,安装OpenVPN后竟然找不到easy-rsa目录,而网上大量的参考文档都是要用easy-rsa里的脚本来创建密钥对的,还好在万能的度娘和BING妹的帮助下,成功手动创建那些密钥对。现做个笔记以供查询。

1  背景与需求
    我只需要internet上的client端直接访问这台OpenVPN server (一台NetBSD 6.1.3的电脑),所以不关心 ip forwarding 和 ip route。 这台server直接接入公网,有固定IP。为了保证server的安全,下一步计划在server上启用NPF,初步搜索了一下,这方面的文档很少。

2  用OpenSSL命令生成证书
    OpenVPN的安装过程就不说了,但我通过最新的pkgsrc-stable来源码安装,安装后没找到easy-rsa目录,只能手动创建密钥对。
   2.1  编辑openssl.cnf
          - 找到openssl.cnf的范本并COPY到你的工作目录(这里假设是你的home里的myca目录)
        cp /usr/share/examples/openssl/openssl.cnf ~/myca

          -  把openssl.cnf里的 dir 指向你的工作目录 /home/xxxx/myca
          - default_days默认365天,最好设时间长一些
       - 把 certificate 和 private_key 指向你的根证书和私钥文件(这两个文件会在后面创建,你可以创建之后再来指定)。为方便使用,这里我的根证书为my-ca.crt, 对应的私钥文件为my-ca.key。这里的证书、私钥都是成对出现的,.crt表示证书,.key表示私钥,下同。而NetBSD默认用.pem
     
          - 创建index.txt 和 serial 文件。index.txt为空文件,serial 初始化为一个数字序列如01
             touch index.txt
             echo "01" >serial
          - 创建文件夹 newcerts 和 private

    2.2  创建根证书/私钥对
        openssl req -nodes -new -x509 -keyout my-ca.key -out my-ca.crt -days 3650 -config ~/myca/openssl.cnf
           把生成的 my-ca.key移到 private 文件夹中,修改openssl.cnf 文件中的 certificate 和 private_key, 见上文。

   2.3  创建服务器端和用户端的密钥对,我用Office代表服务器端,Home代表用户端。
        openssl req -nodes -new -keyout office.key -out office.csr -config ~/myca/openssl.cnf
           openssl ca -out office.crt -in office.csr -config ~/myca/openssl.cnf
           openssl req -nodes -new -keyout home.key -out home.csr -config ~/myca/openssl.cnf
           openssl ca -out home.crt -in home.csr -config ~/myca/openssl.cnf
           把生成的 home.crt, home.key 和之前生成的 my-ca.crt, 拷贝一份到 Home 电脑上。注意:创建各密钥对时,不要输入相同的 Common Name 。

   2.4  创建 Diffie Hellman 参数
        openssl dhparam -out dh1024.pem 1024  -config ~/myca/openssl.cnf
         
          上面openssl 命令中的 -nodes 选项用于对私钥不做口令加密,如果去掉此选项,将要求输入一个密码,这样以后你每次建立一个OpenVPN通道里都要求输入这个密码。

3  配置OpenVPN 服务端
   - 把OpenVPN的范本文件 server.conf 拷贝到配置目录
     cp /usr/pkg/share/examples/openvpn/config/server.conf /usr/pkg/etc/openvpn/
    - 修改 server.conf 中的
     ca ,指向上文生成的my-ca.crt
       cert , 指向上文生成的office.crt
       key , 指向上文生成的office.key
      dh , 指向上文中生成的 dh1024.pem
    -  设置 user nobody 和 group nobody
    保存后,启动openvpn服务,运行 ifconfig -a 将看到 tun0 设备的信息。如果您是用openvpn server 做网关,则需启用ip转发并可能需要设置与路由有关的参数,请自行研究server.conf文件。

4  配置OpenVPN 用户端
   用户端的设置相当简单,只要在配置文件中设置好上文中已拷贝到Home电脑上的三个密钥文件,并保证配置文件中的协议、加密方式的设置与服务端server.conf中的设置一致就可以了。Win7的用户端请注意,可能需要“以管理员身份运行”OpenVPN的用户端程序。

至此,完成所有的配置,在用户端就可以发起连接了。连接成功后,服务端和用户端应能够互PING。此配置过程参考了大量的网上文档,特别是《OpenVPN HOWTO 中文版》一文,特此感谢原文作者,网址:http://wenku.baidu.com/view/415b52fec8d376eeaeaa3174.html
12-08 11:49