openswan发送CR证书请求负载条件

本文探讨了openswan在建立隧道时如何决定是否发送证书请求负载(CR)。通过截包对比,发现发送CR负载的情况是:配置了双方证书但未预加载对端公钥。分析了`send_cr`变量的设定,涉及`has_preloaded_public_key()`函数的判断,该函数检查本地是否有对端的预加载公共密钥。如果没有,且认证方式为RSA,将发送CR负载。同时,文章指出,对端CA(Certification Authority)非空也是发送CR负载的条件之一。
摘要由CSDN通过智能技术生成

1、问题提出
  在配隧道时发现两种情况:
      1、配了两边的证书情况,会发送CR 负载。
      2、配了一边的证书和对端的--id,不会发送。
  那么代码中是怎么实现的?

2、截包对比(port 500 or isakmp protocol)
  如果需要发送CR负载那么首先发送的是接收方(即第四个协商包)。

          发送方                                                                            接收方
                                                                                  <------第四个包发送证书请求负载。
  第五个包组包时先校验证书相关信息然后把证书信息组到包里发给对方-------->   
                                                                                  <---------第六个包接收到信息后进行解析,校验相关工作,并把自己的证书发给对方。
3、分析过程
        理清思路:第五个包接收到第四个包的证书请求,发送证书给对方。那么第四个包为什么会发送这个证书请求?因为第四个包
        main_inI2_outR2()
          ->build_ke()
              ->send_crypto_helper_request()
                  ->pluto_do_crypto_op()  // Public DH value都在这里组包,还有keyex value
                  -> (*cn->pcrc_func)(cn, r, NULL);//这个在调用build_ke()时已经赋值为:main_inI2_outR2_continue()
                     ->main_inI2_outR2_continue()
                        ->main_inI2_outR2_tail()

             send_cr = !no_cr_send
              && (st->st_oakley.auth == OAKLEY_RSA_SIG)
              && !has_preloaded_public_key(st)
              && st->st_connection->spd.that.ca.ptr != NULL;  

            if(send_cr) //为真下一负载即为证书请求负载。
            {
                next_payload = ISAKMP_NEXT_CR;
            }    
        
      下面看send_cr何时为真?
      no_cr_send这个全局变量默认为0,可以通过./pluto --nocrsend强制设置;如果使用的是非PSK认证,那么st->st_oakley.auth会在加链接的时候就会设置此值为OAKLEY_RSA_SIG(3);那么has_preloaded_public_key(st)为什么为假呢?st->st_connection->spd.that.ca.ptr何时不为空呢?

        ***、首先看has_preloaded_public_key(st)什么时候为真(为真时不发送CR负载),什么时候为假(为假时发送CR负载)。
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值