我知道X.509证书签名过程包括创建一个CSR (证书签名请求),然后发生以下情况:
然而,我仍然不清楚“要签署的证书中的一些数据”和“签名”是什么。
根据我对公钥密码学的基本知识,我知道公钥用于加密,私钥用于解密。但是,这与创建签名和验证签名有什么关系呢?
例如,我可以编写以下代码,也不例外:
usrCer.verify(issuerCert.getPublicKey());我知道来自usrCer的签名和issuerCert的公钥涉及到这个过程,但是谁能告诉我更详细的具体情况呢?
我的问题是:
true/false和签名本身有关?发布于 2022-01-31 11:33:46
我还不清楚要签署的证书中有哪些数据
证书是一个具有各种字段的复杂对象。通常,签名加密对象由三部分组成:
证书结构是在RFC 5280中定义的,特别是在ASN.1模块中:
TBSCertificate ::= SEQUENCE {
version [0] Version DEFAULT v1,
serialNumber CertificateSerialNumber,
signature AlgorithmIdentifier,
issuer Name,
validity Validity,
subject Name,
subjectPublicKeyInfo SubjectPublicKeyInfo,
issuerUniqueID [1] IMPLICIT UniqueIdentifier OPTIONAL,
-- If present, version MUST be v2 or v3
subjectUniqueID [2] IMPLICIT UniqueIdentifier OPTIONAL,
-- If present, version MUST be v2 or v3
extensions [3] Extensions OPTIONAL
-- If present, version MUST be v3 -- }TBS数据包括版本、序列号、有效期、主体、发行人、公钥和扩展。
但是,这与创建签名和验证签名有什么关系呢?
相反的进程:用于加密的私钥和用于解密的公钥。这是非对称密码学的特性:一个密钥用于加密,另一个用于解密。哪一个是公共的,哪个是私人的--这只是合乎逻辑的决定,它是双向的。
有人能告诉我更详细的具体情况吗?
发行人在TBS数据上计算单向散列,并使用其私钥加密并生成签名。在验证期间,您将获得颁发者的公钥并对存储在签名中的散列进行解密。然后对TBS数据计算相同的哈希值,并将此哈希值与您从签名中解密的哈希值进行比较。如果它们匹配,那么TBS中的数据就不会被修改,因为签名是由发行者生成的。否则,TBS数据中的数据将在签发人签名后进行修改。
https://security.stackexchange.com/questions/259235
复制相似问题