准备阶段:
安装jdk的keytool命令
安装openssl命令
注:也可以只是用openssl产生证书。
1使用jdk提供的keytool工具创建keystore证书
说明:
-alias指定别名为test-server;
dname 由C 国家,ST 省份,L 城市,OU 单位,CN 一般网址(可以填任意)组成;
-keyalg指定RSA算法;
-keystore指定密钥文件名称为test-serverstore;
-storepass指定存储密码;
-keypass指定私钥密码;
-validity指定有效期为3650天。
2将生成的keystore转换为PKCS12
通过keytool -importkeystore -help查看参数说明。
3从PKCS12证书中提取公钥证书
通过openssl pkcs12 -help 查看参数说明。
4从PKCS12证书中提取私钥
提取私钥。
转换证书为rsa格式。
5查看nginx是否安装了ssl模块
通过nginx -V 查看,如果出现 (configure arguments: --with->
创建Keystore:可以使用keytool命令行工具或者Java代码来创建Keystore。例如,使用keytool工具创建Keystore可以使用如下命令:
keytool -genkey -v -keystore my-release-keykeystore -alias alias_name -keyalg RSA -keysize 2048 -validity 10000
其中,-genkey表示创建Keystore和密钥,-v表示输出详细信息,-keystore指定Keystore文件名,-alias指定密钥别名,-keyalg指定密钥算法,-keysize指定密钥长度,-validity指定密钥的有效期。
在Keystore中添加密钥:可以使用Java代码来添加密钥,例如:
KeyStore ks = KeyStoregetInstance(KeyStoregetDefaultType());
ksload(null, null);
KeyPairGenerator kpg = KeyPairGeneratorgetInstance("RSA");
kpginitialize(2048);
KeyPair kp = kpggenerateKeyPair();
Certificate[] chain = new Certificate[1];
chain[0] = generateCertificate(kp);
kssetKeyEntry("mykey", kpgetPrivate(), "password"toCharArray(), chain);
ksstore(new FileOutputStream("mykeystorejks"), "password"toCharArray());
其中,首先使用KeyStoregetInstance方法获取Keystore实例,然后使用ksload方法加载Keystore,接着使用KeyPairGeneratorgetInstance方法获取密钥生成器,初始化生成器并生成密钥对,使用generateCertificate方法生成证书,最后使用kssetKeyEntry方法将私钥添加到Keystore中。
使用Keystore:在应用程序中使用Keystore可以通过Java代码实现。例如,可以使用以下代码获取Keystore中的密钥:
KeyStore ks = KeyStoregetInstance("AndroidKeyStore");
ksload(null);
KeyStoreEntry entry = ksgetEntry("mykey", null);
PrivateKey privateKey = ((KeyStorePrivateKeyEntry) entry)getPrivateKey();
其中,使用KeyStoregetInstance方法获取Keystore实例,使用ksload方法加载Keystore,然后使用ksgetEntry方法获取Keystore中的密钥。在获取密钥后,就可以使用其进行加密和解密等 *** 作。
JWT是JSON Web Token的缩写,是一个轻巧的规范,一个开放的行业标准,它定义了一种简洁的、自包含的协议格式,这个规范允许我们使用JWT在用户和服务器之间传递安全可靠的消息
一个JWT实际上就是一个字符串,它由三部分组成,头部、荷载与签名
头部描述关于该JWT的最基本的信息,例如其类型以及签名所用的算法等
例如{"type":"JWT","alg":"HS256"}
其头部指明了签名算法是HS256算法
HMAC算法(非对称的)
SH256
RSA
荷载就是存放有效信息的地方
定义一个payload:{"sub":"1234567890","name":"John Doe","admin":true}
签证又由三部分组成,base64加密后的header和base64加密后的payload使用,连接组成的字符串
然后通过header中声明的加密方式进行加盐secret组合加密
1、jwt基于json,非常方便解析
2、可以在令牌中自定义丰富的内容,易扩张
3、通过非对称加密算法以及数字签名技术,JWT防止篡改,安全性高
4、资源服务使用JWT可不依赖认证服务即可完成授权
JWT令牌较长,占存储空间比较大
一个公钥对应一个私钥,私钥作为签名给JWT加密,那么这里需要生成与之对应的公钥:
输入密钥库口令: keytool -list -keystore changgoujks
显示的信息为:
密钥库类型: jks
密钥库提供方: SUN
您的密钥库包含 1 个条目
changgou, 2020-7-28, PrivateKeyEntry,
证书指纹 (SHA1): 45:2E:51:8B:84:86:03:8C:AF:99:14:5F:4F:D6:98:33:39:92:33:79
输入命令后就可以得到公钥:
注释:classPathResource:私钥位置;
new KeyStoreKeyFactory:创建私钥工厂,需要私钥库密码和私钥位置两个参数;
keyStoreKeyFactorygetKeyPair(alias,passwordtoCharArray):获取keyPair对象,keyPairgetPrivate()即是获取私钥;
根据私钥获取令牌:JwtHelperencode(JSONtoJSONString(map,new RsaSigner(rsaPrivateKey));
(1)Openssl公私钥
使用Openssl公钥私钥用于外部商户系统xxx系统间报文安全性验证使用者需要公私钥直接报文进行处理则参考第四部计算摘要及签名值
1 安装openssl步骤直接点击exe文件现需要安装vs2008插件直接忽略
2 安装程找OpenSSL相应安装目录进入bin目录找opensslexe执行文件点击运行别按顺序输入命令:
a genrsa –out private-rsakey 1024
说明:该命令没加密私钥
genrsa 私钥文件私钥存储private-rsakey度1024out面指定输文件名
private-rsakey 私钥文件该文件必须经处理私钥
b req –new –x509 –key private-rsakey –days 750 –outpublic-rsacer
说明:根据private-rsakey证书public-rsacer
-new 表示新请求
-509 表示输证书结构
750表示证书效数
-out public-rsacer -out面表示公钥证书用于验证数字签名公钥证书或者公钥需要提前发送给需要验证本单位或部门数据接收
c pkcs12 –export –name test-alias –in public-rsacer–inkey private-rsakey –out 99bill-rsapfx
说明:PKCS12 格式Keystore
密码前输入要致密码用Keystore公私钥程用
Public-rsacer, private-rsakey前
附1:
述代码99bill-rsapfx获取私钥Java版本代码private-rsakey私钥直接使用必须进行定处理
代码几注意点:
文件流初始化路径需要根据自实际路径填写
密码第二节c步骤密码本实例输入suning
KeyStorekeyStore = KeyStoregetInstance("PKCS12");
FileInputStreamfileInputStream = newFileInputStream("D:/OpenSSL/bin/99bill-rsapfx");
char[]nPassword = "suning"toCharArray();
StringkeyAlias = null;
keyStoreload(fileInputStream,nPassword);
fileInputStreamclose();
Systemoutprintln("keystoretype=" + keyStoregetType());
Enumerationenumeration = keyStorealiases();
if(enumerationhasMoreElements())
{
keyAlias = (String) enumerationnextElement();
Systemoutprintln("alias=[" + keyAlias +"]");
}
Systemoutprintln("iskey entry=" + keyStoreisKeyEntry(keyAlias));
PrivateKeyprikey = (PrivateKey) keyStoregetKey(keyAlias, nPassword);
//私钥转字符串
StringprivateStr = Base64encodeBase64String(prikeygetEncoded())trim();
//公钥字符串通cer证书
Certificatecert = keyStoregetCertificate(keyAlias);
PublicKeypubkey = certgetPublicKey();
StringpublicStr = Base64encodeBase64String(pubKeygetEncoded())trim();
注意:
1 所用类说明:
Base64:
import orgapachecommonsnetutilBase64;
Certificate:
import javasecuritycertCertificate;
2 openssl公私钥程用户输入密码本例密码suning
1 摘要及
摘要程(digest全部实现述3程):
1 根据key传map数据排序;
2 a1=b1&a2=b2&a3=b3形式字符串排除某些字符串Key值;
3 调用digest进行md5编码;
三步均通Digestdigest()实现:
String digest = Digestdigest(Map map, String keys);
传递>
查看应用签名的MD5、SHA1、SHA256值及签名算法。
查看keystore文件签名信息,前提要有keystore文件和密钥,才能够获取keystore文件的签名信息。
方法一:(适用于 AS)
1)打开 AS工具窗口栏右边的 Gradle -> Project -> app -> Tasks -> android -> signingReport,双击运行 signingReport;
在没有keystore文件和密钥的情况下,要想查看我们所需应用的签名信息,就需要借助 keytool 工具来完成。
首先解压要查看的apk包,通过数据证书管理工具 keytool 查看apk的签名信息。具体步骤如下:
1)将apk修改后缀为 rar 文件后进行解压;
2)进入解压后的 META-INF 目录,找到该目录下的 xxxRSA 文件;
3)通过命令 cmd 打开DOS窗口,输入命令 : keytool -printcert -file [RSA文件路径]
在查看应用签名信息过程中,可能会遇到以下几个问题:
定位 keytoolexe 工具所在的目录,使用相关 *** 作命令查看签名信息;
JKS(Java KeyStore) :是 Java 的 keytools 证书工具支持的证书私钥格式。jks 包含了公钥和私钥,可以通过 keytool 工具来将公钥和私钥导出。因为包含了私钥,所以 jks 文件通常通过一个密码来加以保护。一般用于 Java 或者 Tomcat 服务器。
PKCS #12 :定义了一种存档文件格式,用于实现存储许多加密对象在一个单独的文件中。通常用它来打包一个私钥及有关的 X509 证书,或者打包信任链的全部项目。
定位 keytoolexe 工具所在的目录,使用 *** 作命令转换证书格式;
以上就是关于nginx配置https全部的内容,包括:nginx配置https、keystore怎么用、JWT令牌详解等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)