假设我有我生成的RSA (2048)键盘
private.key
public.key为了测试目的,我想生成一个自签名的X509证书。
我对证书的理解是-
看起来,openssl让我很容易地创建了一个证书:
openssl req -new -key private.key -out certificate.csr但这是我困惑的地方-为什么需要我的私钥?
我可以想象它可能需要用某种东西来签名,因此使用了私钥。但是,它如何使我的公钥嵌入到证书中呢?用我的私钥倒置我的公钥是不可能的,对吧?
谢谢!
发布于 2017-06-08 21:15:32
私钥是标识您的秘密,任何签名或验证您的特定身份都需要私钥。因此,任何将产生从你的身份中衍生出来的东西的操作都需要它。
此外,您不是在这里创建证书,而是创建证书签名请求,您将将该请求交给将生成证书以授予您访问权限的其他方。
如果要创建自签名的x509证书,应该添加-x509参数,如下所示:
openssl req -x509 -nodes -days 5000 -newkey rsa:2048 -keyout mypem.key -out mycert.crt@bartonjs是正确的,私钥到公钥是可能的,公钥到私钥是不可能的。这就是为什么你可以分发公钥,没有人可以用它来模仿你。私钥必须在任何时候都是秘密的。
如果您计划充当希望访问服务器的客户端以及授予请求的服务器,则首先需要在服务器上设置证书颁发机构和服务器的证书。
堆栈溢出已经有了一个很好的答案:
但最基本的方法是,设置服务器的CA和crt,然后在服务器上执行如下操作:
openssl x509 -req -days 30 -in request.csr -CA ca.crt -CAcreateserial -CAkey ca.key -out signedrequest.crt 你把"signedrequest.crt“还给请求它的人。
我忘了提到,去掉上面命令中的-nodes,它跳过了密码过程。好的测试,坏的安全。只是一场比赛。
发布于 2017-06-08 21:07:21
用我的私钥倒置我的公钥是不可能的,对吧?
不,你的方向是反向的。
从公钥中获取私钥是不可能的。从私钥看,公钥很容易。
对于RSA,私钥是(n,d),但实际上是(p,q,e)。p*q = n,(n,e)是公钥。
对于ECDSA,私钥是d,它是将G乘以得到Q (公钥)的数字。因为您需要记住您所处的曲线,这就给了您G,而d*G仍然是Q,公钥。
发布于 2017-06-08 22:07:07
私钥文件包含所有的键区组件(即使我不包括公共部分也可以根据私有参数计算)--它确实包含它放入自签名证书或证书签名请求中的公共部分,并且它需要私有部分来实际进行(自)签名。
您可以通过以下方式从私钥文件导出公共部分:
openssl rsa -pubout -in private_key.pem -out public_key.pemhttps://security.stackexchange.com/questions/161526
复制相似问题