Come sottolineato da @ 王庭茂 e @LieRyan, hai bisogno di un modo per dimostrare che la chiave pubblica che viene caricata con il file di licenza proviene effettivamente dalla tua azienda e non è stata piazzata lì da un utente malintenzionato (nel tuo caso, qualcuno cercando di forgiare un file di licenza senza pagare). La soluzione a questo è avere la tua chiave pubblica trasformata in un certificato .
Considerando il tuo caso d'uso, non credo che un'autorità di certificazione pubblicamente affidabile sia ciò che desideri. Dovresti invece impostare una gerarchia di Autorità di certificazione privata (che può essere eseguita in-house gratuitamente e con il minimo sforzo con OpenSSL). Non è così spaventoso come sembra - una CA è in realtà solo un file di chiave pubblica che OpenSSL può usare per firmare altri file o certificati.
Dovresti configurare alcune CA OpenSSL come questa:
quindiincorporareilcertificatoCAradicenelcodicesorgenteperl'applicazione(questoèchiamato blocco dei certificati ). La CA radice esiste come un'ancora di attendibilità, ma in realtà non fa altro che firmare i certificati delle CA secondarie. Nella maggior parte dei casi è possibile portare la CA principale offline dopo aver creato i sottotitoli. Le sub-CA sono quelle che usi quotidianamente per firmare. Di solito la sub-CA firmerebbe i certificati di firma che utilizzi per firmare i file di licenza (creando un altro livello nell'albero), ma nel tuo caso puoi probabilmente farla franca avendo le sub-CA firmare il file di licenza direttamente se questa è l'unica cosa per cui li stai usando. In questo modo hai la flessibilità di usare più chiavi come menzioni nel tuo punto # 2 (ogni CA secondaria è fondamentalmente solo una chiave di firma), o anche per rimuovere una chiave e sostituirla con una nuova - se hai bisogno di - senza interruzione del servizio o la necessità di inviare patch.
Per implementare effettivamente questo, avrete una CA secondaria firmare il file di licenza e quindi inviare il file di licenza e il certificato di tale sub-CA insieme al cliente. Dovrai collegare OpenSSL all'applicazione in modo che abbia la logica per convalidare un certificato. Quando si carica un file di licenza per l'applicazione, si convaliderà che 1) il file di licenza non è modificato (ovvero controlla la firma), 2) che la firma corrisponde alla chiave nel certificato CA secondario e 3) che la firma su il certificato CA secondario corrisponde al certificato CA radice che è incorporato nel codice sorgente dell'applicazione. Ora disponi di un'infrastruttura a chiave pubblica adeguata e sicura, senza alcuna necessità per l'applicazione che accetta il file di licenza per avere la connettività Internet!
Tratterò anche la domanda preventiva "Vale veramente la pena?". La risposta è: non lo so, dipende da te. Quanto costa una licenza? $ 5 ' Probabilmente nessuno si prenderà la briga di rompere il tuo formato di licenza. $ 500? Puoi scommettere che le persone inizieranno a pubblicare chiavi false online. Dalla tua domanda, hai ovviamente deciso che vale la pena percorrere la via della chiave pubblica. La mia opinione è che con la sicurezza dovresti farlo correttamente o non farlo affatto. Fornire qualcosa che assomiglia alla sicurezza, ma è facilmente infranto, non impedirà anche gli aggressori moderatamente qualificati, e darà ai tuoi clienti un falso senso di protezione (potrebbe portare all'oltraggio quando lo scopriranno). / p>