.UA - наш дiм. Зробимо його кращим!

DNSSEC

Документи:

Інтерфейс роботи з розширенням secDNS дозволяє виконувати наступні операції:

Зміна в переліку розширень сервісів, що підтримуються реєстром

У блоці <svcMenu> XML-документа <greeting> ("вітання"), яке видається клієнту після встановлення з'єднання з EPP-сервером або після отримання запиту , додано рядок з описом розширення secDNS:

     <svcMenu>
       <version>1.0</version>
       <lang>en</lang>
       <lang>ru</lang>
       <lang>ua</lang>
       <objURI>urn:ietf:params:xml:ns:epp-1.0</objURI>
       <objURI>http://eunic.net.ua/epp/contact-1.1</objURI>
       <objURI>http://eunic.net.ua/epp/domain-1.1</objURI>
       <objURI>http://eunic.net.ua/epp/host-1.1</objURI>
       <svcExtension>
         <extURI>http://eunic.net.ua/epp/rgp-1.1</extURI>
         <extURI>http://eunic.net.ua/epp/uaepp-1.1</extURI>
         <extURI>http://eunic.net.ua/epp/balance-1.0</extURI>
         <extURI>http://eunic.net.ua/epp/secDNS-1.1</extURI>
       </svcExtension>
     </svcMenu>

Для коректної роботи з розширенням secDNS у блоці <svcs> команди клієнта <login> необхідно додати опис розширення secDNS:

     <svcs>
       <objURI>urn:ietf:params:xml:ns:epp-1.0</objURI>
       <objURI>http://eunic.net.ua/epp/contact-1.1</objURI>
       <objURI>http://eunic.net.ua/epp/domain-1.1</objURI>
       <objURI>http://eunic.net.ua/epp/host-1.1</objURI>
       <svcExtension>
         <extURI>http://eunic.net.ua/epp/rgp-1.1</extURI>
         <extURI>http://eunic.net.ua/epp/uaepp-1.1</extURI>
         <extURI>http://eunic.net.ua/epp/balance-1.0</extURI>
         <extURI>http://eunic.net.ua/epp/secDNS-1.1</extURI>
       </svcExtension>
     </svcs>

Зміни в командах EPP

Для роботи з розширенням secDNS використовуються команди EPP:

  • <create> domain
  • <update> domain
  • <info> domain

Клієнт передає інформацію розширення secDNS у блоці <extension> після блоків <create> або <update> domain:

 C:<extension>
 C:  <secDNS:create xmlns:secDNS="urn:ietf:params:xml:ns:secDNS-1.1">
 C:    (елементи secDNS)
 C:  </secDNS:create>
 C:</extension>

 C:<extension>
 C:  <secDNS:update xmlns:secDNS="urn:ietf:params:xml:ns:secDNS-1.1">
 C:    (елементи secDNS)
 C:  </secDNS:update>
 C:</extension>

Сервер виводить інформацію розширення secDNS після виводу блоку <resData> у відповідь на команду <info> domain :

 S:<extension>
 S:  <secDNS:infData xmlns:secDNS="urn:ietf:params:xml:ns:secDNS-1.1">
 S:    (поля secDNS)
 S:  </secDNS:infData>
 S:<extension>

Інтерфейс роботи з розширенням secDNS. Опис елементів

Інтерфейс роботи з розширенням secDNS працює тільки із записами DS. Для опису створених та видалених записів використовується елемент <secDNS:dsData>

    <secDNS:dsData>
      <secDNS:keyTag>29040</secDNS:keyTag>
      <secDNS:alg>13</secDNS:alg>
      <secDNS:digestType>2</secDNS:digestType>
      <secDNS:digest>D8E3E5405994F68CADF5FB983A7E2B9B4FE7F5EBFEAE86BA626CACFA4B84EAAC</secDNS:digest>
    </secDNS:dsData>
  • <secDNS:keyTag> - ідентифікатор ключа. Він забезпечує механізм ефективного вибору публічного ключа. Ключ є цілим числом, його значення має бути менше 65536.
  • <secDNS:alg> - номер алгоритму шифрування ключа DNSKEY, на який посилається запис DS. Номер алгоритму є цілим числом та повинен відповідати запису DNSKEY в підрядному домені. Реєстр у відповідності до Регламенту приймає DS-записи до ключів, створених за алгоритмами:
    Номер алгоритмуКодНайменуванняСтандарт
    8 RSASHA256 RSA/SHA-256 RFC 5702
    10 RSASHA512 RSA/SHA-512 RFC 5702
    13 ECDSAP256SHA256 ECDSA Curve P-256 with SHA-256 RFC 6605
    14 ECDSAP384SHA384 ECDSA Curve P-384 with SHA-384 RFC 6605
    15 Ed25519 Ed25519 RFC 8032
  • <secDNS:digestType> - тип дайджест-алгоритму. Реєстр у відповідності до Регламенту приймає DS-записи із наступними дайджест-алгоритмами:
    Номер алгоритмуКодНайменуванняСтандарт
    2 SHA-256Secure Hash Algorithm Version 2, 256RFC 4634
    4 SHA-384Secure Hash Algorithm Version 2, 384RFC 6605
  • <secDNS:digest> - значення дайджесту. Повинен бути представлений у вигляді послідовності шістнадцятеричних цифр без пробілів. Довжина дайджесту повинна відповідати типу дайджест-алгоритма:
    Для secDNS:digestType = 2 довжина дайджесту повинна складати 64 шістнадцятеричних символів.
    Для secDNS:digestType = 4 довжина дайджесту повинна складати 96 шістнадцятеричних символів.

За необхідності додаткової перевірки коректності DS-запису елемент <secDNS:dsData> може бути доповнений блоком <secDNS:keyData>, дані якого повинні відповідати запису DNSKEY 257 в доменній зоні. Формат запису описаний в RFC 4034

    <secDNS:dsData>
      <secDNS:keyTag>29040</secDNS:keyTag>
      <secDNS:alg>13</secDNS:alg>
      <secDNS:digestType>2</secDNS:digestType>
      <secDNS:digest>D8E3E5405994F68CADF5FB983A7E2B9B4FE7F5EBFEAE86BA626CACFA4B84EAAC</secDNS:digest>
      <secDNS:keyData>
        <secDNS:flags>257</secDNS:flags>
        <secDNS:protocol>3</secDNS:protocol>
        <secDNS:alg>13</secDNS:alg>
        <secDNS:pubKey>x0I6K8UuEs9nIG1/QMgSD7DKtLio+Kzq+5ajegu6QkH8JRSLMvb04A==</secDNS:pubKey>
      </secDNS:keyData>
    </secDNS:dsData>

Опис елементів блоку <secDNS:keyData> :

  • <secDNS:flags> - Zone Key flag. Ціле число, приймає тільки значення 257, що відповідає ключу KSK.
  • <secDNS:protocol> - Ціле число, приймає тільки значення 3
  • <secDNS:alg> - номер алгоритму шифрування ключа DNSKEY. Реєстр відповідно до Регламенту приймає ключі, створені за алгоритмами:
    Номер алгоритмуКодНайменуванняСтандарт
    8 RSASHA256 RSA/SHA-256 RFC 5702
    10 RSASHA512 RSA/SHA-512 RFC 5702
    13 ECDSAP256SHA256 ECDSA Curve P-256 with SHA-256 RFC 6605
    14 ECDSAP384SHA384 ECDSA Curve P-384 with SHA-384 RFC 6605
    15 Ed25519 Ed25519 RFC 8032
  • <secDNS:pubkey> - Публічний KSK-ключ. Рядок, що відповідає формату base64binary. Може містити символи a-z, A-Z, 0-9, +, /, = та пробіл. Символи переносу рядка не допускаються.

Отримання інформації про DS-записи в домені

Для отримання інформації про домен та зареєстровані в ньому DS-записи використовується команда EPP <info> domain

Запит команди <info> domain не змінюється.

Якщо в домені є зареєстрований DS-запис, відповідь сервера буде містити розширення secDNS з блоками даних dsData для кожного DS-запису.

Приклад відповіді сервера на команду <info> domain з розширенням secDNS

<?xml version="1.0" encoding="UTF-8"?>
<epp xmlns="urn:ietf:params:xml:ns:epp-1.0">
  <response>
    <result code="1000">
      <msg lang="en">Command completed successfully</msg>
    </result>
    <resData>
    <domain:infData xmlns:domain="http://eunic.net.ua/epp/domain-1.1">
        <domain:name>example1.epp.ua</domain:name>
        <domain:roid>D0000725560-CO</domain:roid>
        <domain:status s="ok"/>
        <domain:registrant>ex123</domain:registrant>
        <domain:contact type="admin">ex11</domain:contact>
        <domain:contact type="tech">ex11</domain:contact>
        <domain:ns>
          <domain:hostObj>ns1.example.epp.ua</domain:hostObj>
          <domain:hostObj>ns2.example.epp.ua</domain:hostObj>
        </domain:ns>
        <domain:host>ns1.example1.epp.ua</domain:host>
        <domain:clID>co.eunic</domain:clID>
        <domain:crID>co.eunic</domain:crID>
        <domain:crDate>2010-06-10T15:03:12+03:00</domain:crDate>
        <domain:upID>co.eunic</domain:upID>
        <domain:upDate>2010-06-11T13:20:26+03:00</domain:upDate>
        <domain:exDate>2012-06-10T15:03:12+03:00</domain:exDate>
        <domain:authInfo>
          <domain:pw>r87Lhja76Y8mFo</domain:pw>
        </domain:authInfo>
      </domain:infData>
    </resData>
    <extension>
      <secDNS:infData xmlns:secDNS="http://eunic.net.ua/epp/secDNS-1.1">
        <secDNS:dsData>
          <secDNS:keyTag>29040</secDNS:keyTag>
          <secDNS:alg>13</secDNS:alg>
          <secDNS:digestType>2</secDNS:digestType>
          <secDNS:digest>D8E3E5405994F68CADF5FB983A7E2B9B4FE7F5EBFEAE86BA626CACFA4B84EAAC</secDNS:digest>
        </secDNS:dsData>
      </secDNS:infData>
    </extension>
    <trID>
      <clTRID>USER-1276595352</clTRID>
      <svTRID>CO-20100615124912-988397-00002</svTRID>
    </trID>
  </response>
</epp>

Створення домену з DS-записами

Для створення домену з DS-записами використовується команда EPP <create> domain з розширенням secDNS.

Запит команди <create> domain, крім обов’язкових даних, що описані в документациї щодо команди, повинен містити розширення secDNS з блоками даних dsData для кожного нового DS-запису.

Відповідь сервера на команду не змінюється.

При прийомі команди <create> domain з DS-записами проводяться наступні додаткові перевірки:

  • Публічний домен, в якому реєструється новий домен, підтримує протокол DNSSEC.
    Якщо ні - помилка 2309 "Заявка відхилена. DNSSEC не підтримується в публічному домені"
  • Реєстратор має право на роботу з протоколом DNSSEC.
    Якщо ні - помилка 2309 "Заявка відхилена. Відсутня додаткова угода про DNSSEC"
  • У заявці зазначений хоча б один NS.
    Якщо ні - помилка 2003 "Відсутній обов'язковий параметр"
  • У полі <secDNS:alg> зазначений номер алгоритму, дозволений Регламентом.
    Якщо ні - помилка 2004 "Помилка в значенні параметра"
  • У полі <secDNS:digestType> зазначений тип дайджесту, дозволений Регламентом.
    Якщо ні - помилка 2004 "Помилка в значенні параметра"
  • У полі <secDNS:digest> зазначений дайджест, що містить шістнадцятеричний рядок довжиною, відповідною типу дайджеста.
    Якщо ні - помилка 2005 "Синтаксична помилка параметра"
  • Якщо додатково передається публічний KSK-ключ, то перевіряються дані в блоці <secDNS:keyData>. <secDNS:flags> повинен дорівнювати 257
    Якщо ні - помилка 2306 "Значення параметра не відповідає правилам"
  • У блоці <secDNS:keyData> елемент <secDNS:protocol> повинен дорівнювати 3
    Якщо ні - помилка 2306 "Значення параметра не відповідає правилам"
  • KSK-ключ, зазначений у блоці <secDNS:keyData>, відповідає DS-запису
    Якщо ні - помилка 2306 "Значення параметра не відповідає правилам"
  • Загальна кількість DS-записів для домену не перевищує максимальної (6).
    Якщо ні - помилка 2001 "Синтаксична помилка команди"

Приклад запиту <create> domain з розширенням secDNS для створення домену з одним DS-записом


<?xml version="1.0" encoding="UTF-8" standalone="no"?>
  <epp xmlns="urn:ietf:params:xml:ns:epp-1.0">
    <command>
      <create>
        <domain:create xmlns:domain="http://eunic.net.ua/epp/domain-1.1">
          <domain:name>example1.epp.ua</domain:name>
          <domain:period unit="y">2</domain:period>
          <domain:ns>
            <domain:hostObj>ns1.domain.epp.ua</domain:hostObj>
            <domain:hostObj>ns2.domain.epp.ua</domain:hostObj>
          </domain:ns>
          <domain:registrant>ex123</domain:registrant>
          <domain:contact type="admin">ex11</domain:contact>
          <domain:contact type="tech">ex11</domain:contact>
        </domain:create>
      </create>
      <extension>
        <secDNS:create xmlns:secDNS="http://eunic.net.ua/epp/secDNS-1.1">
          <secDNS:dsData>
            <secDNS:keyTag>29040</secDNS:keyTag>
            <secDNS:alg>13</secDNS:alg>
            <secDNS:digestType>2</secDNS:digestType>
            <secDNS:digest>D8E3E5405994F68CADF5FB983A7E2B9B4FE7F5EBFEAE86BA626CACFA4B84EAAC</secDNS:digest>
          </secDNS:dsData>
        </secDNS:create>
      </extension>
      <clTRID>USER-1276171392</clTRID>
    </command>
  </epp>

Приклад запиту <create> domain з розширенням secDNS для створення домену з одним DS-записом та публічним ключем

<?xml version="1.0" encoding="UTF-8" standalone="no"?>
  <epp xmlns="urn:ietf:params:xml:ns:epp-1.0">
    <command>
      <create>
        <domain:create xmlns:domain="http://eunic.net.ua/epp/domain-1.1">
          <domain:name>example1.epp.ua</domain:name>
          <domain:period unit="y">2</domain:period>
          <domain:ns>
            <domain:hostObj>ns1.domain.epp.ua</domain:hostObj>
            <domain:hostObj>ns2.domain.epp.ua</domain:hostObj>
          </domain:ns>
          <domain:registrant>ex123</domain:registrant>
          <domain:contact type="admin">ex11</domain:contact>
          <domain:contact type="tech">ex11</domain:contact>
        </domain:create>
      </create>
      <extension>
        <secDNS:create xmlns:secDNS="http://eunic.net.ua/epp/secDNS-1.1">
          <secDNS:dsData>
            <secDNS:keyTag>29040</secDNS:keyTag>
            <secDNS:alg>13</secDNS:alg>
            <secDNS:digestType>2</secDNS:digestType>
            <secDNS:digest>D8E3E5405994F68CADF5FB983A7E2B9B4FE7F5EBFEAE86BA626CACFA4B84EAAC</secDNS:digest>
            <secDNS:keyData>
              <secDNS:flags>257</secDNS:flags>
              <secDNS:protocol>3</secDNS:protocol>
              <secDNS:alg>13</secDNS:alg>
              <secDNS:pubKey>x0I6K8UuEs9nIG1/tbn64zS6LmjQ+Kzq+5ajegu6QkH8JRSLMvb04A==</secDNS:pubKey>
            </secDNS:keyData>
          </secDNS:dsData>
        </secDNS:create>
      </extension>
      <clTRID>USER-1276171392</clTRID>
    </command>
  </epp>

Додавання DS-записів до раніше делегованого домену

Для додавання DS-запису до раніше делегованого домену використовується команда EPP <update> domain

Команда <update> domain повинна містити розширення secDNS з блоком даних <secDNS:add>, в якому в блоках <secDNS:dsData> розміщені дані про кожен новий DS-запис.

Відповідь сервера на команду <update> не змінюється

При прийомі команди <update> domain з додаванням DS-записів виконуються наступні додаткові перевірки:

  • У полі <secDNS:alg> зазначений номер алгоритму, дозволений Регламентом.
    Якщо ні - помилка 2004 "Parameter value range error"
  • У полі <secDNS:digestType> зазначений тип дайджесту, дозволений Регламентом.
    Якщо ні - помилка 2004 "Parameter value range error"
  • У полі <secDNS:digest> зазначений дайджест, що містить шістнадцятеричний рядок довжиною, що відповідає типу дайджеста.
    Якщо ні - помилка 2005 "Parameter value syntax error"
  • Якщо додатково передається публічний KSK-ключ, то перевіряються дані в блоці <secDNS:keyData>. <secDNS:flags> дповинен дорівнювати 257
    Якщо ні - помилка 2306 "Parameter value policy error"
  • У блоці <secDNS:keyData> елемент <secDNS:protocol> повинен дорівнювати 3
    Якщо ні - помилка 2306 "Parameter value policy error"
  • KSK-ключ, зазначений у блоці <secDNS:keyData>, відповідає DS-запису
    Якщо ні - помилка 2306 "Parameter value policy error"
  • Загальна кількість DS-записів у домені не перевищує максимальної (6).
    Якщо ні - помилка 2001 "Command syntax error"
  • У домені є хоча б один NS.
    Якщо ні - помилка 2306 "Parameter value policy error"

Приклад запиту <update> domain з розширенням secDNS для додавання одного DS-запису в раніше делегований домен

<?xml version="1.0" encoding="UTF-8" standalone="no"?>
  <epp xmlns="urn:ietf:params:xml:ns:epp-1.0">
    <command>
      <update>
        <domain:update
         xmlns:domain="http://eunic.net.ua/epp/domain-1.1">
          <domain:name>example1.epp.ua</domain:name>
        </domain:update>
      </update>
      <extension>
        <secDNS:update xmlns:secDNS="http://eunic.net.ua/epp/secDNS-1.1">
          <secDNS:add>
            <secDNS:dsData>
              <secDNS:keyTag>29040</secDNS:keyTag>
              <secDNS:alg>13</secDNS:alg>
              <secDNS:digestType>2</secDNS:digestType>
              <secDNS:digest>D8E3E5405994F68CADF5FB983A7E2B9B4FE7F5EBFEAE86BA626CACFA4B84EAAC</secDNS:digest>
            </secDNS:dsData>
          </secDNS:add>
        </secDNS:update>
      </extension>
      <clTRID>USER-1276251625</clTRID>
    </command>
  </epp>

Видалення DS-записів у домені

Для видалення DS-запису в раніше делегованому домені використовується команда EPP <update> domain

Команда <update> domain повинна містити розширення secDNS з блоком даних <secDNS:rem>, в якому в блоках <secDNS:dsData> розміщені дані про кожен з DS-записів, що видаляються.

Відповідь сервера на команду не змінюється

При прийомі команди <update> domain з додаванням DS-записів виконуються наступні додаткові перевірки:

  • У полі <secDNS:alg> зазначений номер алгоритму, дозволений Регламентом.
    Якщо ні - помилка 2004 "Parameter value range error"
  • У полі <secDNS:digestType> зазначений тип дайджесту, дозволений Регламентом.
    Якщо ні - помилка 2004 "Parameter value range error"
  • У полі <secDNS:digest> зазначений дайджест, що містить шістнадцятеричний рядок довжиною, що відповідає типу дайджеста.
    Якщо ні - помилка 2005 "Parameter value syntax error"
  • При видаленні DS-записів перевіряється наявність в реєстрі зазначених записів.
    Якщо запис не знайдений - помилка 2005 "Parameter value syntax error"

Також можливо видалити одночасно всі DS-записи домену без перевірок, зазначивши блок:

<secDNS:rem>
  <secDNS:all>true</secDNS:all>
</secDNS:rem>

Приклад запиту <update> domain з розширенням secDNS для видалення одного DS-запису домена

<?xml version="1.0" encoding="UTF-8" standalone="no"?>
  <epp xmlns="urn:ietf:params:xml:ns:epp-1.0">
    <command>
      <update>
        <domain:update
         xmlns:domain="http://eunic.net.ua/epp/domain-1.1">
          <domain:name>example1.epp.ua</domain:name>
        </domain:update>
      </update>
      <extension>
        <secDNS:update xmlns:secDNS="http://eunic.net.ua/epp/secDNS-1.1">
          <secDNS:rem>
            <secDNS:dsData>
              <secDNS:keyTag>29040</secDNS:keyTag>
              <secDNS:alg>13</secDNS:alg>
              <secDNS:digestType>2</secDNS:digestType>
              <secDNS:digest>D8E3E5405994F68CADF5FB983A7E2B9B4FE7F5EBFEAE86BA626CACFA4B84EAAC</secDNS:digest>
            </secDNS:dsData>
          </secDNS:rem>
        </secDNS:update>
      </extension>
      <clTRID>USER-1276251625</clTRID>
    </command>
  </epp>

Приклад запиту <update> domain з розширенням secDNS для видалення всіх DS-записів домена

<?xml version="1.0" encoding="UTF-8" standalone="no"?>
  <epp xmlns="urn:ietf:params:xml:ns:epp-1.0">
    <command>
      <update>
        <domain:update
         xmlns:domain="http://eunic.net.ua/epp/domain-1.1">
          <domain:name>example1.epp.ua</domain:name>
        </domain:update>
      </update>
      <extension>
        <secDNS:update xmlns:secDNS="http://eunic.net.ua/epp/secDNS-1.1">
          <secDNS:rem>
            <secDNS:all>true</secDNS:all>
          </secDNS:rem>
        </secDNS:update>
      </extension>
      <clTRID>USER-1276251625</clTRID>
    </command>
  </epp>

Перевірки відповідності даних в DS-записах даним з публічного ключа в доменній зоні

Після додавання DS-запису в реестр виконується перевірка відповідності даних DS-запису даним їх публічного ключа, що розміщений в доменній зоні.

Для цього на всіх NS-серверах домену вибираються дані про RR DNSKEY 257 (KSK-ключ), по ньому генерується дайджест та перевіряється відповідність згенерованих даних та даних, що були передані реєстратором. Якщо дані не співпадають, на технічний контакт реєстратора направляється попередження про невідповідність даних між ключем DNSKEY та DS-записом.

Якщо перевірку неможливо виконати за технічних причин (наприклад, сервери не відповідають), про це також буде направлено попередженння на технічний контакт реєстратора.