我正在为Windows实现进程提升助手.这是一个将以提升模式运行并使用管理员权限启动其他程序而不显示其他UAC提示的程序.出于安全原因,我想确保只能执行使用我公司的Authenticode密钥进行数字签名的二进制文件.
该的WinVerifyTrust函数获取我中途有,但它只是确保了二进制通过签署一些关键的就是信任的微软链的一部分.是否有一种相对简单的方法来执行Authenticode验证并确保它是由我们的私钥签名的?
我们制作了一个内容管理系统.它是一个基于数据库的系统,仅供企业和组织使用,不能从Internet下载.也就是说,它不是某种人可能偶然发现的软件,不知道它是什么以及它是否安全.在20多年的时间里,我们的系统正在销售,其可执行文件从未经过数字签名.是时候开始签名吗?
对于初学者,我可以想到一些优点和缺点:
我对PKI,证书和所有相关的东西都比较新.
据我所知,在公钥加密中,用公钥加密并用私钥解密.只有一个私钥可以对应任何公钥,但反之则不然.这是对的吗?或者是一对一的映射?
因此,数字签名的工作方式是对证书的内容进行哈希处理,然后使用私钥"签名".然后使用相应的公钥验证签名.
所以,这是我感到困惑的地方.使用公钥加密邮件和使用私钥签名邮件摘要有什么区别?
Sun的PKCS11 JCE安全提供程序缺少我们需要的一些功能.
所以我使用原始资源编写了一个增强版本.
遗憾的是,JCE基础结构拒绝新的提供程序
"JCE无法对提供程序进行身份验证",
因为它未正确签名.
javax.crypto.JceSecurity.verifyProviderJar(...)抛出.
(它叫javax.crypto.JarVerifier.verify())
有关如何签署新提供商以使其与JCE一起使用的任何建议?
我需要从我的C#.NET应用程序中发送签名的电子邮件.这是最简单的方法吗?
我需要使用rails应用程序服务器将数字签名插入到现有的pdf文件中.(基本上,客户端上传pdf文件,服务器使用本地证书对其进行签名)
我一直在使用JSignpdf将数字签名插入到pdf文件中,并开始探索ruby的宝石......
我在rubypdf网站http://soft.rubypdf.com/software/pdf-digital-signe上找到了另一个可移植文件,但在ruby中找不到任何宝石甚至示例代码.
我还看了OpenSSL的数字签名验证,但无法理解如何使用本地证书文件对现有文档进行实际签名.
我还在http://code.google.com/p/origami-pdf/上达到了一个高峰,但对于一个假设"简单"(至少在概念上)的任务来说,这似乎有点苛刻.
有什么想法/建议吗?
谢谢
有没有一种简单的方法来检查文件上是否存在数字签名而不尝试验证其签名的证书?
我想在目录中签署一长串exe和dll文件,但只包含尚未签名的文件.
例如,如果其中一个文件已由Microsoft或其他第三方签名,我不想再使用我公司的证书签名.
通过右键单击文件并查看其属性(如果数字签名选项卡显示已签名),可以轻松检查文件是否具有数字签名.我正在寻找一种使用C#检查此数字签名属性的简单方法.
现在,我正在使用带有signtool.exe的verify命令 - 它不仅检查数字签名是否存在,还检查用于签署文件的证书是否由受信任的机构颁发.
这是我执行此操作的简单而笨重的方法:
private static Boolean AlreadySigned(string file)
{
ProcessStartInfo startInfo = new ProcessStartInfo();
startInfo.RedirectStandardOutput = true;
startInfo.RedirectStandardError = true;
startInfo.FileName = "signTool.exe";
startInfo.Arguments = "verify /v " + file;
startInfo.UseShellExecute = false;
Process process = new Process();
process.StartInfo = startInfo;
process.EnableRaisingEvents = true;
process.Start();
process.WaitForExit();
string output = process.StandardOutput.ReadToEnd();
return output.Contains("Signing Certificate Chain:");
}
Run Code Online (Sandbox Code Playgroud)
请注意,我正在使用详细标记"/ v"并检查输出是否包含文本"签名证书链:" - 只是因为我注意到该字符串始终位于已签名的文件的输出中 - 并且从任何尚未签名的文件中省略.
无论如何,尽管它的笨拙,这段代码似乎完成了工作.我想改变它的一个原因是因为它似乎需要几百毫秒才能对文件执行verify命令.我不需要验证证书我只是想看看文件上是否存在数字签名.
简而言之,是否有一种简单的方法来检查数字签名是否存在 - 而不是试图验证它?
我的任务如下:
output.dat.下面的程序抛出错误:"java.security.InvalidKeyException:没有安装的提供程序支持此密钥:sun.security.provider.DSAPublicKeyImpl".
import java.security.*;
import java.security.KeyStore.*;
import java.io.*;
import java.security.PublicKey;
import java.security.PrivateKey;
import javax.crypto.Cipher;
import java.nio.charset.*;
import sun.security.provider.*;
import javax.crypto.*;
public class Code {
/**
* @param args the command line arguments
*/
public static void main(String[] args) {
try {
/* getting data for keystore */
File file = new File(System.getProperty("user.home") + File.separatorChar + ".keystore");
FileInputStream is = new FileInputStream(file);
KeyStore keystore = KeyStore.getInstance(KeyStore.getDefaultType());
/*Information for certificate to be generated */
String …Run Code Online (Sandbox Code Playgroud) 我有一台iMac和一台Macbook Pro.我更新了Yosemite beta(公共版).但我的音频接口Focusrite Saffire 24 DSP(Firewire)可以在iMac中正常工作,但不能在Macbook Pro上正常工作.
安装Saffire时,有一个Saffire.kext.当它连接到iMac时,这个kext加载很好,没什么不寻常的.连接到Macbook Pro时,不会加载此kext.我尝试手动加载它,我收到一条错误消息,说它无法加载,因为kext的签名无效.
现在,我检查了两台计算机上的签名,他们都说签名无效.但它在iMac上加载很好,即使签名无效.
这是为什么?我不明白的是什么?
如果有帮助,这是一些控制台输出:
Mattiass-MacBook-Pro:Extensions mono$ codesign -dvvv Saffire.kext/
Executable=/System/Library/Extensions/Saffire.kext/Contents/MacOS/Saffire
Identifier=tc.tctechnologies.driver.Saffire
Format=bundle with Mach-O universal (i386 x86_64)
CodeDirectory v=20100 size=161 flags=0x0(none) hashes=1+3 location=embedded
Hash type=sha1 size=20
CDHash=ebc9c42dbea4f51770ff62d7de12552ae82a1fbc
Signature size=4240
Authority=Developer ID Application: TC Applied Technologies
Authority=Developer ID Certification Authority
Authority=Apple Root CA
Signed Time=13 Mar 2014 02:58:23
Info.plist entries=19
TeamIdentifier=not set
Sealed Resources version=1 rules=4 files=0
Internal requirements count=1 size=180
Mattiass-MacBook-Pro:Extensions mono$ codesign --verify -vvvv Saffire.kext/
Saffire.kext/: invalid signature (code or signature …Run Code Online (Sandbox Code Playgroud) 在我的静态库中,我有一个许可文件.我想确定它是由我自己生成的(并没有被改变).所以我的想法是使用我读过的RSA签名.
我看过互联网,这就是我提出的:
第一步:使用我在此处找到的信息生成私钥和自签名证书.
// Generate private key
openssl genrsa -out private_key.pem 2048 -sha256
// Generate certificate request
openssl req -new -key private_key.pem -out certificate_request.pem -sha256
// Generate public certificate
openssl x509 -req -days 2000 -in certificate_request.pem -signkey private_key.pem -out certificate.pem -sha256
// Convert it to cer format so iOS kan work with it
openssl x509 -outform der -in certificate.pem -out certificate.cer -sha256
Run Code Online (Sandbox Code Playgroud)
之后,我创建一个许可文件(日期和应用程序标识符作为内容)并根据此处的信息生成该文件的签名:
// Store the sha256 of the licence in a file
openssl dgst -sha256 …Run Code Online (Sandbox Code Playgroud)