标签: digital-signature

XML Canonicalization算法在直接调用时比在作为xml数字签名的一部分调用时给出两个不同的结果?

当我直接规范化某些xml时,我得到两个不同的同一个xml文档的哈希,而不是在我执行数字签名时,它还会在对其进行哈希处理之前对xml执行相同的规范化算法?我发现数字签名规范化包括新的行字符'\n'和规范化时的间距字符,而直接算法则没有.

包括新行字符+空格不在规范化规范中吗?我特别关注这个版本http://www.w3.org/TR/2001/REC-xml-c14n-20010315

有谁知道发生了什么?我已经包含了xml doc和代码的两种实现,所以你可以看到.

这真让我感到困惑,我想知道为什么,我错过了一些明显的东西吗?

<root>
  <child1>some text</child1>
  <child2 attr="1" />
</root>
Run Code Online (Sandbox Code Playgroud)

直接规范化代码

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Xml;
using System.Security.Cryptography.Xml;
using System.Security.Cryptography;
using System.IO;
using System.ComponentModel;

namespace XML_SignatureGenerator
{
    class XML_C14N
    {
        private String _filename;
        private Boolean isCommented = false;
        private XmlDocument xmlDoc = null;

        public XML_C14N(String filename)
        {
            _filename = filename;
            xmlDoc = new XmlDocument();
            xmlDoc.Load(_filename);
        }

        //implement this spec http://www.w3.org/TR/2001/REC-xml-c14n-20010315
        public String XML_Canonalize(System.Windows.Forms.RichTextBox tb)
        {
            //create c14n instance and load in xml …
Run Code Online (Sandbox Code Playgroud)

xml canonical-form digital-signature xml-signature

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

如何对Inno Setup生成的卸载文件进行数字签名?

Windows徽标计划要求unins000.exe由Inno生成的签名.我设计的唯一方法是解压缩安装程序,签名然后再重新打包.是不是有更简单的方法?

我找到了Inno Unpacker,但我不确定如何重新包装它.

windows inno-setup uninstallation digital-signature

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

在Web应用程序中对数据进行数字签名

我有一个Web应用程序,其中一些数据(不是文件)需要使用PKI私钥进行数字签名.PKI证书和私钥将位于USB Cryptotoken中,当插入USB插槽时,它会将证书注册到浏览器.这减轻了使用证书进行身份验证的痛苦,因为我通过在我的应用程序中进行ssl-renegotiation.

但是,使用证书进行数字签名似乎有点棘手.我可以想到几种方法来做到这一点

  1. CAPICOM - http://en.wikipedia.org/wiki/CAPICOM 这适用于支持CAPICOM的浏览器(例如IE).但是,似乎微软已经停止了这一点.

  2. Mozilla Crypto对象 - https://developer.mozilla.org/en-US/docs/JavaScript_crypto

  3. WebCrypto API - 大多数浏览器尚不支持此功能.

  4. 自定义Java Applet或一些可自由开源的JavaApplet控件.

  5. 还有其他选择吗?

我试图找出在Web应用程序中执行此操作的常见,方便和安全的方法.

注意:

  1. 我很乐意支持流行的浏览器.
  2. 我正在签署一小段数据 - 比如100-200字节而不是文件.
  3. 我更喜欢PKCS#7签名.

security web-applications pki digital-signature pkcs#7

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

用什么?电子签名?

对不起,我找不到这个问题的最佳标题.以下是我的要求.

我正在研究一个项目,该项目处理不同账户的大量资金交易.系统自动将资金转账到A,B,C等账户,但在此之前,A,B或C中的某个人应该(电子地)批准转账金额.

你认为最好的方法是什么?我希望系统发送一个数字签名的文件(某物的PDF)(?),A,B和C的授权人员应检查并确认数量是否正确.

由于数量很高,我必须确保系统发出的文件没有被篡改,同时我也想确保A,B或C发送的文件(回复)也没有被篡改.实现它的最佳方法是什么?有任何想法吗?

authorization cryptography identification digital-signature

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

如何验证iOS应用程序中的XML签名?

我正在研究一个iOS项目的XML数字签名世界; 我需要验证SAML断言的数字签名.

我一直在阅读有关验证XML签名的很多内容,我想我已经了解了如何使用私钥对摘要进行签名,我可以使用公钥验证它(应该包含在x509证书中)所以我可以确定SAML令牌的来源.

我找到了一个C libray,xmlsec,看起来它有很多我需要的代码来验证签名,并且一直在努力实现它.但是,我无法弄明白.根据我的理解,我很确定我必须使用我的代码编译库.我已经将源代码复制到了我的项目中,但是在编译期间我遇到了关于未定义的内容的错误.

在我花费无数个小时前往这条道路之前,我想我会联系社区,看看是否有人有任何验证xml数字签名的经验,以及他们是否可以深入了解在iOS项目中实现这一点.

对于它的价值,这是我从单点登录服务获得的SAML断言的一小部分:

<?xml version="1.0" encoding="UTF-16"?>
<saml:Assertion ID="oQ2YZuHBspA_f91HM8o3.o6ZZla" IssueInstant="2011-05-06T00:51:40.733Z" Version="2.0" xmlns:saml="urn:oasis:names:tc:SAML:2.0:assertion" xmlns:xs="http://www.w3.org/2001/XMLSchema">
<saml:Issuer>[...]</saml:Issuer>
<ds:Signature xmlns:ds="http://www.w3.org/2000/09/xmldsig#">
    <ds:SignedInfo>
        <ds:CanonicalizationMethod Algorithm="http://www.w3.org/2001/10/xml-exc-c14n#"/>
        <ds:SignatureMethod Algorithm="http://www.w3.org/2000/09/xmldsig#rsa-sha1"/>
        <ds:Reference URI="#oQ2YZuHBspA_f91HM8o3.o6ZZla">
            <ds:Transforms>
                <ds:Transform Algorithm="http://www.w3.org/2000/09/xmldsig#enveloped-signature"/>
                <ds:Transform Algorithm="http://www.w3.org/2001/10/xml-exc-c14n#"/>
            </ds:Transforms>
            <ds:DigestMethod Algorithm="http://www.w3.org/2000/09/xmldsig#sha1"/>
            <ds:DigestValue>zj4pCHBNMln+28Jq/v1YIScfiuw=</ds:DigestValue>
        </ds:Reference>
    </ds:SignedInfo>
    <ds:SignatureValue>[...]</ds:SignatureValue>
    <ds:KeyInfo>
        <ds:X509Data>
            <ds:X509Certificate>MIIDVjCCAj6gAwIBAgIGAS67wkWCMA0GCSqGSIb3[...]7bgf</ds:X509Certificate>
        </ds:X509Data>
        <ds:KeyValue>
            <ds:RSAKeyValue>
                <ds:Modulus>[...]</ds:Modulus>
                <ds:Exponent>AQAB</ds:Exponent>
            </ds:RSAKeyValue>
        </ds:KeyValue>
    </ds:KeyInfo>
</ds:Signature>
Run Code Online (Sandbox Code Playgroud)

xml security digital-signature ios xml-signature

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

VeriSign Class 3证书不受Windows信任?

我发布了一个Windows桌面应用程序,其中包含由Verisign Class 3代码签名证书进行数字签名的所有可执行文件.对于绝大多数用户来说,这似乎工作正常.

但是少数用户报告证书无效.他们说它提出了"证书链已处理,但终止于信任提供商不信任的根证书"的消息.这对应于错误代码CERT_E_UNTRUSTEDROOT (0x800B0109).这也是在完全更新的Windows 7机器上报告的.所以我的证书可能是正常的,但Windows有时不相信VeriSign证书.

为什么Windows有时不信任VeriSign?有什么我可以添加到我的安装程序(也签名),这将告诉Windows信任证书?

windows code-signing digital-certificate digital-signature verisign

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

KeyUsage不允许数字签名

我正在尝试从我的Java EE程序向需要证书身份验证的主机发送HTTPS请求.我有一个正确的密钥库文件,信任库和导入的CA,两个列表都显示证书在里面.

但是我收到以下错误:

javax.net.ssl.SSLHandshakeException: sun.security.validator.ValidatorException: KeyUsage does not allow digital signatures
    at ...

...

Caused by: sun.security.validator.ValidatorException: KeyUsage does not allow digital signatures
    at sun.security.validator.EndEntityChecker.checkTLSServer(EndEntityChecker.java:270)
    at sun.security.validator.EndEntityChecker.check(EndEntityChecker.java:141)
    at sun.security.validator.Validator.validate(Validator.java:264)
    at sun.security.ssl.X509TrustManagerImpl.validate(X509TrustManagerImpl.java:326)
    at sun.security.ssl.X509TrustManagerImpl.checkTrusted(X509TrustManagerImpl.java:231)
    at     sun.security.ssl.X509TrustManagerImpl.checkServerTrusted(X509TrustManagerImpl.java:126)
at sun.security.ssl.ClientHandshaker.serverCertificate(ClientHandshaker.java:1319)
... 29 more
Run Code Online (Sandbox Code Playgroud)

在扩展部分中查看证书内容我看到以下内容:

Extensions:

#1: ObjectId: 2.5.29.14 Criticality=false
SubjectKeyIdentifier [
KeyIdentifier [
0000: 33 87 72 1D 09 2F DF FF   1A A7 D1 C0 E1 CF C5 FA  3.r../..........
0010: A4 19 54 2E                                        ..T.
]
]

#2: ObjectId: 2.16.840.1.113730.1.1 Criticality=false …
Run Code Online (Sandbox Code Playgroud)

java ssl digital-signature x509certificate

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

Thawte 证书“无法验证签名中的证书”

我需要使用company.pfx 中存储的证书对Application.exe 文件进行签名。所以,我使用了signtool:

signtool.exe sign /p password /f company.pfx /t http://timestamp.verisign.com/scripts/timestamp.dll /v Application.exe

The following certificate was selected:
    Issued to: Company, Inc.
    Issued by: Thawte Code Signing CA - G2
    Expires:   Wed Aug 27 02:59:59 2014
    SHA1 hash: A2A0BD7C4516BF8C88AECC3A568CE9BB5D63902D

Done Adding Additional Store
Successfully signed and timestamped: App1_old.exe

Number of files successfully Signed: 1
Number of warnings: 0
Number of errors: 0
Run Code Online (Sandbox Code Playgroud)

Signtool 说没有错误。但在数字签名详细信息中,有一条消息“无法验证签名中的证书”。并且没有认证路径。

在“详细信息”中,有一个属性“扩展错误信息”,表示“吊销状态:吊销功能无法检查吊销,因为吊销服务器已离线”。

应用程序.exe图像

为了调查这个问题,我在应用程序上使用了 sigcheck(-a key),它显示“已验证:无法为受信任的根颁发机构构建证书链。”

然后我将 pfx 文件导入存储库,看起来证书没问题。

证书图片

我在 stackoverflow 上搜索了有关我的主题的信息,找到了一些链接,它很有帮助。 …

openssl digital-signature signtool

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

JAVA签名对象 - 没有安装的提供程序支持此密钥:sun.security.rsa.RSAPrivateCrtKeyImpl

我想使用我使用密钥工具创建的一对RSA密钥创建一个文件并使用以下命令:

keytool -genkeypair -alias key -keyalg RSA -keysize 2048 -sigalg SHA256withRSA -validity 365 -keystore keystore.jks

我想初始化我的Signature对象,所以我尝试了这个:

PrivateKey privateKey = (PrivateKey) keyStore.getKey(PRIVATE_KEY_ALIAS,privateKeyPassword);
Signature signature = Signature.getInstance(SIGNATURE_ALGORITHM);
signature.initSign(privateKey);
Run Code Online (Sandbox Code Playgroud)

但我得到了这个例外:
No installed provider supports this key: sun.security.rsa.RSAPrivateCrtKeyImpl

感谢任何帮助!

java encryption digital-signature

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

如何通过 OTP 请求使用 AADHAR 身份验证 api

我需要使用 AADHAR API。基本上,我们正在为我们的医疗保健客户开发一个移动应用程序,并在其中进行患者登记。现在,我们想要使用 OTP 请求进行简单的 AADHAR 身份验证,其中患者将输入他/她的 AADHAR 号码,作为回报,获得一个 OTP,该 OTP 提交到 AADHAR Auth API,一旦身份验证成功,我们将获取患者的 eKYC 详细信息并使用他们在我的应用程序中。

迄今为止所做的研究:我已经经历过

AADHAR OTP 请求 API - https://uidai.gov.in/images/resource/aadhaar_otp_request_api_2_5.pdf

AADHAR 身份验证 API -
https://uidai.gov.in/images/resource/aadhaar_authentication_api_2_5.pdf

基本上我试图使用邮递员调用 OTP 请求和 Auth API,但这不起作用。在探索 API 时,有人提到我们需要<Signature>Digital signature of AUA</Signature>作为请求正文的一部分进行传递,无论是在 Auth 还是 OTP 请求 API 中,如上面的链接所示。然后我们联系了https://www.emudhradigital.com/并获得了.pfx文件格式的测试证书。

现在我陷入了如何使用这个测试证书来调用这些 API 的困境。此外,UIDAI 网站或任何地方都没有给出关于如何使用和集成它们的明确文档。我在做研究时使用了邮递员,但这不起作用。

任何提示或帮助将不胜感激。

谢谢,马亨德拉

authentication digital-signature one-time-password mobile-application aadhaar

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