我想拥有自己的时间戳服务器,可以在二进制文件的签名过程中使用。
我找到了链接:http : //owcapage.wordpress.com/linux-time-stamp-server/
但是我无法开始工作。也许是因为我无法访问:www.opentsa.org
有没有其他选择?在 linux、windows 上,无所谓...
我刚刚使用 itext 签署了文件。我也有LTV。

我在 itext 文档中阅读-“DSS 包含对证书的引用,我们可以添加对 OCSP 响应和可用于重新验证证书的 CRL 的引用”
是的,我在 DSS 中找到了它们。
我还读到:“在 DSS 中,我们可以存储 VRI”
我不明白为什么要使用 VRI?因为在 DSS 中有相同的 OCSP 响应和证书。
还有 /61A2411B1..... 是什么意思?它是一些哈希还是随机数?
我尝试使用iText为JAVA和葡萄牙公民卡(智能卡)创建pdf签名.但是当代码执行MakeSignature类时,我总是收到一条错误说:
java.security.InvalidKeyException:提供的密钥(sun.security.pkcs11.P11Key $ P11PrivateKey)不是RSAPrivateKey实例
我需要一些帮助,有人可以帮助我吗?
try {
String pkcs11Config = "name=GemPC" + "\n" + "library=C:/WINDOWS/system32/pteidpkcs11.dll";
ByteArrayInputStream configStream = new ByteArrayInputStream(pkcs11Config.getBytes());
Provider pkcs11Provider = new sun.security.pkcs11.SunPKCS11(configStream);
Security.addProvider(pkcs11Provider);
CallbackHandler cmdLineHdlr = new DialogCallbackHandler();
KeyStore.Builder builder = KeyStore.Builder.newInstance("PKCS11", pkcs11Provider,
new KeyStore.CallbackHandlerProtection(cmdLineHdlr));
KeyStore ks = builder.getKeyStore();
PdfReader pdf = new PdfReader(filePath);
FileOutputStream fos = new FileOutputStream(dest);
PdfStamper stp = PdfStamper.createSignature(pdf, fos, '\0');
PdfSignatureAppearance sap = stp.getSignatureAppearance();
sap.setReason("I'm the author");
String alias = (String) ks.aliases().nextElement();
PrivateKey pk = (PrivateKey) ks.getKey("CITIZEN SIGNATURE CERTIFICATE", null);
Certificate chain …Run Code Online (Sandbox Code Playgroud) 我想签名并验证带有椭圆曲线的pdf.我得到了一些代码,但它不起作用.
创建私钥:
openssl ecparam -genkey -name secp384r1 -noout -out private.pem
Run Code Online (Sandbox Code Playgroud)
创建公钥:
openssl ec -in private.pem -pubout -out public.pem
Run Code Online (Sandbox Code Playgroud)
签名文件:
openssl dgst -ecdsa-with-SHA1 test.pdf > hash openssl dgst
openssl dgst -ecdsa-with-SHA1 -inkey private.pem -keyform PEM -in hash > signature
Run Code Online (Sandbox Code Playgroud)
验证文件:
openssl dgst -ecdsa-with-SHA1 -verify public.pem -signature signature.bin data
Run Code Online (Sandbox Code Playgroud)
要签名和验证的部分不起作用.
有人可以帮我解决这个例外吗?这是否意味着我必须使用 1.5 的 Java 版本运行 keytool?
我以前有过它,但现在我明白了。
Exception in thread "main" java.lang.ExceptionInInitializerError
at com.itextpdf.text.pdf.security.CertificateInfo.getSubjectFields(CertificateInfo.java:356)
at com.itextpdf.text.pdf.PdfSignatureAppearance.getAppearance(PdfSignatureAppearance.java:884)
at com.itextpdf.text.pdf.PdfSignatureAppearance.preClose(PdfSignatureAppearance.java:1268)
at com.itextpdf.text.pdf.security.MakeSignature.signDetached(MakeSignature.java:140)
at org.deloitte.cms.efi.controller.signature.SignatureAppearance.sign4(SignatureAppearance.java:181)
at org.deloitte.cms.efi.controller.signature.SignatureAppearance.main(SignatureAppearance.java:208)
Run Code Online (Sandbox Code Playgroud)
引起:java.lang.SecurityException:类“org.bouncycastle.asn1.ASN1ObjectIdentifier”的签名者信息与同一包中其他类的签名者信息不匹配
这是我的代码:
public void sign4(String src, String name, String dest,
Certificate[] chain, PrivateKey pk,
String digestAlgorithm, String provider, CryptoStandard subfilter,
String reason, String location)
throws GeneralSecurityException, IOException, DocumentException {
// Creating the reader and the stamper
PdfReader reader = new PdfReader(src);
FileOutputStream os = new FileOutputStream(dest);
PdfStamper stamper = PdfStamper.createSignature(reader, os, '\0');
// Creating the appearance …Run Code Online (Sandbox Code Playgroud) 我正在尝试创建一个数字证书,该证书使用 EC 密钥而不是来自 RSA 的密钥进行自签名,并遵循这些 SO link1和link2。我将link1中给出的RSA签名算法替换为EC
EC_KEY *ecc = NULL;
int eccgrp = OBJ_txt2nid("secp256k1");
ecc = EC_KEY_new_by_curve_name(eccgrp);
EC_KEY_set_asn1_flag(ecc, OPENSSL_EC_NAMED_CURVE);
if(!(EC_KEY_generate_key(ecc))) {
BIO_printf(out, "Error in generating key");
printf("Error 1\n");
}
if(!EVP_PKEY_assign_EC_KEY(pk, ecc)) {
BIO_printf(out, "Error assigning EC_KEY to EVP_PKEY");
printf("Error 2\n");
}
.
.
X509_set_pubkey(x,pk);
.
.
if (!X509_sign(x,pk,EVP_md5()))
goto err;
.
.
Run Code Online (Sandbox Code Playgroud)
其余代码与链接 1 中给出的相同。没有打印错误,但是当我尝试打印 x509 证书时出现段错误X509_print_fp(stdout,x509);。这样做的正确方法是什么?
传奇
我公开了一个 API,它要求客户端通过发送两个标头来签署请求:
Authorization: MyCompany access_key:<signature>
Unix-TimeStamp: <unix utc timestamp in seconds>
Run Code Online (Sandbox Code Playgroud)
要创建签名部分,客户端应使用我的 API 服务发布的密钥。
在 Python (Py3k) 中,它看起来像:
import base64
import hmac
from hashlib import sha256
from datetime import datetime
UTF8 = 'utf-8'
AUTH_HEADER_PREFIX = 'MyCompany'
def create_signature(access_key, secret_key, message):
new_hmac = hmac.new(bytes(secret_key, UTF8), digestmod=sha256)
new_hmac.update(bytes(message, UTF8))
signature_base64 = base64.b64encode(new_hmac.digest())
return '{prefix} {access_key}:{signature}'.format(
prefix=AUTH_HEADER_PREFIX,
access_key=access_key,
signature=str(signature_base64, UTF8).strip()
)
if __name__ == '__main__':
message = str(datetime.utcnow().timestamp())
signature = create_signature('my access key', 'my secret key', message)
print(
'Request headers are',
'Authorization: …Run Code Online (Sandbox Code Playgroud) 我的应用程序正在使用 JWT,应该可以防止重放攻击。我正在测试这个并遇到以下问题。
当我有一个有效的 JWT 并更改令牌/签名的最后一个字符时,JWT 仍然有效。例如,以下令牌都正确验证:
eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJpc3MiOiJTb21lIFRlc3QiLCJjbGFpbSI6IlNvbWUgQ2xhaW0ifQ.UkFYSK7hSSeiqUOSMdbXgbOErMFnuK0Emk1722ny-r4
eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJpc3MiOiJTb21lIFRlc3QiLCJjbGFpbSI6IlNvbWUgQ2xhaW0ifQ.UkFYSK7hSSeiqUOSMdbXgbOErMFnuK0Emk1722ny-r5
eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJpc3MiOiJTb21lIFRlc3QiLCJjbGFpbSI6IlNvbWUgQ2xhaW0ifQ.UkFYSK7hSSeiqUOSMdbXgbOErMFnuK0Emk1722ny-r6
eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJpc3MiOiJTb21lIFRlc3QiLCJjbGFpbSI6IlNvbWUgQ2xhaW0ifQ.UkFYSK7hSSeiqUOSMdbXgbOErMFnuK0Emk1722ny-r7
我已经在http://jwt.io/上检查过这个,也可以在我的 .Net 应用程序中复制。
有人能解释一下签名对于给定的有效载荷是如何可能不是唯一的吗?我知道可能会发生碰撞,但我无法解释它们是连续的序列。
尝试验证 PDF 签名不起作用。PDF 由 Adobe Acrobat 签名,然后尝试使用客户端证书的公钥对其进行验证。
所以我得到了客户端证书的公钥,对 PDF 进行散列并验证散列是否等于 pdf 签名,但它失败了。
HttpClientCertificate cert = request.ClientCertificate;
X509Certificate2 cert2 = new X509Certificate2(cert.Certificate);
PdfReader pdfreader = new PdfReader("path_to_file");
AcroFields fields = pdfreader.AcroFields;
AcroFields.Item item = fields.GetFieldItem("Signature1");
List<string> names = fields.GetSignatureNames();
foreach (string name in names){
PdfDictionary dict = fields.GetSignatureDictionary(name);
PdfPKCS7 pkcs7 = fields.VerifySignature(name);
Org.BouncyCastle.X509.X509Certificate pdfSign = pkcs7.SigningCertificate;
// Get its associated CSP and public key
RSACryptoServiceProvider csp = (RSACryptoServiceProvider)cert2.PublicKey.Key;
// Hash the data
SHA256 sha256 = new SHA256Managed();
byte[] pdfBytes = System.IO.File.ReadAllBytes("path_to_pdf"); …Run Code Online (Sandbox Code Playgroud) 我需要使用RSA-SHA1算法签署(并最终验证)XML文档的一个节点.w3.org链接
RSA-SHA1 URI:
http://www.w3.org/2000/09/xmldsig#rsa-sha1
指定于:
[XMLDSIG-CORE2002]的第6.4.2节
我正在关注这个例子,但无法想出如何将算法更改为所需.
签名生成发生在这里:
signedXml.ComputeSignature();
Run Code Online (Sandbox Code Playgroud)
带参数的唯一覆盖期望KeyedHashAlgorithm:
public void ComputeSignature(KeyedHashAlgorithm macAlg);(链接)
KeyedHashAlgorithm(链接)反过来只允许创建HMAC*和MAC*算法,并且没有RSA-SHA1.
在.Net中使用RSA-SHA1签署XML的最简单方法是什么?
编辑:
我正在尝试使用X509证书来提取密钥.证书的签名算法属性是sha1RSA.
这是我分配它的方式:
var signedXml = new SignedXml(xmlDoc);
...
signedXml.SigningKey = (RSACryptoServiceProvider)cert.PrivateKey;
...
signedXml.ComputeSignature();
Run Code Online (Sandbox Code Playgroud)
将得到的签名XML格式一致预期的一个,但digest和signature值无效.