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-256 | Secure Hash Algorithm Version 2, 256 | RFC 4634 |
4 | SHA-384 | Secure Hash Algorithm Version 2, 384 | RFC 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-записом.
Якщо перевірку неможливо виконати з технічних причин (наприклад, сервери не відповідають),
про це також буде направлено попередженння на технічний контакт реєстратора.