标签: pki

1级和3级根之间的区别是什么,以及它们签署的证书?

几乎是问题所在.这两类根有什么区别?这些根签署的证书之间的差异?第1类签署的证书有什么用途,而第3类没有,反之亦然?

certificate pki certificate-authority

8
推荐指数
2
解决办法
1万
查看次数

CORS与客户端https证书

我有一个有两个https服务器的站点.一个(前端)提供由静态页面组成的UI.另一个(后端)提供微服务.他们俩都碰巧使用相同的(测试)X509证书来识别自己.单独地,我可以通过https连接到它们,需要客户端证书"tester".

到目前为止,我们通过nginx设置隐藏了CORS问题,这使得前端和后端看起来是相同的Origin.我已经为所有请求实现了标题'Access-Control-Allow-Origin','Access-Control-Allow-Credentials'; 使用方法,预检检查请求的标题(OPTIONS).

  • 在Chrome中,像这样的跨站点工作得很好.我可以看到前端URL和后端URL是不同的站点.我看到在发出后端请求之前发出了OPTIONS请求.

  • 即使Chrome似乎不需要它,我确实找到了将用于执行请求的xmlhttprequest对象并对其执行了操作xhr.withCredentials = true,因为这似乎是fetch.js在它获取时所做的事情"credentials":"include".我注意到有一个xhr.setRequestHeader可用的功能,我可能需要用来让Firefox开心.

    • Firefox对UI调用的行为相同.但对于所有后端调用,我得到405.当它这样做时,没有与服务器建立网络连接.浏览器刚刚决定这是405而没有执行任何https请求.尽管这与Chrome的行为不同,但这种做法还是有意义的.前端UI和后端服务都需要选择客户端证书.当我连接到UI时,我选择了证书"tester".当它发出后端请求时,它可以假设应该使用相同的客户端证书来到达后端.但也许它假设它可能会有所不同,而且我还需要告诉Firefox.

有没有人在这里使用CORS结合这样的2路SSL证书,并且有这个Firefox问题并在某处修复了它.我怀疑它不是服务器端修复,而是客户端需要做的事情.

https pki cors

8
推荐指数
1
解决办法
6221
查看次数

Authenticode,SPC和Java CodeSign之间的区别?

大多数CA都在销售不同"产品"的代码签名证书,如Verisign或Certum:

  • Microsoft Authenticode - "允许您签署EXE,OCX,DLL,bla ......"

  • Java CodeSign - "允许您签署Java代码"

  • 软件发行商证书 - "允许您签署软件"

好吧,我真的对此感到困惑.所有这些产品有什么区别 - 除了价格?自从我很好奇以来,我曾几次询问Verisign和其他CA.但没有得到答案.

我从Certum CA获得了Authenticode证书.我在Internet Explorer中注册了它,将其导出为PKCS#12 PFX并且可以按照承诺签署EXE,DLL,....

现在......我尝试用keytool将这个PFX导入Java,然后我尝试签署一个JAR.它奏效了!

然后有神秘的"软件发行商证书"作为产品.我不知道我能/应该签什么...... Mac?Linux呢?"Microsoft Authenticode"也不是软件发行商证书吗?不是EXE"软件"吗?这真让我困惑.

那么,我现在的问题是:当我订购了Microsoft Authenticode证书时,使用它签署例如JAR文件或可能的其他内容是否非法?这些证书之间似乎没有技术差异.所有这些产品应该具有相同的代码签名EKU-OID"1.3.6.1.5.5.7.3.3",这在EXE,JAR,Adobe Air和周围也存在的地方之间没有任何区别.因此,如果所有"CodeSigning"证书在技术上都相同,那么为什么我要决定是否要成为"Java Developer"或"Windows Developer"或"Software Developer"?

也许证书仍有差异?当我使用Authenticode-certs签名时,我可能在JAR中没有足够的权限吗?

(PS:我不会在商业上使用我的软件!)

java windows security certificate pki

7
推荐指数
1
解决办法
1954
查看次数

如何使用C#从安全令牌获取信息

我需要让我的应用程序的用户使用他们的个人USB安全令牌签署他们的批准.

我已设法签署数据,但我无法获得有关谁使用了令牌的信息.

这是我到目前为止的代码:

CspParameters csp = new CspParameters(1, "SafeNet RSA CSP");
csp.Flags = CspProviderFlags.UseDefaultKeyContainer;            
RSACryptoServiceProvider rsa = new RSACryptoServiceProvider(csp);
// Create some data to sign. 
byte[] data = new byte[] { 0, 1, 2, 3, 4, 5, 6, 7 };
Console.WriteLine("Data         : " + BitConverter.ToString(data));
// Sign the data using the Smart Card CryptoGraphic Provider.            
byte[] sig = rsa.SignData(data, "SHA1");            
Console.WriteLine("Signature    : " + BitConverter.ToString(sig));
Run Code Online (Sandbox Code Playgroud)

令牌信息中有一个名为"令牌名称"的字段.我如何访问该字段以验证是否已使用令牌签署批准?

在此输入图像描述

有条件的信息和更新:

  • "令牌名称"始终匹配所有者的名称(拥有usb令牌的用户)
  • 它似乎无法完成,可能有一个Web服务或我需要调用的东西,以便直接从证书颁发机构获取信息.

c# sign pki

7
推荐指数
1
解决办法
5333
查看次数

在Firefox中,如何在服务器上提供不同的PKI客户端证书?

当我访问需要PKI客户端证书的网站时,Firefox将允许用户选择要呈现的证书.

在Firefox中,如何在服务器上提供不同的PKI客户端证书?

certificate pki

7
推荐指数
2
解决办法
4793
查看次数

签署JSON对象

我必须在不同平台和服务实现之间交换JSON对象,并通过数字签名使其完整性可验证.因此,平台A将创建这样的对象并创建数字签名.然后将所述签名包括在对象中并发送到平台B.JSON对象可以包含任意属性和数据.

例如在PHP中:

function signObject($jsonObjectToSign, $privateKey) {
    $jsonObjectToSign->signature = "";
    $msgToSign = json_encode($jsonObjectToSign);

    openssl_sign($msgToSign, $jsonObjectToSign->signature, $privateKey, OPENSSL_SLGO_SHA1);

    return $jsonObjectToSign;
}
Run Code Online (Sandbox Code Playgroud)

问题是,例如在Java中,无法判断JSON对象的属性是否与添加它们的顺序相同(通过JSONObject.put()).所以,如果我做了

$json = json_encode('{"a":1, "b":2}');
Run Code Online (Sandbox Code Playgroud)

在PHP中,如上所述签署此对象,将其传输到基于java的服务器,解码json对象,然后尝试验证签名,我可能会获得对象属性的不同顺序.

所以我需要的是一种从JSONObject创建String的可靠方法,与所使用的语言或平台无关.

上面的示例对象总是需要输出{"a":1, "b":2}而且永远不会{"b":2, "a":1}.不幸的是,这是例如在Java中的常见情况.

是否有任何"最佳实践"以安全的方式签署JSON对象?

但让我以另一种方式描述问题:

假设我想用Java(或任何其他语言)来做这件事:

JSONObject j = new JSONObject();
j.put("a", 1);
j.put("b", 2);
Run Code Online (Sandbox Code Playgroud)

现在,我需要一个序列化函数,它总是为这个对象输出相同的字符串表示,无论这个对象是如何以及用什么语言创建的.

php java json pki

7
推荐指数
2
解决办法
6581
查看次数

证书链的最大长度是多少?

迄今为止最长的证书链的长度是多少?

我想知道该链中证书颁发机构的数量,而不是证书链的大小。

ssl certificate pki digital-certificate x509certificate

7
推荐指数
2
解决办法
5993
查看次数

如何以编程方式创建证书签名请求 (CSR)?

如何在C中实现它?

openssl req -new -key cert.key -out cert.csr

openssl x509 -req -in cert.csr -CA rootCA.crt -CAkey rootCA.key -CAcreateserial -out cert.crt -days 5000
Run Code Online (Sandbox Code Playgroud)

c ssl openssl pki csr

7
推荐指数
1
解决办法
2738
查看次数

使用证书颁发机构签署证书请求

我想使用TLS相互身份验证来验证在go中制作的API上的客户端.我已经创建了一个证书颁发机构,让我们说Bob有一个他希望与客户端一起使用的密钥对.Bob创建了一个证书请求,并希望我验证他的证书,以便在API上进行授权和身份验证.

我用它来创建我的证书颁发机构:

openssl genrsa -aes256 -out ca.key 4096
openssl req -new -x509 -sha256 -days 730 -key ca.key -out ca.crt
Run Code Online (Sandbox Code Playgroud)

Bob用它来创建他的证书和证书请求:

openssl genrsa -out bob.key 4096
openssl req -new -key bob.key -out bob.csr
Run Code Online (Sandbox Code Playgroud)

我想得到这个,但是在去:

openssl x509 -req -days 365 -sha256 -in bob.csr -CA ca.crt -CAkey ca.key -set_serial 3 -out bob.crt
Run Code Online (Sandbox Code Playgroud)

现在,使用theses命令,Bob可以创建一个到我的API的TLS连接,使用这个tls.Config:

func createTLSConfig(certFile string, keyFile string, clientCAFilepath string) (config *tls.Config, err error) {
    cer, err := tls.LoadX509KeyPair(certFile, keyFile)
    if err != nil {
        return nil, err
    }

    clientCAFile, err := ioutil.ReadFile(clientCAFilepath) …
Run Code Online (Sandbox Code Playgroud)

pki go x509certificate mutual-authentication tls1.2

7
推荐指数
2
解决办法
5514
查看次数

如何在微服务之间实现TLS

有人可以对我正在考虑的微服务安全设计发表评论,审核,评论或其他方面的评论吗?

假设我有三个微服务,每个微服务通过REST端点与另外两个微服务进行通信.每个微服务都包含一个密钥库.在此密钥库中包含由受信任的证书颁发机构签名的微服务的私有/公共密钥对.此密钥库中还有另外两个微服务的公钥证书,这些证书是从源微服务的签名/可信密钥对导出的.

这种实现方式有效,但有些事情并不十分正确.

也就是说,每次我引入一个新的微服务时,我必须将每个现有微服务的公钥证书添加到其密钥库,以及b)新微服务的公钥证书到其他所有微服务(假设新的微服务必须双向通信,并且安全地,与每个现有的微服务).

现在,为第二个密钥对重复上述模式,这个密钥对用于签署/验证REST调用中提供的身份验证令牌.

我想知道,除了上述之外,是否a)建议并且b)在所有微服务之间共享一个可信的公钥证书是否安全?完全不同的东西?

请礼貌.我绝不是这方面的专家.

编辑: 在我阅读原帖后的回复/评论之后,我发现我省略了可能使问题更加清晰的细节,因此评论者能够更好地解决这个问题:

  1. 有问题的微服务存在于专用Intranet内,并且只能由该Intranet内的客户端(浏览器或其他微服务)访问.

  2. 实际上有一个受信任的CA--即拥有此内部网的公司 - 并且是CA签署微服务的密钥对.

看来,这个问题的解决方案隐含在@Andreas的第一条评论中,他写道:"只要发布它们的CA受到信任,它们也会受到信任."

只要每个新的微服务都部署有a)自己的密钥对,由CA签署(一个用于签名,另一个用于加密),以及b)CA的证书,我可以部署新的微服务,并且合理保证他们将与所有其他微服务(合理的,因为我甚至不知道其他潜在的漏洞).

不知何故,我想到了我必须为每个微服务的密钥对创建一个全新的证书,并将其包含在其他微服务的密钥库中(重复每个新的微服务).相反,我需要的只是一个证书,即在每个微服务的密钥库中签署密钥对的CA的证书.

ssl pki microservices

7
推荐指数
1
解决办法
3600
查看次数