DKIM ҳар бир чиқувчи хатга рақамли имзо қўяди: почта сервери хатни махфий калит билан имзолайди, қабул қилувчи эса DNS'даги очиқ калит орқали имзони текширади. Агар имзо тўғри бўлса, хат йўлда ўзгартирилмагани ва ҳақиқатан ҳам доменингиз рухсат берган сервердан чиққани тасдиқланади. Кўп компаниялар DKIM'ни бир марта созлаб, йиллар давомида ўша калит билан ишлайверади. Вақт ўтиши билан калит эскиради, уни кўрган ходимлар алмашади, сервер кўчирилади ва калитнинг сизиб чиқиш эҳтимоли ошади. Шу сабабли калитни режали алмаштириб туриш, яъни ротация қилиш тўғри амалиёт ҳисобланади.
Селектор нима ва нега ротация айнан унга таянади
Бир домен бир вақтнинг ўзида бир нечта DKIM калитига эга бўлиши мумкин. Уларни бир-биридан ажратиш учун селектор ишлатилади. Очиқ калит selektor._domainkey.domen номли TXT ёзувда сақланади, хат сарлавҳасидаги DKIM-Signature ичида эса s= теги қайси селектор ишлатилганини кўрсатади. Қабул қилувчи сервер шу селектор бўйича DNS'дан керакли калитни олади.
DKIM-Signature: v=1; a=rsa-sha256; d=example.uz; s=mail2025; c=relaxed/relaxed; ...
Ротациянинг асосий ғояси шу ерда: эски калитни ўчириб, ўрнига янгисини қўйиш ўрнига, янги калит янги селектор билан алоҳида эълон қилинади. Бир муддат иккала калит ҳам DNS'да туради, сервер эса янгиси билан имзолашга ўтади. Шу туфайли бирорта хат ҳам имзо хатоси билан рад этилмайди.
Калитни қачон алмаштириш керак
Режали алмаштириш учун аниқ мажбурий муддат йўқ, лекин кўплаб почта хавфсизлиги бўйича тавсиялар калитни камида йилига бир марта, фаол юборувчилар учун эса тез-тез алмаштиришни маслаҳат беради. Режадан ташқари алмаштириш эса қуйидаги ҳолатларда шарт бўлади:
- серверга рухсатсиз кириш ёки махфий калит сизиб чиққанидан шубҳа пайдо бўлганда;
- калитга кириш ҳуқуқи бўлган тизим администратори ёки пудратчи билан ҳамкорлик тугаганда;
- почта бошқа серверга ёки бошқа хизматга кўчирилганда;
- эски 1024 битли калитдан 2048 битли калитга ўтиш керак бўлганда.
Охирги ҳолат айниқса муҳим. 1024 битли RSA калит бугунги кунда заиф деб ҳисобланади, шунинг учун янги калитни 2048 бит узунликда яратиш тавсия этилади. 4096 битли калитлар ҳам мавжуд, лекин улар DNS ёзувида жуда узун бўлади ва баъзи тизимлар билан муаммо чиқариши мумкин.
Янги калит жуфтини яратиш
Агар почта серверини ўзингиз бошқарсангиз, калитни OpenSSL билан яратиш мумкин. Селектор номига сана қўшиш қулай, шунда қайси калит қачон яратилгани дарҳол кўринади:
openssl genrsa -out mail2026.private 2048
openssl rsa -in mail2026.private -pubout -outform der | openssl base64 -A > mail2026.pub
OpenDKIM ўрнатилган серверларда opendkim-genkey буйруғи калитни ҳам, тайёр DNS ёзувини ҳам бир вақтда яратади:
opendkim-genkey -b 2048 -d example.uz -s mail2026
# natija: mail2026.private va mail2026.txt
Махфий калит файлини фақат почта хизмати ўқий оладиган қилиб қўйинг, масалан chmod 600 билан, ва уни ҳеч қачон почта орқали юборманг ёки очиқ репозиторийга жойламанг. Хостинг панелида ишласангиз, одатда бу ишни панелнинг ўзи бажаради: домен учун DKIM'ни қайта яратиш ёки янги селектор қўшиш имконияти бўлади.
Ротация босқичлари
Тўғри ротация тўрт босқичдан иборат ва уларнинг ҳар бири орасида вақт бўлиши керак. Шошилиш одатда имзо хатоларига олиб келади.
- Янги очиқ калитни эълон қилиш.
mail2026._domainkeyномли TXT ёзувни қўшинг ва DNS тарқалишини кутинг. Эски ёзувни ҳали ўчирманг. - Текшириш. Янги ёзув барча ном серверларида кўринаётганини
digбилан тасдиқланг. - Имзолашни алмаштириш. Почта сервери созламасида селектор ва махфий калит йўлини янгисига ўзгартиринг ва хизматни қайта юкланг.
- Эски калитни бекор қилиш. Бир неча кундан кейин эски селектор ёзувини бўш калит билан қолдиринг ёки ўчиринг.
mail2026._domainkey.example.uz. IN TXT "v=DKIM1; k=rsa; p=MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA..."
dig +short TXT mail2026._domainkey.example.uz
Эски калитни дарҳол ўчирмасликнинг сабаби оддий: навбатда турган ёки кечикиб етказилаётган хатлар ҳали эски имзо билан юради, баъзи тизимлар эса имзони хат келгандан кейин ҳам қайта текширади. Эски калитни бекор қилишда p= қийматини бўш қолдириш стандартда калит бекор қилинганини билдиради:
mail2025._domainkey.example.uz. IN TXT "v=DKIM1; p="
2048 битли калит ва TXT ёзув узунлиги
2048 битли очиқ калит тахминан 400 белгидан иборат, битта TXT сатри эса 255 белгидан ошмаслиги керак. Шу сабабли узун калит бир нечта қўштирноқли бўлакларга бўлинади ва DNS сервер уларни бирлаштириб беради. Кўпчилик DNS панеллари буни автоматик бажаради, лекин зона файлини қўлда таҳрирласангиз, бўлаклар орасида бўш жой ёки қатор узилиши қолишига эътибор беринг. Калит ичида тасодифий бўш жой ёки йўқолган белги имзони бутунлай бузади ва бундай хатони кўз билан топиш қийин.
mail2026._domainkey IN TXT ( "v=DKIM1; k=rsa; "
"p=MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAu5..."
"...QIDAQAB" )
Мисол: Самарқанддаги хусусий клиника
Самарқанддаги хусусий клиника беморларга таҳлил натижаларини ва қабул эслатмаларини электрон почта орқали юборади. Клиниканинг почтасини аввал ташқи пудратчи созлаган ва DKIM калити 1024 бит узунликда бўлган. Пудратчи билан шартнома тугагач, клиника янги администраторига калитни алмаштиришни топширади. Администратор clinic2026 селектори билан 2048 битли калит яратади, уни DNS'га қўшади ва бир кун кутади. Кейин серверда имзолашни янги селекторга ўтказади ва ўзининг Gmail қутисига синов хати юбориб, "Асл нусхани кўрсатиш" бўлимида DKIM натижаси муваффақиятли эканини ва s=clinic2026 турганини кўради. Бир ҳафтадан кейин эски селектор бекор қилинади.
Алмаштиришдан кейинги текширув
Ротация тугагач, хат сарлавҳаларида Authentication-Results қаторини кўриб чиқинг. Унда dkim=pass ва янги селектор номи туриши керак. Агар DMARC ҳисоботлари ёқилган бўлса, кейинги кунларда уларда DKIM муваффақиятсизликлари кўпаймаганини текширинг. Муваффақиятсизликлар ортса, эҳтимол қайсидир тизим, масалан алоҳида сервер орқали ишлайдиган сайт формаси, ҳали эски калит билан имзолаяпти ёки умуман имзоламаяпти.
sayt.uz хостингида корпоратив почта учун DKIM ёзуви кабинетдаги DNS бўлимида кўринади, шунинг учун янги селектор қўшилганда унинг тўғри эълон қилинганини ўша ерда ва dig буйруғи билан солиштириб кўриш мумкин.