Java RSA和非对称加密环境中的证书是什么?

Java RSA和非对称加密环境中的证书是什么?,java,encryption,rsa,encryption-asymmetric,Java,Encryption,Rsa,Encryption Asymmetric,为了学习,我尝试实现一个非对称的描述。我了解到证书有助于识别公钥的所有者。但是如何实现证书呢?你能给我举一个我可以使用的证书的例子吗 我实现了加密和解密,但现在我想使用一个证书。您可以使用OpenSSL生成一个自签名的X.509证书-网上有很多教程。证书具有标准化的格式,并不特定于Java openssl req -x509 -newkey rsa:3072 -sha256 -nodes -keyout privkey.pem -out selfsigned.pem openssl pkcs8

为了学习,我尝试实现一个非对称的描述。我了解到证书有助于识别公钥的所有者。但是如何实现证书呢?你能给我举一个我可以使用的证书的例子吗


我实现了加密和解密,但现在我想使用一个证书。

您可以使用OpenSSL生成一个自签名的X.509证书-网上有很多教程。证书具有标准化的格式,并不特定于Java

openssl req -x509 -newkey rsa:3072 -sha256 -nodes -keyout privkey.pem -out selfsigned.pem
openssl pkcs8 -in privkey.pem -nocrypt -outform DER -out privkey.p8
openssl x509 -in selfsigned.pem -outform DER -out selfsigned.crt
这将为证书(包含公钥)和私钥生成两个文件。还有一个PEM编码的私钥和证书,Java不会直接处理。私钥文件未加密或受到其他保护,因此仅用于测试目的

该证书与for
“X.509”
兼容。私钥与
“RSA”
as算法和兼容


在生成证书时,不能直接使用Java本身。如果需要生成代码,您可以使用Bouncy Castle,甚至EJBCA,但这是一条非常陡峭的学习曲线。

证书是一段数据,它将某些附加信息附加到某人的公钥上,并由知名的第三方(权威机构)进行数字签名

证书的通用格式是X.509,用ASN1编码


一个典型的证书至少包含一个“公共名称”、主体密钥指纹(被认证公钥的散列)、有效期和所有这些内容的CA签名。

之后,您可以探索Java密钥库/信任库和PKCS 12,然后是证书链,等等,直到你了解了所有关于PKI/PKIX的知识-这是相当多的知识。注意
CertificateFactory“X.509”
可以读取PEM或DER(因此不需要第三个命令),但
KeyFactory“RSA”
只能读取PKCS8未加密的DER。Java可以在密钥库文件中创建密钥对和自签名证书(因为j9默认为PKCS12),并且因为j7也
keytool-gencert
在CA密钥下创建子证书,并从CSR创建证书。要建立一个任意的证书,你需要有弹性。哦,好的。实际上,我们从未使用过它们,我们有大量的方法来创建证书,而且openssl几乎无处不在。直接在密钥库中创建它们可能是一个好主意,这样至少可以更好地保护私钥。不幸的是,大多数代码依赖于Sun/Oracle内部软件,而公共API中缺少这些软件。