Como lo señalaron @ 王庭茂 y @LieRyan, necesita alguna forma de probar que la clave pública que se carga con el archivo de licencia en realidad proviene de su compañía y no fue colocada allí por un atacante (en su caso, alguien tratando de falsificar un archivo de licencia sin pagar). La solución a esto es hacer que su clave pública se convierta en un certificado .
Mirando su caso de uso, realmente no creo que lo que usted quiere sea una Autoridad de Certificación de confianza pública. En su lugar, debe configurarse una jerarquía de autoridad de certificación privada (esto se puede hacer de forma gratuita y con el mínimo esfuerzo con OpenSSL). No es tan aterrador como parece, una CA es en realidad solo un archivo de clave pública que OpenSSL puede usar para firmar otros archivos o certificados.
Debes configurar algunas CA de OpenSSL como esta:
luegoincrusteelcertificadodeCAraízenelcódigofuentedesuaplicación(estosedenomina fijación de certificado ). La CA raíz es un ancla de confianza, pero en realidad no hace nada más que firmar los certificados de las CA sub. En la mayoría de los casos, realmente puede desconectar la CA raíz después de haber creado sus subs. Las sub-AC son las que usas día a día para firmar cosas. Por lo general, la sub-CA firmará firma de certificados que usted usa para firmar los archivos de licencia (creando otra capa en el árbol), pero en su caso, probablemente salga con la idea de que las sub-CA firmen el Licencia de archivos directamente si eso es lo único que está utilizando para ellos. De esta manera, tiene la flexibilidad de usar múltiples claves como lo menciona en su punto # 2 (cada sub-CA es básicamente solo una clave de firma), o incluso eliminar una clave y reemplazarla por una nueva, si alguna vez necesita - sin ninguna interrupción del servicio o la necesidad de enviar parches.
Para implementar esto realmente, tendrá una sub-CA que firme el archivo de licencia, y luego enviará el archivo de licencia y el certificado de esa sub-CA al cliente. Deberá vincular OpenSSL a su aplicación para que tenga la lógica para validar un certificado. Cuando cargue un archivo de licencia a la aplicación, validará que 1) el archivo de licencia no está modificado (es decir, verifique la firma), 2) que la firma coincida con la clave en el certificado de la sub-CA, y 3) que la firma en el certificado de sub-CA coincide con el certificado de CA raíz que está incrustado en el código fuente de la aplicación. Ahora tiene una infraestructura de clave pública adecuada y segura sin necesidad de que la aplicación acepte el archivo de licencia para tener conectividad a Internet.
También abordaré la pregunta preventiva "¿Realmente vale la pena la molestia?". La respuesta es: no sé, eso depende de ti. ¿Cuánto cobras por una licencia? $ 5? Probablemente nadie se molestará en descifrar el formato de su licencia. $ 500? Puedes apostar que la gente comenzará a publicar claves falsas en línea. De su pregunta, obviamente ha decidido que vale la pena ir por la ruta de clave pública. Mi opinión es que, con seguridad, debes hacerlo correctamente o no hacerlo. Proporcionar algo que parezca a seguridad, pero que se rompa fácilmente, no evitará incluso a los atacantes poco hábiles, y brindará a sus clientes una falsa sensación de protección (lo que puede provocar indignación cuando lo descubran). / p>