[关闭]
@gzm1997 2017-11-22T02:48:01.000000Z 字数 3722 阅读 906

web安全第四次作业

web作业


郭柱明 15331094


openvpn原理

openvpn客户端服务器结构:
此处输入图片的描述
openvpn的虚拟网卡结构:
此处输入图片的描述

openvpn就是在客户端和服务端都安装一个虚拟网卡,并且获得一个虚拟的ip地址,这些虚拟的ip地址可以相互访问,其中openvpn服务器起到路由控制的作用(相当于一个虚拟路由器)

当然,这个虚拟网卡毕竟是虚拟的,我们发送给虚拟网卡的数据在经过封装之后还是需要通过物理网卡才能发送出去。因此,OpenVPN还要做的另外一件事就是,采用数据加密身份验证等各种手段确保数据安全无误地到达目的地。

在openvpn中,最常用的加密手段是ssl协议。使用ssl协议就需要相应的证书的密钥,因此需要在服务端生成相应的证书和密钥。


ssl/tls协议

ssl/tls握手过程:

  1. 客户端连接到TLS协议的服务器,要求建立安全连接,并列出了受支持的密码组合(加密密码算法和加密哈希函数),握手开始
  2. 服务器从改列表中选取加密和哈希函数,并且通知客户端
  3. 服务器发回其数字证书,此证书包含服务器的名字,受信任的证书颁发机构CA,和服务器公钥
  4. 客户端确认其数字证书有效性
  5. 客户端使用服务器的公钥加密随机生成的密钥,并发送给服务器,只有服务器用自己的私钥解密,此随机生成的密钥作为会话密钥
  6. 上一部生成的随机密钥作为双方会话的加密和解密对称密钥。握手完毕之后的连接是安全的,知道连接被关闭。

使用openvpn建立vpn

1.安装openvpn,安装在F:\openvpn\setup下

2.修改F:\openvpn\setup\easy-rsa\vars.bat.sample文件,设置初始用户变量,修改如下:

  1. set HOME=F:\openvpn\setup\easy-rsa
  2. set KEY_CONFIG=F:\openvpn\setup\easy-rsa\openssl-1.0.0.cnf

整个vars.bat.sample文件:

  1. @echo off
  2. rem Edit this variable to point to
  3. rem the openssl.cnf file included
  4. rem with easy-rsa.
  5. rem Automatically set PATH to openssl.exe
  6. FOR /F "tokens=2*" %%a IN ('REG QUERY "HKEY_LOCAL_MACHINE\SOFTWARE\OpenVPN"') DO set "PATH=%PATH%;%%b\bin"
  7. rem Alternatively define the PATH to openssl.exe manually
  8. rem set "PATH=%PATH%;C:\Program Files\OpenVPN\bin"
  9. set HOME=F:\openvpn\setup\easy-rsa
  10. set KEY_CONFIG=F:\openvpn\setup\easy-rsa\openssl-1.0.0.cnf
  11. rem Edit this variable to point to
  12. rem your soon-to-be-created key
  13. rem directory.
  14. rem
  15. rem WARNING: clean-all will do
  16. rem a rm -rf on this directory
  17. rem so make sure you define
  18. rem it correctly!
  19. set KEY_DIR=keys
  20. rem Increase this if you
  21. rem are paranoid. This will slow
  22. rem down TLS negotiation performance
  23. rem as well as the one-time DH parms
  24. rem generation process.
  25. set DH_KEY_SIZE=2048
  26. rem Private key size
  27. set KEY_SIZE=1024
  28. rem These are the default values for fields
  29. rem which will be placed in the certificate.
  30. rem Change these to reflect your site.
  31. rem Don't leave any of these parms blank.
  32. set KEY_COUNTRY=US
  33. set KEY_PROVINCE=CA
  34. set KEY_CITY=SanFrancisco
  35. set KEY_ORG=OpenVPN
  36. set KEY_EMAIL=mail@host.domain
  37. set KEY_CN=changeme
  38. set KEY_NAME=changeme
  39. set KEY_OU=changeme
  40. set PKCS11_MODULE_PATH=changeme
  41. set PKCS11_PIN=1234

3.转到easy-rsa目录下,输入如下命令进行初始化工作:

  1. init-config.bat
  2. vars.bat
  3. clean-all.bat

结果:
image_1bv3kf0774u1jem1ur2avj16cjn.png-51.3kB

4.创建CA证书
在easy-rsa目录下输入build-ca.bat命令,vpn_ca设置为vpn_ca外,其他CA变量的值随意。

  1. build-ca.bat

image_1bv44rp8b6ku1mnsjg81ste19589.png-43.4kB

此时可以在keys目录下看到CA的证书和私钥
image_1bv44v2od1f3717po1rf4hj9at26.png-10.1kB

打开ca证书ca.crt,如下:
image_1bv450qvtt0d1rj5su01h431a4f33.png-42.5kB

5.创建服务端证书

  1. build-key-server.bat server

流程跟上面创建CA证书流程相似,uyye'sh也是要设置common name为server,并设置密码
结果:
image_1bv45p30k1jieppm173319qt10ns9.png-701.9kB
image_1bv45pdjm1frce5n17abri115t2m.png-675.9kB

6.同理创建客户端证书
image_1bv46pea714bi1fte667h1ujbl13.png-83.6kB
image_1bv46psr3c611kbn1nno7ku169s1g.png-337.8kB

7.创建迪菲·赫尔曼密钥

  1. build-dh.bat

结果:
image_1bv47d7qo1tvr19f912m41b2a1c362q.png-324.2kB

8.tls-auth防御DoS、UDP淹没等恶意攻击

  1. openvpn --genkey --secret keys/ta.key

此时keys文件夹中含有:
image_1bv47ei0jb7kdie1df1gcmph37.png-44.7kB

9.openvpn配置
从keys文件夹中分别复制如下文件到客户端和服务端的 安装路径/config目录中
服务端:
image_1bv47h8tkr82um11qao1f031mrr3k.png-25kB
客户端client1:
image_1bv47hpb9iod1umessnef21in941.png-20kB

除此之外,需要在各自的config目录下存放一个.ovpn配置文件,服务端是server.ovpn,客户端是client.ovpn,配置文件样例存放在sample-config文件夹下

server.ovpn如下:

  1. local 138.68.9.2 #指定监听的本机IP
  2. port 1194 #指定监听的本机端口号
  3. proto udp #指定采用的传输协议,可以选择tcp或udp
  4. dev tun #指定创建的通信隧道类型,可选tun或tap
  5. ca ca.crt #指定CA证书的文件路径
  6. cert server.crt #指定服务器端的证书文件路径
  7. key server.key #指定服务器端的私钥文件路径
  8. dh dh1024.pem #指定迪菲赫尔曼参数的文件路径
  9. server 10.0.0.0 255.255.255.0 #指定虚拟局域网占用的IP地址段和子网掩码,此处配置的服务器自身占用10.0.0.1。
  10. ifconfig-pool-persist ipp.txt #服务器自动给客户端分配IP后,客户端下次连接时,仍然采用上次的IP地址(第一次分配的IP保存在ipp.txt中,下一次分配其中保存的IP)。
  11. tls-auth ta.key 0 #开启TLS-auth,使用ta.key防御攻击。服务器端的第二个参数值为0,客户端的为1。
  12. keepalive 10 120 #每10秒ping一次,连接超时时间设为120秒。
  13. comp-lzo #开启VPN连接压缩,如果服务器端开启,客户端也必须开启
  14. client-to-client #允许客户端与客户端相连接,默认情况下客户端只能与服务器相连接
  15. persist-key
  16. persist-tun #持久化选项可以尽量避免访问在重启时由于用户权限降低而无法访问的某些资源。
  17. status openvpn-status.log #指定记录OpenVPN状态的日志文件路径
  18. verb 3 #指定日志文件的记录详细级别,可选0-9,等级越高日志内容越详细

client.ovpn:

  1. client #指定当前VPN是客户端
  2. dev tun #必须与服务器端的保持一致
  3. proto udp #必须与服务器端的保持一致
  4. remote 192.168.1.101 1194 #指定连接的远程服务器的实际IP地址和端口号
  5. resolv-retry infinite #断线自动重新连接,在网络不稳定的情况下(例如:笔记本电脑无线网络)非常有用。
  6. nobind #不绑定特定的本地端口号
  7. persist-key
  8. persist-tun
  9. ca ca.crt #指定CA证书的文件路径
  10. cert client1.crt #指定当前客户端的证书文件路径
  11. key client1.key #指定当前客户端的私钥文件路径
  12. ns-cert-type server #指定采用服务器校验方式
  13. tls-auth ta.key 1 #如果服务器设置了防御DoS等攻击的ta.key,则必须每个客户端开启;如果未设置,则注释掉这一行;
  14. comp-lzo #与服务器保持一致
  15. verb 3 #指定日志文件的记录详细级别,可选0-9,等级越高日志内容越详细

10.开启服务端和客户端连接
服务端:
开始->运行->services.msc,启动openVPN服务
客户端:
双击桌面的OpenVPN GUI图标运行客户端,连接服务器

连接成功:
image_1bvflkf2s1ffk11km35mnpq46o9.png-64kB
连接成功后,桌面右下角的openvpn logo显示为绿色。
image_1bvflorln1sd8irbcn4ilnu8g46.png-4.3kB

添加新批注
在作者公开此批注前,只有你和作者可见。
回复批注