我在服务器上有一个证书链:
Certificate chain
0 s:/******/O=Foobar International BV/OU****
i:/C=US/O=Symantec Corporation/OU=Symantec Trust Network/****
1 s:/C=US/O=Symantec Corporation/OU=Symantec Trust Network/****
i:/C=US/O=VeriSign, Inc./OU=VeriSign Trust Network/OU=**** - G5
2 s:/C=US/O=VeriSign, Inc./OU=VeriSign Trust Network/OU=**** - G5
i:/C=US/O=VeriSign, Inc./OU=Class 3 Public Primary Certification Authority
Run Code Online (Sandbox Code Playgroud)
我的本地根CA证书是:
s:/C=US/O=Symantec Corporation/OU=Symantec Trust Network/****
i:/C=US/O=VeriSign, Inc./OU=VeriSign Trust Network/OU=**** - G5
Run Code Online (Sandbox Code Playgroud)
我正在使用此代码段来验证证书:
//gcc -lssl -lcrypto -o certverify certverify.c
#include <openssl/ssl.h>
#include <openssl/asn1.h>
#include <openssl/bio.h>
#include <openssl/x509.h>
#include <openssl/x509_vfy.h>
#include <openssl/pem.h>
#include <openssl/x509v3.h>
#include <openssl/err.h>
#include <openssl/conf.h>
#include <string.h>
int main() {
const char ca_bundlestr[] …
Run Code Online (Sandbox Code Playgroud) 根据安全扫描程序的结果,我需要限制应用程序信任的证书颁发机构。
扫描结果指出 处的线webView.loadUrl("https://example.com/page");
。我看到了如何创建一个使用我的 TrustManager 的 SslSocketFactory,但我在 WebView 中没有看到允许我设置它的 API。
https://developer.android.com/training/articles/security-ssl.html#UnknownCa
有哪些可能的方法来实现这一目标?
我在 docker 环境中实现了一组微服务。这些服务中的每一个都使用 JWT 令牌相互通信。当服务 A 调用服务 B 时
公钥/私钥生成过程由微服务本身完成,然后他们将公钥传递给公钥存储。所以公钥存储唯一要做的事情,
我将要做的类似于此图中显示的内容。
我从上面的图片中得到:https : //www.youtube.com/watch?v=dBdZrw2pPvc&t=462s
所以我的问题是,这种公钥存储是否有任何标准实现?如果有,它们是什么?
只是想将这个问题作为“澄清”而不是决议提出:
java keytool 有-importcert
带-trustcacerts
arg的命令。来自官方帮助指南。
从 CA 导入证书回复
导入对您提交证书签名请求的 CA 的公钥进行身份验证的证书后(或 cacerts 文件中已经有这样的证书),您可以导入证书回复并将您的自签名证书替换为证书链。此链是 CA 为响应您的请求而返回的链(当 CA 回复是链时),或者是使用证书回复和已在导入回复的密钥库或 cacerts 密钥库文件中的密钥库。
例如,如果您向 VeriSign 发送了证书签名请求,那么您可以使用以下内容导入回复,假设返回的证书名为 VSMarkJ.cer:
keytool -importcert -trustcacerts -file VSMarkJ.cer
我还从keytool
文档中阅读了以下内容:
如果回复是单个 X.509 证书,keytool 会尝试建立信任链,从证书回复开始到自签名证书(属于根 CA)结束。证书回复和用于验证证书回复的证书层次构成了新的别名证书链。如果无法建立信任链,则不会导入证书回复。在这种情况下,keytool 不会打印出证书并提示用户验证它,因为用户很难(如果不是不可能的话)确定证书回复的真实性。
如果回复是 PKCS#7 格式的证书链,则在 keytool 尝试将回复中提供的根 CA 证书与任何密钥库或“cacerts”密钥库文件中的可信证书(如果指定了 -trustcacerts 选项)。如果找不到匹配项,则打印出根 CA 证书的信息,并提示用户对其进行验证,例如,通过将显示的证书指纹与从其他(受信任的)信息源获得的指纹进行比较,从而可能是根 CA 本身。然后用户可以选择中止导入操作。但是,如果提供了 -noprompt 选项,则不会与用户进行交互。
如果我收到带有根 CA 和我签署的证书的证书回复,哪个是我正确导入证书的正确命令(或者以下所有内容都将根据根 CA 的可用性工作):
# Assuming doesn't exist at all
keytool -import -keystore server_keystore.jks -storepass pass -alias rootCA -file ca-cert-file
keytool -import -keystore server_keystore.jks …
Run Code Online (Sandbox Code Playgroud) 为了更新 AWS 上的 SSL 证书,CSR 需要 CA。
当我尝试配置和创建 CA 时,我收到以下信息:
ValidationException ACM 私有 CA 服务主体“acm-pca.amazonaws.com”需要 S3 存储桶“MyBucket”的“s3:GetBucketLocation”权限。检查您的 S3 存储桶权限并重试
要继续此操作,请在 Amazon S3 > MyBucket > 权限 > 存储桶策略上进行权限设置:
{
"Version": "2012-10-17",
"Statement": [
{
"Sid": "PublicReadGetObject",
"Effect": "Allow",
"Principal": "*",
"Action": "s3:GetObject",
"Resource": "arn:aws:s3:::MyBucket/*"
}
]
}
Run Code Online (Sandbox Code Playgroud)
根据文档,可以在这里找到: https: //docs.aws.amazon.com/AmazonS3/latest/API/RESTBucketGETlocation.html
LocationConstraint
是必须的。
如何解决“s3:GetBucketLocation”问题并创建 CA?
我试图揭开 CSR 的生成方式以及公钥和私钥的作用。
服务器1:
现在,我想要 CSR,为此,我将去 CA 进行签名。
创建 CSR 请求时,是基于服务器的公钥还是私钥?
我提到了这个SO问题;其中,它表示服务器(正在请求 CSR)本身在将其发送到 CA 之前通过其私钥签署 CSR。
我有点困惑,有以下问题:
最终产品(CA 签名的证书):它包含服务器的私钥还是公钥?据我了解,最终产品应包含请求 CSR 的服务器的公钥。
服务器发起CSR请求时,为什么需要用私钥对CSR进行签名?这是对的吗?
服务器的公钥是 CSR 的一部分吗?
最终,CA是否根据CSR生成证书以及如何从CSR导出服务器的公钥?
我最近部署了一个服务于HTTP请求的Dart服务器应用程序.我想添加对HTTPS的支持,所以我一直在尝试将SSL添加到Dart服务器应用程序中.
此答案清楚地说明了如何向Dart添加自签名SSL证书.但是,我想添加一个从SSL提供商处购买的SSL证书.
SSL提供商通过电子邮件发送了我的4个文件:
我一直在试图弄清楚如何certutil
工作以及如何将这些证书添加到证书数据库中,但我无法理解这一切.
有能力在Dart中启用CA SSL证书的任何人吗?
已解决:感谢评论中的建议,我解决了这个问题.这是我完整设置的要点:https://gist.github.com/stevenroose/e6abde14258971eae982
我很难理解 RDN (RelativeDistinguishedName) 中属性 (AttributeTypeAndValue) 的顺序。
以下是相关的 ASN.1 定义(取自www.in2eps.com):
TBSC证书
TBSCertificate ::= SEQUENCE {
[...]
subject Name,
[...]
}
Run Code Online (Sandbox Code Playgroud)
姓名
Name ::= CHOICE {
rdnSequence RDNSequence
}
Run Code Online (Sandbox Code Playgroud)
RDN序列
RDNSequence ::= SEQUENCE OF RelativeDistinguishedName
Run Code Online (Sandbox Code Playgroud)
相对专有名称
RelativeDistinguishedName ::= SET SIZE (1 .. MAX) OF AttributeTypeAndValue
Run Code Online (Sandbox Code Playgroud)
属性类型和值
AttributeTypeAndValue ::= SEQUENCE {
type AttributeType,
value AttributeValue
}
Run Code Online (Sandbox Code Playgroud)
属性类型
AttributeType ::= OBJECT IDENTIFIER
Run Code Online (Sandbox Code Playgroud)
属性值
AttributeValue ::= ANY -- DEFINED BY AttributeType
Run Code Online (Sandbox Code Playgroud)
如果我创建了一个包含“/CN=CommonNameX/O=OrganizationX/...”(按照这个特定顺序)的 CSR,CA 如何从中构建证书?
将主题设置为“.../O=OrganizationX/CN=CommonNameX/”(以相反的顺序相同)时,将如何构建证书?
据我所知,在验证证书链时,RDN 属性的顺序很重要。因此,我假设一定有一些详细的规范可用?
更重要的是,我还想知道是否有不同的 CA 使用不同的顺序。如果是这样,有人可以指出一些 CA 吗?
编辑: …
我们有一个用于其余 Web 服务的 Spring Boot 应用程序,该应用程序仍在开发中。我们现在使用自签名证书。
现在,它将与 1 个已开发的应用程序一起部署在一个系统中。默认情况下,此预先存在的应用程序使用自签名证书,但如果需要,客户端可以选择上传 CA 证书。现在,我们要为这个新应用程序使用相同的证书。
基本上,我们希望客户端为 1 个系统中运行的 2 个应用程序使用 1 个证书。
现在,此现有应用程序具有证书文件,如 .pem 和 .cer。现在,我如何在使用 jks 格式的证书的 Spring Boot 应用程序中使用此证书。
当然,如果有任何更新,证书应该对两个应用程序都可用。
我偶尔遇到这个话题,试图记住这是如何完成的,然后再次找到所有不完整的答案(使用配置文件、oneliners,忽略我们真的想使用自定义 CA 来创建完整的证书链等) . 许多答案将 SAN 应用于证书请求,但在签名命令中将 SAN 搞砸了......
我想做的事?
(是的,请不要在一个命令中做所有事情,我希望我的 CA 驻留在另一台机器上)(是的,这对于其他人来说可能再次不完整。但这正是我每年需要 1-2 次,当我的 DEV 环境中的简单自签名证书,我只是通过配置信任,是不够的)(是的,您可能想要实施额外的验证步骤,如果您不是作为一个人请求和签署证书的人)
问候帕特里克