18.06.2022

Auth SIP manual

How to md5 auth SIP client manually if you have access to DB with passwords:
in short words:

#       How to calculate manual response to send into Authorization header
#       HA1=MD5(username:realm:password)
#       HA2=MD5(method:digestURI)
#       response=MD5(HA1:nonce:HA2)


route[auth] {
            if (!is_present_hf("Authorization")) return;

# <         converts string with ',' to string with ';' 

            $var(raw_auth) = $hdr(Authorization);
            $var(reg_input)=$var(raw_auth);
            xlog("$var(reg_input) [$ci]");
            $var(reg) = "/,/;/g";
            $var(auth) = $(var(reg_input){re.subst,$var(reg)});
            $var(reg) = "/Digest //g";
            $var(auth) = $(var(auth){re.subst,$var(reg)});
            xlog("$var(auth) [$ci]");
# >

            $var(cl_user)     = $(var(auth){param.value,username});
            $var(cl_realm)    = $(var(auth){param.value,realm});
            $var(cl_uri)      = $(var(auth){param.value,uri});
            $var(cl_nonce)    = $(var(auth){param.value,nonce});
            $var(cl_response) = $(var(auth){param.value,response});

#ask asterisk DB for secret
            avp_db_query("SELECT secret FROM ars_sip  WHERE username='$fU'",
                        "$avp(secret)",1);

       if ($avp(secret) == NULL)
            exit;

#       xlog("CL_CREDENTIALS: $var(cl_user) , $var(cl_realm) , $avp(secret)  [$ci]");
        $var(ha1) = $var(cl_user) + ":"+$var(cl_realm)+":" + $avp(secret);

#       xlog("CL_CREDENTIALS: REGISTER:$var(cl_uri) [$ci]");
        $var(ha2) = "REGISTER:"+ $var(cl_uri) ;
        $var(response) = $(var(ha1){s.md5}) + ":" + $var(cl_nonce)+ ":" + $(var(ha2){s.md5});

        $var(response_md5) = $(var(response){s.md5});


        xlog("my $var(response_md5) client response is $var(cl_response)");
        if ($var(response_md5) != $var(cl_response)) 
               exit;

##############

}

15.06.2018

Добавление ssl сертификата к сайту. certbot. lets encrypt.

Добавить на сайт сертификат без лишних эмоций можно так:
Используем сервис let’s encrypt И certbot
Я буду использовать в ручном режиме, потому, что у меня сайты находятся на разных портах, например на 84, вместо 80.

    1. Создам сертификат для нашего сайта, в чем преимущество let’s encrypt так это в том, что выдаст удостоверенный сертификат. правда бесплатно только на 3 месяца.

      1.1. установить certbot в систему. проходим по ссылке и выбираем web сервер и OS которая стоит на сервере. там на самом сайте прекрасная, короткая инструкция.
      2.2 воспользуемся ручным режимом, который спросит у вас имя вашего сайта, попросит внести в DNS TXT запись и выдаст сертификат:

      certbot certonly --manual --preferred-challenges dns

      примерно так:
      —————————————————-
      Please deploy a DNS TXT record under the name
      _acme-challenge.yourdomain.ru with the following value:

      Z9zqdbasdfasdfasdfsad1UabqXXadfasdfqwerE4oc
      —————————————————-
      Если всё ок, то сертификаты он сохранит в каталог /etc/letsencrypt/live/yourdomain.ru,
      а сообщит он об этом примерно так:
      —————————————————-
      IMPORTANT NOTES:
      – Congratulations! Your certificate and chain have been saved at:
      /etc/letsencrypt/live/yourdomain.ru/fullchain.pem
      Your key file has been saved at:
      /etc/letsencrypt/live/yourdomain.ru/privkey.pem
      —————————————————-

      Лично использую dns сервера от yandex – работают абсолютно бесплатно, редактировать одно удовольствие.

    2. Таким образом мы быстренько получили сертификаты не трогая никаких конфигураций web-сервера на самом сервере. Теперь остаётся включить ssl в apache и прописать в конфигурацию полученные сертификаты.

Ну и надо добавить обновление сертификатов в crontab чтобы не дергаться каждые три месяца на эту тему.

certbot renew --manual --preferred-challenges dns