最近写了个根证书和子证书,子证书部分能签名到EXE/DLL/OCX中
也找到一个
时间戳URL:
两个免费的时间戳服务器URL:http://timestamp.verisign.com/scripts/timstamp.dll
http://timestamp.wosign.com/timestamp
数字证书的时间戳功能如何在
离线
的情况也签名

解决方案 »

  1.   

    终于成功了,我将"子数字证书"签名到EXE中显示也正常
    测试图如下所示:
      

  2.   


    Delphi编程乐园
    群号:32307764
      

  3.   


    经过这些天的研究这个问题,我终于了解一些关于“数字证书签名”的作用
    简单来说“数字证书”可以理解为一种“身份的证书”而已,具体如下:由于Internet网电子商务系统技术使在网上购物的顾客能够极其方便轻松地获得商家和企业的信息,但同时也增加了对某些敏感或有价值的数据被滥用的风险. 为了保证互联网上电子交易及支付的安全性,保密性等,防范交易及支付过程中的欺诈行为,必须在网上建立一种信任机制。这就要求参加电子商务的买方和卖方都必须拥有合法的身份,并且在网上能够有效无误的被进行验证。数字证书是一种权威性的电子文档。它提供了一种在Internet上验证您身份的方式,其作用类似于司机的驾驶执照或日常生活中的身份证。它是由一个由权威机构----CA证书授权(Certificate Authority)中心发行的,人们可以在互联网交往中用它来识别对方的身份。当然在数字证书认证的过程中,证书认证中心(CA)作为权威的、公正的、可信赖的第三方,其作用是至关重要的。  数字证书也必须具有唯一性和可靠性。为了达到这一目的,需要采用很多技术来实现。通常,数字证书采用公钥体制,即利用一对互相匹配的密钥进行加密、解密。每个用户自己设定一把特定的仅为本人所有的私有密钥(私钥),用它进行解密和签名;同时设定一把公共密钥(公钥)并由本人公开,为一组用户所共享,用于加密和验证签名。当发送一份保密文件时,发送方使用接收方的公钥对数据加密,而接收方则使用自己的私钥解密,这样信息就可以安全无误地到达目的地了。通过数字的手段保证加密过程是一个不可逆过程,即只有用私有密钥才能解密。公开密钥技术解决了密钥发布的管理问题,用户可以公开其公开密钥,而保留其私有密钥。   数字证书颁发过程一般为:用户首先产生自己的密钥对,并将公共密钥及部分个人身份信息传送给认证中心。认证中心在核实身份后,将执行一些必要的步骤,以确信请求确实由用户发送而来,然后,认证中心将发给用户一个数字证书,该证书内包含用户的个人信息和他的公钥信息,同时还附有认证中心的签名信息。用户就可以使用自己的数字证书进行相关的各种活动。数字证书由独立的证书发行机构发布。数字证书各不相同,每种证书可提供不同级别的可信度。可以从证书发行机构获得您自己的数字证书。   目前的数字证书类型主要包括:个人数字证书、单位数字证书、单位员工数字证书、服务器证书、VPN证书、WAP证书、代码签名证书和表单签名证书。  随着Internet的普及、各种电子商务活动和电子政务活动的飞速发展,数字证书开始广泛地应用到各个领域之中,目前主要包括:发送安全电子邮件、访问安全站点、网上招标投标、网上签约、网上订购、安全网上公文传送、网上缴费、网上缴税、网上炒股、网上购物和网上报关等。
      

  4.   

    离线是不可能的,死心吧
    时间戳功能是为了确保签名的时间的,但这时间如何确保呢?用谁电脑的呢?
    答案:用第三方提供的公正时间.
    实际上,实际上例如对于http://timestamp.verisign.com/scripts/timstamp.dll,就是计算出HASH后POST过去给它而已.如果你真正完全自己实现过签名,你应该清楚.除非你是调用MS的或OPENSSL的.
      

  5.   

    顶顶帖子,高手们也请多多赐教
    http://topic.csdn.net/u/20110913/13/59f92d11-1fb0-4b7e-9c4a-e93d8f19c689.html
    http://topic.csdn.net/u/20110611/12/3258c959-4f28-46b7-b5d6-46135d73036b.html
    http://topic.csdn.net/u/20110722/14/89f7440b-c4d7-4c9a-a4bb-a503f5135db2.html
    http://topic.csdn.net/u/20110729/10/a7bfaf06-0cf9-4580-8e91-d4e0b92066c6.html
    http://topic.csdn.net/u/20110811/16/e56e7cc1-d8c9-40af-92e3-c24ca103d17d.html
    http://topic.csdn.net/u/20110830/13/dfae4ca5-d2b9-4889-8a3c-6f7fb61936c9.html
    http://topic.csdn.net/u/20110905/12/a1161adb-8e5d-491a-b302-c9722edf2dab.html
    http://topic.csdn.net/u/20110913/16/2dbcc9db-8f71-40c5-901f-afae9026f7c2.html
    http://topic.csdn.net/u/20110913/13/59f92d11-1fb0-4b7e-9c4a-e93d8f19c689.html
      

  6.   


    没有用的,因为时间戳还包含了证书的,你自己架的,根证书又不是受信任的. Move(Request[0], strTemp[1], Length(Request));
      strSend := 'POST /scripts/timstamp.dll HTTP/1.0'#$D#$A +
        'Content-Type: application/octet-stream'#$D#$A +
        'Host: timestamp.verisign.com'#$D#$A +
        'User-Agent: SecureBlackbox'#$D#$A +
        'Accept-Encoding: gzip, deflate'#$D#$A +
        'Content-Length: ' + IntToStr(Length(strTemp)) + #$D#$A#$D#$A + strTemp;  try
        IdTCPClient1.Write(strSend);
      except
        Exit;
      end;  strRecv := IdTCPClient1.ReadLn(#$D#$A#$D#$A);
      POST /scripts/timstamp.dll HTTP/1.0
      Content-Type: application/octet-stream
      Host: timestamp.verisign.com
      User-Agent: SecureBlackbox
      Accept-Encoding: gzip, deflate
      Content-Length: 225  MIGgBgorBgEEAYI3AwIBMIGRBgkqhkiG9w0BBwGggYMEgYCPb9P6jHca6ekGugvS
      acZHGKfdN9JuWc6w4vSvNQd8KU/YxVMRmVw1oGdGrL8Hsp4PhnLrbmQvB6LhNxgf
      H5ji4asuTk056sFCjZVu6tq8c8LHZzHuDs3NqVBcX3F92QzDUDPYuIo+E20Xx+CI
      6+QFiAOaeVD7s9jUDIvPoeVE+g==
      HTTP/1.1 200 OK
      Server: Netscape-Enterprise/4.1
      Date: Wed, 22 Sep 2010 08:56:51 GMT
      Content-type: application/octet-stream
      Content-length: 3330
      Connection: close  MIIJcQYJKoZIhvcNAQcCoIIJYjCCCV4CAQExCzAJBgUrDgMCGgUAMIGRBgkqhkiG
      9w0BBwGggYMEgYCPb9P6jHca6ekGugvSacZHGKfdN9JuWc6w4vSvNQd8KU/YxVMR
      mVw1oGdGrL8Hsp4PhnLrbmQvB6LhNxgfH5ji4asuTk056sFCjZVu6tq8c8LHZzHu
      Ds3NqVBcX3F92QzDUDPYuIo+E20Xx+CI6+QFiAOaeVD7s9jUDIvPoeVE+qCCB0Yw
      ggN6MIICYqADAgECAhA4Jdf6+GGvnvSQ5ya11lrVMA0GCSqGSIb3DQEBBQUAMFMx
      CzAJBgNVBAYTAlVTMRcwFQYDVQQKEw5WZXJpU2lnbiwgSW5jLjErMCkGA1UEAxMi
      VmVyaVNpZ24gVGltZSBTdGFtcGluZyBTZXJ2aWNlcyBDQTAeFw0wNzA2MTUwMDAw
      MDBaFw0xMjA2MTQyMzU5NTlaMFwxCzAJBgNVBAYTAlVTMRcwFQYDVQQKEw5WZXJp
      U2lnbiwgSW5jLjE0MDIGA1UEAxMrVmVyaVNpZ24gVGltZSBTdGFtcGluZyBTZXJ2
      aWNlcyBTaWduZXIgLSBHMjCBnzANBgkqhkiG9w0BAQEFAAOBjQAwgYkCgYEAxLXy
      UhW8iIZgKRZKWy9LkWuHkfM1VFg16tE2XmJNUlE0ccJ7Zh2JyN0qxGoK9jfZmHSR
      9pKusLV2lvGpSmNFRy5rC5JOSyuM7lhKi9QH5Bos+IKqWNnNQvMtwHXejavHjh2a
      bEwIlR7e2+9n4XLCScKeYDzh4r4Wo2N4aRR7rS0CAwEAAaOBxDCBwTA0BggrBgEF
      BQcBAQQoMCYwJAYIKwYBBQUHMAGGGGh0dHA6Ly9vY3NwLnZlcmlzaWduLmNvbTAM
      BgNVHRMBAf8EAjAAMDMGA1UdHwQsMCowKKAmoCSGImh0dHA6Ly9jcmwudmVyaXNp
      Z24uY29tL3Rzcy1jYS5jcmwwFgYDVR0lAQH/BAwwCgYIKwYBBQUHAwgwDgYDVR0P
      AQH/BAQDAgbAMB4GA1UdEQQXMBWkEzARMQ8wDQYDVQQDEwZUU0ExLTIwDQYJKoZI
      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
      m6Oplr4+f0fkKEl3+UkDWiFJt6xq
    你以为它返回的就一个时间而已么?
      

  7.   


    根证书不受信任的话,子证书也不会受信任的.
    其实签名,制作证书,验证都很简单的,无非就是运算一下而已.举签名为例,其实流程是这样的:1:读取并HASH"MZ"
    2:移动到$0000003C位置,并HASH前面的数据.
    3:读入4字节到FHeaderOffset,判断FHeaderOffset + $A0是否大于文件大小.并HASH这FHeaderOffset.
    4:移动到FHeaderOffset位置,并HASH前面的数据.
    5:读入4字节到PESign,判断PESign 是否为 $00004550.并HASH这PESign.
    6:
    (1)保存当前流位置
    (2)移动指针到当前位置+$14,并读入两字节.如果该内容为$020B,说明为64位PE,那么后面位置要加$10
    (3)恢复流位置7:移动到FHeaderOffset + $58位置,并HASH前面的数据.
    8:FStream.Read(Checksum, 4)!!!注意,这里并没HASH
    9:再次移动到SeekStream(FHeaderOffset + $98 + FDelta64bit)位置,并HASH前面的数据.
    10:FStream.Read(SignatureOffset, 4)!!!注意,这里并没HASH
    11:FStream.Read(SignatureSize, 4)!!!注意,这里并没HASH
    12:根据SignatureOffset之类判断是否已经签名了.
    13:SeekStream(FStream.Size)HASH余下的数据.
    14:(FStream.Size and $F)判断整个文件大小是否能被16整除.不能则后面补零填充
      

  8.   

    没必要的.
    你自己制作一个证书,该证书的目的是时间凿,然后把证书一起签进去就可以了.这就是你所谓的"离线时间戳服务器".
    你随便找个签名后的文件,例如QQ.EXE,查看属性--->数字签名-->反签名-->详细信息--->查看证书,就知道了.上面会显示:
    证书信息:这个证书的目的如下:允许用当前时间签名数据.证书的目的有非常多的.而且可以多个证书一切签名的,例如:WIN64下内核的交叉签名,又例如时间戳,其实就是把多个证书一切签进去罢了.
    不过你前言不搭后语,一会儿说时间戳服务器,跟你说了时间戳服务器,你又说用来校验.跟你说了校验,又反过来说时间戳服务器.你自己从头到尾看一次这贴子吧.
      

  9.   

    "离线时间戳服务器".
    我的说是在将数字证书文件签名到EXE/DLL时加上参数
    http://timestamp.verisign.com/scripts/timstamp.dll
    我家中的电脑不能上网的,我想自己“架设个时间戳服务器”,也就是说即使不上网也能
    完成“时间戳”的功能
      

  10.   

    你所谓利用http://timestamp.verisign.com/scripts/timstamp.dll来签,实质也是证书,前面已经给出数据你了.区别在于什么呢?
    你有一个证书,该证书的目的是"允许用当前时间签名数据."你拥有该证书的公私部分文件,然后你就可以本地离线实现所谓的"时间戳".http://timestamp.verisign.com/scripts/timstamp.dll的话,是你POST数据过去,证书的公私部分文件在它那边,它签订完毕后,将数据返回给你,然后你写到文件,如此而已.其实你连证书的基础都不懂...
      

  11.   

    郁闷中呀,
    我的数字证书已经有了,当将这个数字证书签名到EXE/DLL中时
    想加个“时间戳”功能,若能上网的前提下通过这个参数
    http://timestamp.verisign.com/scripts/timstamp.dll
    就能加上“时间戳”
    假如没有上网的环境时也想实现这个“时间戳”的功能,我的意思
    就是想“架设时间戳服务器”,就是在没有“网络环境”时也能
    加上“时间戳”功能
      

  12.   

    唉,你的理解能力真鸡巴差
    证书的目的有N个,明白否????有些证书的目的是保证文件没有修改过,有些证书的目的是"允许用当前时间签名数据.".
    你要离线时间戳功能,那么,你原来已经有一个证书A用于保证文件没有修改过,然后你再生成一个"允许用当前时间签名数据."的证书B,然后同时用证书A和B一起对你的PE签名.明白了么?http://timestamp.verisign.com/scripts/timstamp.dll的功能相当于证书B,不过这证书位于它的服务器,你POST数据后,它计算完再把数据返回给你,如此而已.
    fuck
      

  13.   

    谢谢赐教,我知道我那里不明白了呀
    不是将“时间戳”+“数字证书” 绑在一块而再签名到EXE/DLL中的
    而这个“时间戳”时实时获取的(即使是没有网络也能得到)
      

  14.   

    “时间戳”其实也是一个证书来的,因为一个PE,是允许同时用N个证书一起签的.
    你就自己生成一个证书,该证书的目的是"允许用当前时间签名数据.",然后和你前面那个证书一起签进去就OK了.
      

  15.   

    lovejingtao
    高手呀,还请多多赐教
      

  16.   

    随便找个淘宝旺旺的EXE看看.注意反签名的签名人姓名那里
      

  17.   

    其实就是生成一个摘要,然后以PKCS7格式返回.
    但是只需两个属性
    第一个属性是#$2A#$86#$48#$86#$F7#$0D#$01#$09#$03,内容是 #$2a#$86#$48#$86#$f7#$0d#$01#$07#$01.
    第二个属性说明是个时间 #$2A#$86#$48#$86#$F7#$0D#$01#$09#$05,内容就是时间(UTCTime格式).
    最后用证书Sign一下消息摘要,加到PE即可.跟网络没鸟关系的,因为证书在本地.
      

  18.   

    其实时间戳功能就是TSP的变种(RFC 3161).跟正规TSP比较,它仅有一个字段,如此而已.
      

  19.   

    lovejingtao
    高手加我QQ好友吧,有问题请赐教
      

  20.   

    呵呵,
    一语中题:
    我我的意思就是如何在
    制作出的数字证书中也包含了时间戳证书
    再将这个证书签名到EXE/DLL时,就直接使用即可
      

  21.   

    没必要了.如果你了解PKI体系,对里面的X509,PKCS,RSA,ASN1,CryptoProv,PKCS1,PKCS5,PKCS7,PKCS8,PKCS10,SHA2等等很了解的话,我前面回复的已经能解决你的问题.
    如果你就懂用第三方工具来生成什么证书之类,跟你也说不明白的.这些需要自己写代码的,类似我那些证书,纯粹用文件格式弄的,没有调用什么第三方的PE或DLL或库.PKI体系很庞大,足够可以写一本很厚的书籍,不是几句话能跟你说明白的.
      

  22.   


    第二个属性说明是个时间 #$2A#$86#$48#$86#$F7#$0D#$01#$09#$05,内容就是时间(UTCTime格式).
    这个时间不一定是当前时间,你自己想用什么时间都可以的.我的程序是这么干的:
    MyTSPClasses.Time:=LocalTimeToUTCTime(Now);
    如此而已.
      

  23.   

    我还是不了解PKI体系
    呀,还请多多赐教
      

  24.   


    这样操作能将数字签名到EXE/DLL,获取当前时间吗????
      

  25.   

    lovejingtao
     
    (CSDN无高手) 
    有相应的工具吗,传到我QQ上学习一下谢谢
      

  26.   

    晕了,你呀
    就不会看看这位
    高手lovejingtao
    是怎么回答的呀,不守这位高手只说了“上文”,还没有说“下文”呀
      

  27.   

    去找PKI的资料看看,GOOGLE很多
    再找OPENSSL代码看看
    我只能说你太懒惰,如果你搜索,会发现CSDN下载频道就有一个时间戳服务器代码
    唉,.....
      

  28.   

    CSDN下载频道就有一个时间戳服务器代码谢谢赐教,我找找先
      

  29.   

    高手 佩服 http://verisign.ert7.com
      

  30.   

    晕了,  VeriSign(威瑞信) 这是个什么东东,我要源代码呀,找它,还不如找微软呢