Migración de RSA Keon CA con nCipher
A continuación se describe cómo migrar de otra CA a EJBCA.
Introducción
Para demostrar los pasos específicos y ayudarle a reproducirlos, se seleccionó una CA específica: RSA Keon CA. La idea general de migración es la misma para otras implementaciones de CA.
La migración de otra CA a EJBCA consta de los siguientes pasos:
Migración de las claves de firma de las CA en nCipher HSM, lo que permite que las claves puedan ser utilizadas por EJBCA
Importación de la CA dentro de EJBCA
Importación de los certificados de usuario en EJBCA
A continuación se describe cómo migrar una instalación simple de KCA a EJBCA y se recomienda realizar primero una migración de prueba para familiarizarse con el proceso.
Entornos
Keon CA
Una configuración de KCA en un entorno de destino:
Servidor Windows 2003
KCA 6.5
Una CA raíz: TestKCARootCA
Una sub CA – TestKCASubCA
Claves de firma para las CA en la tarjeta PCI nCipher nShield
5 usuarios emitidos por TestKCASubCA
Después de la instalación de este entorno, realice una copia de seguridad del mundo de seguridad nCipher, de los certificados CA y de los certificados de usuario.
EJBCA
Se elige un entorno de destino para EJBCA:
Ubuntu Linux 7.04 AMD64
JBoss 4.2.0, MySQL 5.0
EJBCA 3.5 o posterior; se recomienda 3.9
Una CA raíz: TestKCARootCA
Una sub CA – TestKCASubCA
Claves de firma para las CA en nCipher nShield PCI kort
5 usuarios emitidos por TestKCASubCA
Migración de claves de firma de KCA
Este ejemplo asume que las claves de la CA de Keon se utilizan en un HSM de Thales/nCipher. Si se utiliza otro HSM, la migración de claves probablemente sea más sencilla, ya que PKCS#11 se puede usar inmediatamente. Sin embargo, tenga en cuenta que aún es necesario generar un objeto de certificado en el HSM para que Java pueda usar las claves.
Configurar PKCS#11 para nCipher
Para nCipher, el número de ranura es una ranura virtual con un nombre desconocido. Puede usar la ranura predeterminada omitiendo el número de ranura. Para usar nCipher PKCS#11, se deben configurar ciertos parámetros.
Cree el archivo /opt/nfast/cknfastrc con el siguiente contenido:
CKNFAST_LOADSHARING=1CKNFAST_NO_ACCELERATOR_SLOTS=1CKNFAST_NO_UNWRAP=1CKNFAST_OVERRIDE_SECURITY_ASSURANCES=import Claves de firma
Al instalar KCA, genera claves en el HSM nCipher. Estas claves están en formato nativo y solo KCA puede usarlas. No hay ninguna clave pública asociada al HSM.
Comencemos enumerando información general sobre el HSM:
C:\nfast\bin>enquiryServer:enquiry reply flags noneenquiry reply level Sixserial number B1BB-0EE9-3511mode operationalversion 2.23.6speed index 440rec. queue 422..622level one flags Hardware HasTokensversion string 2.23.6cam6, 2.22.43cam8 built on Oct 13 200616:16:12checked in 00000000431dca98 Tue Sep 06 18:58:00 2005level two flags nonemax. write size 8192level three flags KeyStoragelevel four flags OrderlyClearUnit HasRTC HasNVRAM HasNSOPermsCmdServerHasPollCmds FastPollSlotList HasSEE HasKLF HasShareACLHasFeatureEnable Ha sFileOp HasPCIPush HasKernelInterface HasLongJobsServerHasLongJobs AESModuleKeys NTokenCmds LongJobsPreferredcode 0 type module 0product name nFast serverdevice nameEnquirySix version 4groups impath kxfeature ctrl flags nonefeatures enabled noneversion serial 0Module #1:enquiry reply flags noneenquiry reply level Sixserial number B1BB-0EE9-3511mode operationalversion 2.22.43speed index 440rec. queue 19..152level one flags Hardware HasTokensversion string 2.22.43cam8 built on Oct 13 2006 16:16:12checked in 00000000452f6a4d Fri Oct 13 12:28:29 2006level two flags nonemax. write size 8192level three flags KeyStoragelevel four flags OrderlyClearUnit HasRTC HasNVRAM HasNSOPermsCmdServerHasPollCmds FastPollSlotList HasSEE HasKLF HasShareACLHasFeatureEnable Ha sFileOp HasPCIPush HasKernelInterface HasLongJobsServerHasLongJobs AESModuleKeys NTokenCmds LongJobsPreferredcode 7 type module 7product name nC1003P /nC3023Pdevice name #1 PCI bus 7 slot 1EnquirySix version 5groups impath kx DHPrime1024feature ctrl flags LongTermfeatures enabled StandardKMversion serial 24rec. LongJobs queue 18SEE machine type de máquina PowerPCSXFC:\nfast\bin>nfkminfo.exeWorldgeneration 2state 0x17270000 Initialised Usable Recovery !PINRecovery!ExistingClient RTC NVRAM FTO SEEDebugn_modules 1hknso 057731d6c635560900003fed89eba88c5082f2a1hkm b08e66b01777fcf34dceb77c0684c8d1a071144e ( type DES3)hkmwk 1d572201be533ebc89f30fdd8f3fac6ca3395bf0hkre b0f5dbebedc703c6acd7685b261f6748bc4a9535hkra 7368a945efc76505a19092c5115f493716de3172hkmc 1d1e3fb769837be06e028bc038d1789ced2ac9e1hkrtc 55f17755cae9ae49a588f154260306deeae1f5cchknv 82674f0623407fbaac5a3aaa0fc08346dff34f37hkdsee 6df83c268c25939c307f61245235a2ac44e487aehkfto cae32a48bd1b9e68e606ae723f8dcb93eb4ee9abhkmnull 1d572201be533ebc89f30fdd8f3fac6ca3395bf0ex.client nonek-out-of-n 1 /1other quora m=1 r=1 nv=1 rtc=1 dsee=1 fto=1createtime 2007-07-16 14:58:41nso timeout 10 min Module #1generation 2state 0x2 Usableflags 0x0 !ShareTargetn_slots 2esn B1BB-0EE9-3511hkml 5e43facc6aa39068092762d80a1954bded193b4bModule #1 Slot #0 IC 25generation 1phystype SmartCardslotlistflags 0x2 SupportsAuthenticationstate 0x5 Operatorflags 0x10000 Passphraseshareno 1shares LTU(PIN)error OKCardsetname ”oper”k-out-of-n 1 /1flags NotPersistent PINRecoveryForbidden(disabled) !RemoteEnabledtimeout nonecard names ””hkltu 3126f2b3cf7d9d53e3ba278a081ef471644298f8gentime 2007-07-16 15:00:07Module #1 Slot #1 IC 0generation 1phystype SoftTokenslotlistflags 0x0state 0x2 Emptyflags 0x0shareno 0shareserror OKNo CardsetNo Pre-Loaded ObjectsPara ver las claves utilizadas, ejecute el siguiente comando:
C:\nfast\bin>nfkminfo -kKey list - 19 keysAppName rsa-keon-ca- 65 Ident 1184599865281000AppName rsa-keon-ca- 65 Ident 1184599867765000AppName rsa-keon-ca- 65 Ident 1184599888484000AppName rsa-keon-ca- 65 Ident 11845998900AppName rsa-keon-ca- 65 Ident 1184599947937000AppName rsa-keon-ca- 65 Ident 1184599969937000AppName rsa-keon-ca- 65 Ident 1184599971843000AppName rsa-keon-ca- 65 Ident 1184599974609000AppName rsa-keon-ca- 65 Ident 1184599977718000AppName rsa-keon-ca- 65 Ident 1184599980515000AppName rsa-keon-ca- 65 Ident 1184599982765000AppName rsa-keon-ca- 65 Ident 1184599985656000AppName rsa-keon-ca- 65 Ident 1184599987625000AppName rsa-keon-ca- 65 Ident 1184599989140000AppName rsa-keon-ca- 65 Ident 1184599991234000AppName rsa-keon-ca- 65 Ident 1184600151640000AppName rsa-keon-ca- 65 Ident 1184600153609000AppName rsa-keon-ca- 65 Ident 1184659106609000AppName rsa-keon-ca- 65 Ident 1184659187875000Hay varias claves, y no podemos determinar inmediatamente cuál es la clave de firma de la CA. Esto se puede determinar con el siguiente ejemplo:
C:\nfast\bin>pubkey-find.exe c:\kca.peminput format certnCore hash d0196ea2e070315e9e162c28dcdc5a524bf6380dunnamedappname rsa-keon-ca- 65ident 1184659106609000Luego, agrega la clave pública correspondiente:
C:\nfast\bin>pubkey-find.exe --augment c:\kca.pemA continuación, “mueva” la clave para que pueda ser utilizada por PKCS#11:
C:\nfast\bin>generatekey --retarget –no-verify pkcs1113 : 40 : 30 WARNING: nfgk_debug_output is now deprecated (see manual).from-application: Source application? (jcecsp, pkcs11, rsa-keon-ca- 65 )[ jcecsp default jcecsp] > rsa-keon-ca- 65from-ident: Source key identifier? ( 1184599865281000 , 1184599867765000 , 1184599888484000 , 11845998900 , 1184599947937000 , 1184599969937000 , 1184599971843000 , 1184599974609000 , 1184599977718000 , 1184599980515000 , 1184599982765000 , 1184599985656000 , 1184599987625000 , 1184599989140000 , 1184599991234000 , 1184600151640000 , 1184600153609000 , 1184659106609000 , 1184659187875000 ) [ 1184599865281000 ]> 1184659106609000plainname: Key name? [] >ERROR: plainname: key name unspecifiedplainname: Key name? [] > kcaSignkey generation parameters:operation Operation to perform retargetapplication Application pkcs11slot Slot to read cards from 0verify Verify security of key nofrom-application Source application rsa-keon-ca- 65from-ident Source key identifier 1184659106609000plainname Key name kcaSign***************************************************** WARNING: will not verify the security of the key *****************************************************Loading `oper':Module 1 : 0 cards of 1 readModule 1 slot 0 : `oper' # 1Module 1 slot 0 :- passphrase supplied - reading cardCard reading complete.Key successfully retargetted.Path to key: c:\nfast\kmdata\local\key_pkcs11_uc3126f2b3cf7d9d53e3ba278a081ef471644298f8-628484d430c6c0502fdb1a520fb84b9dc73c8372Para usar la clave pública mediante PKCS#11, asocie un certificado a la clave. Para ello, tomamos el certificado real:
C:\nfast\bin>ckcerttool.exe -c oper -fc:\ca\kca.pem -k uc3126f2b3cf7d9d53e3ba278a081ef471644298f8-628484d430c6c0502fdb1a520fb84b9dc73c8372 -L kcaSignCertificate found, processing...Please enter the passphrase for ”oper” token (No echo set).Passphrase:Certificate successfully imported.Run cklist to view your certificate object.OKA continuación, genere dos claves más para EJBCA. Una de ellas se usará para el cifrado interno y la otra para las pruebas del HSM. Esta generación debe realizarse como se describe en la Guía de Operaciones de EJBCA , utilizando las herramientas habituales de EJBCA. Genere una clave RSA de 2048 bits con el alias kcaDefault y una clave RSA de 1024 bits con el alias kcaTest.
keytool -generate -keystore NONE -storetype PKCS11-NFastJava -storepass foo123-alias kcaDefault -keyalg RSA -keysize 2048keytool -generate -keystore NONE -storetype PKCS11-NFastJava -storepass foo123-alias kcaTest -keyalg RSA -keysize 1024Utilizamos las herramientas EJBCA para obtener la asociación automática entre la clave privada y un certificado (ficticio), para que pueda ser utilizado a través del proveedor Java PKCS#11.
Importando la CA
Después de realizar la redirección de las claves para la CA raíz y la CA secundaria, puede usar las claves de EJBCA y comenzar a importar certificados de CA a EJBCA.
Tenga en cuenta que KCA no utiliza el mismo orden DN que EJBCA de manera predeterminada, por lo que si desea que el certificado emitido tenga exactamente el mismo aspecto, desactive la opción Usar orden DN LDAP de EJBCA después de la instalación.
Instale EJBCA como de costumbre con un ManagementCA, después de lo cual podrá importar las CA desde KCA desde el script de ayuda.
bin/ejbca.sh ca importca TestKCARootCA --hard --cp org.cesecore.keys.token.PKCS11CryptoToken --ctpassword foo123 --prop rootca.properties --cert TestKCARootCA-chain.pemEl archivo rootca.properties contiene:
defaultKey rootDefaultcertSignKey rootSigncrlSignKey rootSigntestKey rootTestpin foo123sharedLibrary /opt/nfast/toolkits/pkcs11/libcknfast.soHaga lo mismo para la SubCA:
bin/ejbca.sh ca importca TestKCASubCA --hard --cp org.cesecore.keys.token.PKCS11CryptoToken --ctpassword foo123 --prop rootca.properties --cert TestKCASubCA-chain.pemEl subca.properties contiene:
defaultKey subDefaultcertSignKey subSigncrlSignKey subSigntestKey subTestpin foo123sharedLibrary /opt/nfast/toolkits/pkcs11/libcknfast.soTestKCASubCA-chain.pem se crea con:
cat TestKCASubCA.pem TestKCARootCA.pem > TestKCASubCA-chain.pemAhora EJBCA tiene una CA raíz y una CA secundaria que utilizan las mismas claves de firma que KCA.
Importación de certificados de usuario
En EJBCA, el siguiente comando importa certificados de usuario:
bin/ejbca.sh ca importcert --username kca1 --password foo123 --caname TestKCASubCA -a ACTIVE -f user1.pemEl comando no importa información sobre la revocación. Es posible implementar la información completa de revocación mediante programación.
Puede crear su propia herramienta de migración y agilizar el proceso usando el código de la línea de comandos como plantilla. Se encuentra en modules/ejbca-ejb-cli/src/org/ejbca/ui/cli/ca/CaImportCertCommand.java .