起因
因为在公司带头用.Net Core写新项目,所以在写项目中遇到的各种问题,不管他是什么引起的,都会被指过来。
项目开发中途出现需求需要对接其他公司接口,使用证书进行认证传输,之前在.Net下搞过但是都是对方给我证书
这次需要我生成公钥/私钥,公钥给他这样操作。
生成私钥/公钥(这里是RSA算法,长度规定是2048)
我使用的是jdk-11.0.2
//生成私钥
//此行命令解释为:将使用RSA算法生成2048位的公钥/私钥对及整数,密钥长度为2048位,SHA256withRSA使用的算法, 证书有效期为385天。使用的密钥库为mykeystore1文件,别名为privatekey(后面可以直接用这个别名来代表mykeystore1文件)。
keytool -genkey -alias privatekey -keyalg RSA -keysize 2048 -sigalg SHA256withRSA -keystore mykeystore1 -validity 385 //生成证书 keytool -export -alias privatekey -keystore mykeystore1 -file mykeystore1.cer //生成公钥 keytool -import -alias pulbiccert -file mykeystore1.cer -keystore publicmykeystore1 -storepass 123456
代码部分
//调用证书 X509Certificate2 privateCert = new X509Certificate2(Path.Combine(System.AppContext.BaseDirectory, "mykeystore1"), "123456", X509KeyStorageFlags.MachineKeySet | X509KeyStorageFlags.PersistKeySet | X509KeyStorageFlags.Exportable); //获取私钥的Key #if NET452 RSACryptoServiceProvider privateKey = (RSACryptoServiceProvider)privateCert.PrivateKey; RSACryptoServiceProvider privateKey1 = new RSACryptoServiceProvider(); privateKey1.ImportParameters(privateKey.ExportParameters(true)); #else var privateKey = privateCert.GetRSAPrivateKey().ExportParameters(true); #endif //这里的content是我需要签名的数据 byte[] rgb = Encoding.UTF8.GetBytes(content); RSACryptoServiceProvider privateKey1 = new RSACryptoServiceProvider(); privateKey1.ImportParameters(privateKey); //加密算法 和 生成秘钥的对应起来 var halg = new SHA256CryptoServiceProvider(); byte[] inArray = privateKey1.SignData(rgb, halg); //签名后转Base64 string signature = Convert.ToBase64String(inArray);
结尾
做完这些你的签名就出来了 按照接口提供方的格式传递数据就完工了。