证书请求格式 证书文件格式 RSA公私钥格式 RSA如何保证私钥安全
- 2016-12-07 22:12:00
- admin
- 原创 4544
一、证书请求格式
默认pkcs10格式:
-----BEGIN CERTIFICATE REQUEST-----
-----END CERTIFICATE REQUEST-----
newhdr选项生成NEW格式:
-----BEGIN NEW CERTIFICATE REQUEST-----
-----END NEW CERTIFICATE REQUEST-----
参数说明:
-key 支持私钥格式pem和der,不指定时自动生成pkcs8格式私钥;
-sha256 指定消息摘要算法;
-newhdr 生成NEW格式证书;
-x509 不生成证书请求,直接生成自签名证书;
示例命令:
生成证书主题时,回车则使用默认值,输入点字符则忽略字段。
openssl req -new -key private.pem -sha256 -out req.csr -subj "$subject"
二、证书文件格式
1、证书后缀是pem,内容是base64编码;
2、证书后缀是der,内容是二进制格式;
3、证书后缀是crt或cer,内容是base64编码或二进制格式;
4、证书后缀是p7b或p7c,内容是pkcs7格式;
三、RSA私钥格式
openssl默认生成pkcs1格式私钥,C程序使用格式:
-----BEGIN RSA PRIVATE KEY-----
-----END RSA PRIVATE KEY-----
pkcs8格式私钥,打包私钥的格式,分加密和未加密两种:
-----BEGIN PRIVATE KEY-----
-----END PRIVATE KEY-----
-----BEGIN ENCRYPTED PRIVATE KEY-----
-----END ENCRYPTED PRIVATE KEY-----
格式转换:
1、pkcs1转换为pkcs8,openssl pkcs8 −topk8 -nocrypt -in key.pem
2、pkcs8转换为pkcs1,openssl rsa -in key.pem
四、RSA公钥格式
-RSAPublicKey_out生成pkcs1格式公钥:
-----BEGIN RSA PUBLIC KEY-----
-----END RSA PUBLIC KEY-----
-pubout生成pkcs8格式公钥,默认公钥格式:
-----BEGIN PUBLIC KEY-----
-----END PUBLIC KEY-----
五、RSA如何保证私钥安全
1、公钥密码基石:Oneway Function,单向函数,正向计算容易,不能反向计算或者非常困难;
2、公钥密码基石:Trapdoor Function,陷门函数,一种特殊单向函数,存在私钥可以反向计算;
3、m=p*q,p和q是随机质数
4、r=(p-1)(q-1),e与r互质,(e*d)%r=1
5、公钥由e和m组成,模的长度就是公钥和私钥长度;
6、私钥由d和m组成,没有p和q无法推导出r,因此无法推导出d;
7、加密操作:c=p^e mod m,e很小时有低加密指数安全问题,因为加密迭代次数有限;
8、解密操作:p=c^d mod m,e很大时有低解密指数安全问题,因为解密迭代次数有限;
9、分解整数:支持分解十进制整数,http://www.factordb.com
解析私钥:
openssl genrsa 32 2>/dev/null | openssl rsa -text -noout
Private-Key: (32 bit)
modulus: 3943717597 (0xeb105add)
publicExponent: 65537 (0x10001)
privateExponent: 150132933 (0x8f2d8c5)
prime1: 63299 (0xf743)
prime2: 62303 (0xf35f)
exponent1: 53375 (0xd07f)
exponent2: 47415 (0xb937)
coefficient: 2987 (0xbab)
私钥说明:
modulus,p*q,模的长度是密钥长度
publicExponent,公开幂e
privateExponent,私有幂d
prime1,模的素数因子p
prime2,模的素数因子q
exponent1,d mod (p−1)
exponent2,d mod (q−1)
六、RSA工具
openssl genrsa:生成私钥,默认不加密,-des3参数用于加密;
openssl rsa:显示私钥、提取公钥、转换格式,比如显示modulus;
openssl rsautl:签名验签、加密解密,签名和加密的数据长度不能超过keysize;