.UA ccTLD Domain Network Information Centre
Сервер призначений для тестування роботи EPP

DNSSEC

Документи:

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

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

У блоці <svcMenu> XML-документа <greeting> ("вітання"), яке видається клієнту після встановлення з'єднання з EPP-сервером або після отримання запиту <hello>, додано рядок з описом розширення 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://hostmaster.ua/epp/contact-1.1</objURI>
       <objURI>http://hostmaster.ua/epp/domain-1.1</objURI>
       <objURI>http://hostmaster.ua/epp/host-1.1</objURI>
       <svcExtension>
         <extURI>http://hostmaster.ua/epp/rgp-1.1</extURI>
         <extURI>http://hostmaster.ua/epp/uaepp-1.1</extURI>
         <extURI>http://hostmaster.ua/epp/balance-1.0</extURI>
         <extURI>http://hostmaster.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://hostmaster.ua/epp/contact-1.1</objURI>
       <objURI>http://hostmaster.ua/epp/domain-1.1</objURI>
       <objURI>http://hostmaster.ua/epp/host-1.1</objURI>
       <svcExtension>
         <extURI>http://hostmaster.ua/epp/rgp-1.1</extURI>
         <extURI>http://hostmaster.ua/epp/uaepp-1.1</extURI>
         <extURI>http://hostmaster.ua/epp/balance-1.0</extURI>
         <extURI>http://hostmaster.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://hostmaster.ua/epp/domain-1.1">
        <domain:name>example1.epp1.ua</domain:name>
        <domain:roid>D0000725560-UA</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.epp1.ua</domain:hostObj>
          <domain:hostObj>ns2.example.epp1.ua</domain:hostObj>
        </domain:ns>
        <domain:host>ns1.example1.epp1.ua</domain:host>
        <domain:clID>ua.hostmaster</domain:clID>
        <domain:crID>ua.hostmaster</domain:crID>
        <domain:crDate>2010-06-10T15:03:12+03:00</domain:crDate>
        <domain:upID>ua.hostmaster</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://hostmaster.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>UA-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 "Синтаксична помилка параметра"
  • Блок <secDNS:dsData> містить унікальні дані
    Якщо ні - помилка 2005 "Parameter value syntax error"
  • Якщо додатково передається публічний 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://hostmaster.ua/epp/domain-1.1">
          <domain:name>example1.epp1.ua</domain:name>
          <domain:period unit="y">2</domain:period>
          <domain:ns>
            <domain:hostObj>ns1.domain.epp1.ua</domain:hostObj>
            <domain:hostObj>ns2.domain.epp1.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://hostmaster.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://hostmaster.ua/epp/domain-1.1">
          <domain:name>example1.epp1.ua</domain:name>
          <domain:period unit="y">2</domain:period>
          <domain:ns>
            <domain:hostObj>ns1.domain.epp1.ua</domain:hostObj>
            <domain:hostObj>ns2.domain.epp1.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://hostmaster.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://hostmaster.ua/epp/domain-1.1">
          <domain:name>example1.epp1.ua</domain:name>
        </domain:update>
      </update>
      <extension>
        <secDNS:update xmlns:secDNS="http://hostmaster.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://hostmaster.ua/epp/domain-1.1">
          <domain:name>example1.epp1.ua</domain:name>
        </domain:update>
      </update>
      <extension>
        <secDNS:update xmlns:secDNS="http://hostmaster.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://hostmaster.ua/epp/domain-1.1">
          <domain:name>example1.epp1.ua</domain:name>
        </domain:update>
      </update>
      <extension>
        <secDNS:update xmlns:secDNS="http://hostmaster.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-записом.

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