Всё правильно написали: генерация ключа и запись в БД.
Потом при обновлениях/суппорте проверяется ключ, если совпал ключ и домен — доступ, нет — вывод предупреждения.
Проблема здесь в том, что Вы от клиента не можете нормально поправить код, если он шифрован.
Вдруг он захочет что-то поменять в коде — он же его купил?
Открытость кода — признак «нормальной CMS».
А если код открыт, то тогда Ваша лицензия пойдёт лесом.
Вот так и получается — или делаете нормальную CMS, или платную:)
Выходом считается ещё сделать несколько редакций: бесплатный вариант, платный шифрованный за небольшие деньги на 1 домен, платный нешифрованный без ограничений.
Платный нешифрованный потом покупается вскладчину, зануляется и выкладывается в паблик;)
Ещё вариант: полностью бесплатный, докупаются лишь мелкие модули за небольшие деньги.
И последний вариант — это не продажа, а SAAS услуги, когда все сайты и CMS у Вас на хостинге, клиент платит только за хостинг с двигом, не имея прямого доступа к файлам и коду. Вариант типа Юкоз:)