Cómo instalar openssl para generar un certificado
Openssl se utiliza para generar pares de claves públicas y privadas para la verificación segura de mensajes entre el sistema comercial externo y el sistema xxx. Si el usuario no necesita generar claves públicas y privadas, pero procesa directamente el mensaje, consulte la Parte 4, "Cálculo de valores de resumen y firma".
1. Haga clic en el archivo exe directamente para instalar openssl paso a paso. Parece que necesitas instalar el complemento vs2008, así que ignóralo.
2. Durante el proceso de instalación, busque el directorio de instalación de OpenSSL correspondiente, ingrese al directorio bin para buscar el archivo ejecutable openssl.exe y haga clic para ejecutar. Luego ingrese los siguientes comandos en secuencia:
a. genrsa -out private-rsa.key 1024
Nota: este comando genera una clave privada sin cifrar
genrsa genera un archivo de clave privada, almacenado en private-rsa.key, con una longitud de 1024. La clave privada se almacena en private-rsa.key y tiene una longitud de 1024. out va seguido del nombre del archivo de salida.
private-rsa.key es el archivo de clave privada generado, pero el archivo debe procesarse para obtener la clave privada.
b.req -new -x509 -key private-rsa.key -days 750 -outpublic-rsa.cer
Descripción: Generar certificado public-rsa basado en private-rsa. clave .cer. clave
-new indica una nueva solicitud
-509 indica la estructura del certificado de salida
750 indica el número de días que el certificado es válido
-out public -rsa.cer -out va seguido del certificado de clave pública utilizado para verificar la firma digital. El certificado de clave pública o clave pública debe enviarse con antelación al destinatario que necesita verificar los datos de esta unidad o departamento.
c.pkcs12 -export -name test-alias -in public-rsa.cer-inkey private-rsa.key -out 99bill-rsa.pfx
Descripción: Generar formato PKCS12. Keystore
La contraseña antes y después de ingresar debe ser la misma, esta contraseña se utilizará en el proceso de generación de claves públicas y privadas usando Keystore.
La clave pública-rsa.cer y la clave privada-rsa.key han sido generadas previamente.
Adjunto 1:
El siguiente código es la versión Java del código para obtener la clave privada de 99bill-rsa.pfx. Dado que la clave privada generada en private-rsa.key no se puede utilizar directamente, se debe realizar algún procesamiento.
Hay algunas cosas a tener en cuenta en el código:
La ruta de inicialización del flujo de archivos debe completarse en función de la ruta real.
La contraseña es la contraseña del paso c de la Sección 2, en este caso suning.
KeyStorekeyStore = KeyStore.getInstance("PKCS12");
FileInputStreamfileInputStream = newFileInputStream("D:/OpenSSL/bin/99bill-rsa.pfx");
char[]nPassword = "suning".toCharArray();
StringkeyAlias = null;
keyStore.load(fileInputStream,nPassword);
fileInputStream.close () ;
System.out.println("keystoretype=" + keyStore.getType());
Enumeración
if(enumeration.hasMoreElements())
{
keyAlias = (String) enumeration.nextElement();
FileInputStream.close ()nextElement( );
System.out.println("alias=[" + keyAlias + "]");
}
Sistema .out.println(" iskey Entry=" + keyStore.isKeyEntry(keyAlias));
PrivateKeyprikey = (PrivateKey) keyStore.getKey(keyAlias, nPassword);
/// Convierte la clave privada a caracteres String
StringprivateStr = Base64.encodeBase64String(key.getEncoded()).trim();
// Genera una cadena de clave pública, que también puede ser generado a partir de un certificado cer
Certificatecert = keyStore.getCertificate(keyAli)getCertificate(keyAlias
PublicKeypubkey = cert.getPublicKey()
StringpublicStr = Base64; .encodeBase64String(pubKey.getEncoded()) .trim();
Nota:
1. Descripción de la clase utilizada:
Base64:
importar org.apache.commons .net.util.Base64;
2.Base64;
Certificado:
importar java.security.cert. En este ejemplo, la contraseña es suning.
1. Método de generación y resumen
Proceso de generación de resumen (el método de resumen implementa los tres procesos siguientes):
1. ingresar datos del mapa para ordenar
2. Generar cadenas en la forma a1=b1&a2=b2&a3=b3, excluyendo ciertos valores clave de cadena
3. ;
Los tres pasos anteriores se implementan mediante el método Digest.digest():
String digest = Digest.digest(Map
Ingrese el contenido del cuerpo del mensaje http, como la cadena a1=b1&a2=b2&a3=b3, extraiga la cadena que necesita ser firmada. y se convierte en forma de mapa. execludeKes es el campo que se excluirá y es una matriz de cadenas.
Calcular el resumen es un paso clave, porque los campos seleccionados requieren que el remitente y el receptor sean el mismo, es decir, el remitente calcula el resumen de qué campos, luego el receptor también debe calcular el resumen de los mismos campos; de lo contrario, se informará el error 6601.
Explicación: a. Map es un campo que almacena resúmenes de cálculo.
b. Las claves representan campos excluidos que no se pueden usar para calcular resúmenes, como firmas y algoritmos de signo.
2. Método de conversión de cadena y certificado de clave pública
Propósito de la conversión: facilitar el almacenamiento. (Los comerciantes también pueden proporcionar directamente certificados de clave pública, pero para los comerciantes que proporcionan cadenas de claves públicas al sistema de verificación de firmas, se debe utilizar el siguiente código para convertir la clave pública en una cadena)
1. clave/clave privada La cadena de clave se convierte en una clave pública/clave privada, y la cadena principal se convierte en una clave pública PublicKey
X509EncodedKeySpec pubKeySpec = newX509EncodedKeySpec(Base64.decodeBase64(strPubKey) ); p>
KeyFactorykeyFactory = KeyFactory. getInstance(RSA);
PublicKeypubKey = keyFactory.generatePublic(pubKeySpec);
2. Convierta la clave pública o privada en una cadena Base64; :
StringpublicStr = Base64.encodeBase64String( Base64.encodeBase64String);
3.encodeBase64String( pubKey.getEncoded()).trim();
3. Método de verificación de clave pública y privada
Propósito de la verificación: una vez generadas la clave pública y la clave privada, es necesario compararlas y verificarlas. (En el pasado, las claves públicas y privadas generadas por muchos comerciantes eran confusas y no podían determinar si las claves públicas y privadas coincidían, por lo que se unieron al sistema de verificación de firmas). Este código lo ejecuta el usuario mediante la verificación junit. Verifique si la clave pública y la clave privada se generan correctamente. Si el resultado es verdadero, significa que la clave pública y la clave privada se generaron correctamente; de lo contrario, hay un problema con la clave pública y la clave privada generadas y no se pueden usar.
String prik1 = "";
String pubb = "";
String data = "wkk"
String digest = Digest.digest(datos);
Clave privada clave privada =RSAUtil.getPrivateKey(prik1);
Signo de cadena =RSAUtil.sign(digest, clave privada);
resultado booleano =RSAUtil.vertiy( resumen, signo,
RSAUtil.getPublicKey(pubb));
System.out.println(resultado);