搜档网
当前位置:搜档网 › OpenSSL 中文手册

OpenSSL 中文手册

OpenSSL 中文手册
OpenSSL 中文手册

OpenSSL 中文手册之一OpenSSL 简介-证书

2011-05-13 11:52 44人阅读评论(0) 收藏举报

证书就是数字化的文件,里面有一个实体(网站,个人等)的公共密钥和其他的属性,如名称等。该公共密钥只属于某一个特定的实体,它的作用是防止一个实体假装成另外一个实体。

证书用来保证不对称加密算法的合理性。想想吧,如果没有证书记录,那么假设某俩人A 与B的通话过程如下:

这里假设A的publickey是K1,privatekey是K2,B的publickey是K3,privatekey是K4 xxxxxx(kn)表示用kn加密过的一段文字xxxxxx

A-----〉hello(plaintext)-------------〉B

A〈---------hello(plaintext)〈---------B

A〈---------Bspublickey〈------------B

A---------〉spublickey(K1)--------〉B

......

如果C想假装成B,那么步骤就和上面一样。

A-----〉hello(plaintext)-------------〉C

A〈---------hello(plaintext)〈---------C

注意下一步,因为A没有怀疑C的身份,所以他理所当然的接受了C的publickey,并且使用这个key来继续下面的通信。

A〈---------Cspublickey〈------------C

A---------〉Aspublickey(K1)--------〉C

......

这样的情况下A是没有办法发觉C是假的。如果A在通话过程中要求取得B的证书,并且验证证书里面记录的名字,如果名字和B的名字不符合,就可以发现对方不是B.验证B的名字通过再从证书里面提取B的公用密钥,继续通信过程。

那么,如果证书是假的怎么办?或者证书被修改过了怎么办?慢慢看下来吧。

证书最简单的形式就是只包含有证书拥有者的名字和公用密钥。当然现在用的证书没这么简单,里面至少还有证书过期的deadline,颁发证书的机构名称,证书系列号,和一些其他可选的信息。最重要的是,它包含了证书颁发机构(certificationauthority简称CA)的签名信息。

我们现在常用的证书是采用X.509结构的,这是一个国际标准证书结构。任何遵循该标准的应用程序都可以读,写X509结构的证书。

通过检查证书里面的CA的名字,和CA的签名,就知道这个证书的确是由该CA签发的然后,你就可以简单证书里面的接收证书者的名字,然后提取公共密钥。这样做建立的基础是,你信任该CA,认为该CA没有颁发错误的证书。

CA是第三方机构,被你信任,由它保证证书的确发给了应该得到该证书的人。CA自己有一个庞大的publickey数据库,用来颁发给不同的实体。

这里有必要解释一下,CA也是一个实体,它也有自己的公共密钥和私有密钥,否则怎么做数字签名?它也有自己的证书,你可以去它的站点down它的证书得到它的公共密钥。

一般CA的证书都内嵌在应用程序中间。不信你打开你的IE,在internet选项里面选中"内容",点击"证书",看看那个"中间证书发行机构"和"委托根目录发行机构",是不是有一大堆CA的名称?也有时CA的证书放在安全的数据库里面。

当你接受到对方的证书的时候,你首先会去看该证书的CA,然后去查找自己的CA证书数据库,看看是否找的到,找不到就表示自己不信任该CA,那么就告吹本次连接。找到了的话就用该CA的证书里面的公用密钥去检查CA在证书上的签名。

这里又有个连环的问题,我怎么知道那个CA的证书是属于那个CA的?人家不能造假吗?

解释一下吧。CA也是分级别的。最高级别的CA叫RootCAs,其他cheap一点的CA的证书由他们来颁发和签名。这样的话,最后的保证就是:我们信任RootCAs.那些有RootCAs 签名过的证书的CA就可以来颁发证书给实体或者其他CA了。

你不信任RootCAs?人民币由中国人民银行发行,运到各个大银行,再运到地方银行,你从地方银行取人民币的时候不信任发行它的中国人民银行吗?RootCAs都是很权威的机构,没有必要担心他们的信用。

那RootCAs谁给签名?他们自己给自己签名,叫自签名.

说了这么多,举个certificate的例子吧,对一些必要的item解释一下。

CertificateExample

Certificate:

Data:

Version:1(0x0)

SerialNumber://系列号

02:41:00:00:16

SignatureAlgorithm:md2WithRSAEncryption//CA同志的数字签名的算法

Issuer:C=US,O=RSADataSecurity,Inc.,OU=Commercial//CA自报家门

Certification

Authority

Validity

NotBefore:Nov418:58:341994GMT//证书的有效期

NotAfter:Nov318:58:341999GMT

Subject:C=US,O=RSADataSecurity,Inc.,OU=Commercial

CertificationAuthority

SubjectPublicKeyInfo:

PublicKeyAlgorithm:rsaEncryption

RSAPublicKey:(1000bit)

Modulus(1000bit):

00:a4:fb:81:62:7b:ce:10:27:dd:e8:f7:be:6c:6e:

c6:70:99:db:b8:d5:05:03:69:28:82:9c:72:7f:96:

3f:8e:ec:ac:29:92:3f:8a:14:f8:42:76:be:bd:5d:

03:b9:90:d4:d0:bc:06:b2:51:33:5f:c4:c2:bf:b6:

8b:8f:99:b6:62:22:60:dd:db:df:20:82:b4:ca:a2:

2f:2d:50:ed:94:32:de:e0:55:8d:d4:68:e2:e0:4c:

d2:cd:05:16:2e:95:66:5c:61:52:38:1e:51:a8:82:

a1:c4:ef:25:e9:0a:e6:8b:2b:8e:31:66:d9:f8:d9:

fd:bd:3b:69:d9:eb

Exponent:65537(0x10001)

SignatureAlgorithm:md2WithRSAEncryption

76:b5:b6:10:fe:23:f7:f7:59:62:4b:b0:5f:9c:c1:68:bc:49:

bb:b3:49:6f:21:47:5d:2b:9d:54:c4:00:28:3f:98:b9:f2:8a:

83:9b:60:7f:eb:50:c7:ab:05:10:2d:3d:ed:38:02:c1:a5:48:

d2:fe:65:a0:c0:bc:ea:a6:23:16:66:6c:1b:24:a9:f3:ec:79:

35:18:4f:26:c8:e3:af:50:4a:c7:a7:31:6b:d0:7c:18:9d:50:

bf:a9:26:fa:26:2b:46:9c:14:a9:bb:5b:30:98:42:28:b5:4b:

53:bb:43:09:92:40:ba:a8:aa:5a:a4:c6:b6:8b:57:4d:c5

其实这是我们看的懂的格式的证书内容,真正的证书都是加密过了的,如下:

-----BEGINCERTIFICATE-----

MIIDcTCCAtqgAwIBAgIBADANBgkqhkiG9w0BAQQFADCBiDELMAkGA1UEBhMCQ0gx

EjAQBgNVBAgTCWd1YW5nZG9uZzESMBAGA1UEBxMJZ3Vhbmd6aG91MREwDwYD VQQK

Ewhhc2lhaW5mbzELMAkGA1UECxMCc3cxDjAMBgNVBAMTBWhlbnJ5MSEwHwYJKoZ I

hvcNAQkBFhJmb3JkZXNpZ25AMjFjbi5jb20wHhcNMDAwODMwMDc0MTU1WhcNMDE w

ODMwMDc0MTU1WjCBiDELMAkGA1UEBhMCQ0gxEjAQBgNVBAgTCWd1YW5nZG9u ZzES

MBAGA1UEBxMJZ3Vhbmd6aG91MREwDwYDVQQKEwhhc2lhaW5mbzELMAkGA1UE CxMC

c3cxDjAMBgNVBAMTBWhlbnJ5MSEwHwYJKoZIhvcNAQkBFhJmb3JkZXNpZ25AMjFj

bi5jb20wgZ8wDQYJKoZIhvcNAQEBBQADgY0AMIGJAoGBAMDYArTAhLIFacYZwP30 Zu63mAkgpAjVHaIsIEJ6wySIZl2THEHjJ0kS3i8lyMqcl7dUFcAXlLYi2+rdktoG jBQMOtOHv1/cmo0vzuf38+NrAZSZT9ZweJfIlp8W9uyz8Dv5hekQgXFg/l3L+HSx

wNvQalaOEw2nyf45/np/QhNpAgMBAAGjgegwgeUwHQYDVR0OBBYEFKBL7xGeHQS m

ICH5wBrOiqNFiildMIG1BgNVHSMEga0wgaqAFKBL7xGeHQSmICH5wBrOiqNFiild

oYGOpIGLMIGIMQswCQYDVQQGEwJDSDESMBAGA1UECBMJZ3Vhbmdkb25nMRIw EAYD

VQQHEwlndWFuZ3pob3UxETAPBgNVBAoTCGFzaWFpbmZvMQswCQYDVQQLEwJzd zEO

MAwGA1UEAxMFaGVucnkxITAfBgkqhkiG9w0BCQEWEmZvcmRlc2lnbkAyMWNuLmNv

bYIBADAMBgNVHRMEBTADAQH/MA0GCSqGSIb3DQEBBAUAA4GBAGQa9HK2mixM 7ML7

0jZr1QJUHrBoabX2AbDchb4Lt3qAgPOktTc3F+K7NgB3WSVbdqC9r3YpS23RexU1 aFcHihDn73s+PfhVjpT8arC1RQDg9bDPvUUYphdQC0U+HF72/CvxGCTqpnWiqsgw xqeog0A8H3doDrffw8Zb7408+Iqf

-----ENDCERTIFICATE-----

证书都是有寿命的。就是上面的那个NotBefore和NotAfter之间的日子。过期的证书,如

果没有特殊原因,都要摆在证书回收列(certificaterevocationlist)里面.证书回收列,英文缩写是CRL.比如一个证书的key已经被破了,或者证书拥有者没有权力再使用该证书,该证书就要考虑作废。CRL详细记录了所有作废的证书。

CRL的缺省格式是PEM格式。当然也可以输出成我们可以读的文本格式。下面有个CRL 的例子。

-----BEGINX509CRL-----

MIICjTCCAfowDQYJKoZIhvcNAQECBQAwXzELMAkGA1UEBhMCVVMxIDAeBgNVBAo T

F1JTQSBEYXRhIFNlY3VyaXR5LCBJbmMuMS4wLAYDVQQLEyVTZWN1cmUgU2Vydm Vy

IENlcnRpZmljYXRpb24gQXV0aG9yaXR5Fw05NTA1MDIwMjEyMjZaFw05NTA2MDEw

MDAxNDlaMIIBaDAWAgUCQQAABBcNOTUwMjAxMTcyNDI2WjAWAgUCQQAACRcN OTUw

MjEwMDIxNjM5WjAWAgUCQQAADxcNOTUwMjI0MDAxMjQ5WjAWAgUCQQAADBcNO TUw

MjI1MDA0NjQ0WjAWAgUCQQAAGxcNOTUwMzEzMTg0MDQ5WjAWAgUCQQAAFhcN OTUw

MzE1MTkxNjU0WjAWAgUCQQAAGhcNOTUwMzE1MTk0MDQxWjAWAgUCQQAAHxc NOTUw

MzI0MTk0NDMzWjAWAgUCcgAABRcNOTUwMzI5MjAwNzExWjAWAgUCcgAAERcNO TUw

MzMwMDIzNDI2WjAWAgUCQQAAIBcNOTUwNDA3MDExMzIxWjAWAgUCcgAAHhcNO

TUw

NDA4MDAwMjU5WjAWAgUCcgAAQRcNOTUwNDI4MTcxNzI0WjAWAgUCcgAAOBcNO TUw

NDI4MTcyNzIxWjAWAgUCcgAATBcNOTUwNTAyMDIxMjI2WjANBgkqhkiG9w0BAQIF

AAN+AHqOEJXSDejYy0UwxxrH/9+N2z5xu/if0J6qQmK92W0hW158wpJg+ovV3+wQ

wvIEPRL2rocL0tKfAsVq1IawSJzSNgxG0lrcla3MrJBnZ4GaZDu4FutZh72MR3Gt

JaAL3iTJHJD55kK2D/VoyY1djlsPuNh6AEgdVwFAyp0v

-----ENDX509CRL-----

下面是文本格式的CRL的例子。

ThefollowingisanexampleofaCRLintextformat:

issuer=/C=US/O=RSADataSecurity,Inc./OU=SecureServerCertification

Authority

lastUpdate=May202:12:261995GMT

nextUpdate=Jun100:01:491995GMT

revoked:serialNumber=027200004CrevocationDate=May202:12:261995GMT

revoked:serialNumber=027*******revocationDate=Apr2817:27:211995GMT

revoked:serialNumber=027*******revocationDate=Apr2817:17:241995GMT revoked:serialNumber=027200001ErevocationDate=Apr800:02:591995GMT revoked:serialNumber=024*******revocationDate=Apr701:13:211995GMT revoked:serialNumber=027*******revocationDate=Mar3002:34:261995GMT revoked:serialNumber=027*******revocationDate=Mar2920:07:111995GMT revoked:serialNumber=024100001FrevocationDate=Mar2419:44:331995GMT revoked:serialNumber=024100001ArevocationDate=Mar1519:40:411995GMT revoked:serialNumber=024*******revocationDate=Mar1519:16:541995GMT revoked:serialNumber=024100001BrevocationDate=Mar1318:40:491995GMT revoked:serialNumber=024100000CrevocationDate=Feb2500:46:441995GMT revoked:serialNumber=024100000FrevocationDate=Feb2400:12:491995GMT revoked:serialNumber=024*******revocationDate=Feb1002:16:391995GMT revoked:serialNumber=024*******revocationDate=Feb117:24:261995GMT

总结一下X.509证书是个什么东东吧。它实际上是建立了公共密钥和某个实体之间联系的数字化的文件。它包含的内容有:

版本信息,X.509也是有三个版本的。

系列号

证书接受者名称

颁发者名称

证书有效期

公共密钥

一大堆的可选的其他信息

CA的数字签名

证书由CA颁发,由CA决定该证书的有效期,由该CA签名。每个证书都有唯一的系列号。证书的系列号和证书颁发者来决定某证书的唯一身份。

openssl有四个验证证书的模式。你还可以指定一个callback函数,在验证证书的时候会自动调用该callback函数。这样可以自己根据验证结果来决定应用程序的行为。具体的东西在以后的章节会详细介绍的。

openssl的四个验证证书模式分别是:

SSL_VERIFY_NONE:完全忽略验证证书的结果。当你觉得握手必须完成的话,就选用这个选项。其实真正有证书的人很少,尤其在中国。那么如果SSL运用于一些免费的服务,比如email的时候,我觉得server端最好采用这个模式。

SSL_VERIFY_PEER:希望验证对方的证书。不用说这个是最一般的模式了.对client来说,如果设置了这样的模式,验证server的证书出了任何错误,SSL握手都告吹.对server来说,如果设置了这样的模式,client倒不一定要把自己的证书交出去。如果client没有交出证书,server自己决定下一步怎么做。

SSL_VERIFY_FAIL_IF_NO_PEER_CERT:这是server使用的一种模式,在这种模式下,server会向client要证书。如果client不给,SSL握手告吹。

SSL_VERIFY_CLIENT_ONCE:这是仅能使用在sslsessionrenegotiation阶段的一种方式。什么是SSLsessionrenegotiation?以后的章节再解释。我英文差点,觉得这个词组也很难翻译成相应的中文。以后的文章里,我觉得很难直接翻译的单词或词组,都会直接用英文写出来。如果不是用这个模式的话,那么在regegotiation的时候,client都要把自己的证书送给server,然后做一番分析。这个过程很消耗cpu时间的,而这个模式则不需要client在regotiation的时候重复送自己的证书了。

OpenSSL 中文手册之二OpenSSL 简介-加密算法

2011-05-13 11:56 57人阅读评论(0) 收藏举报加密算法的一些常识

要理解ssl先要知道一些加密算法的常识.

加密算法很容易理解啦,就是把明文变成人家看不懂的东西,然后送给自己想要的送到的地方,接收方用配套的解密算法又把密文解开成明文,这样就不怕在路世上如果密文给人家截获而泄密。

加密算法有俩大类,第一种是不基于KEY的,举个简单的例子,我要加密"fordesign"这么一串字符,就把每个字符都变成它的后一个字符,那么就是"gpseftjhm"了,这样的东西人家当然看不明白,接收方用相反的方法就可以得到原文。当然这只是个例子,现在应该没人用这么搞笑的加密算法了吧。

不基于KEY的加密算法好象一直用到了计算机出现。我记得古中国军事机密都是用这种方式加密的。打战的时候好象军队那些电报员也要带着密码本,也应该是用这种方式加密的。这种算法的安全性以保持算法的保密为前提。

这种加密算法的缺点太明显了,就是一旦你的加密算法给人家知道,就肯定挂。日本中途岛惨败好象就是密码给老米破了。设计一种算法是很麻烦的,一旦给人破了就没用了,这也忑浪费。

我们现在使用的加密算法一般是基于key的,也就是说在加密过程中需要一个key,用这个key来对明文进行加密。这样的算法即使一次被破,下次改个key,还可以继续用。

key是一个什么东西呢?随便你,可以是一个随机产生的数字,或者一个单词,啥都行,只要你用的算法认为你选来做key的那玩意合法就行。

这样的算法最重要的是:其安全性取决于key,一般来说取决于key的长度。也就是说应该保证人家在知道这个算法而不知道key的情况下,破解也相当困难。其实现在常用的基于KEY的加密算法在网络上都可以找到,很多革命同志(都是老外)都在想办法破解基于key

的加密算法又包括俩类:对称加密和不对称加密。对称加密指的是双方使用完全相同的key,最常见的是DES.DES3,RC4等。对称加密算法的原理很容易理解,通信一方用KEK加密

明文,另一方收到之后用同样的KEY来解密就可以得到明文。

不对称加密指双方用不同的KEY加密和解密明文,通信双方都要有自己的公共密钥和私有密钥。举个例子比较容易理解,我们们假设通信双方分别是A,B.

A,拥有KEY_A1,KEY_A2,其中KEY_A1是A的私有密钥,KEY_A2是A的公共密钥。

B,拥有KEY_B1,KEY_B2,其中KEY_B1是B的私有密钥,KEY_B2是B的公共密钥。

公共密钥和私有密钥的特点是,经过其中任何一把加密过的明文,只能用另外一把才能够解开。也就是说经过KEY_A1加密过的明文,只有KEY_A2才能够解密,反之亦然。

通信过程如下:

A-------->KEY_A2------------>B

A<--------KEY_B2<------------A

这个过程叫做公共密钥交换,老外管这叫keyexchange.之后A和B就分别用对方的公共密钥加密,用自己的私有密钥解密。

一般公共密钥是要发布出去的,然后你通过自己的私有密钥加密明文,人家用你的公共密钥解密,如果能解开,那么说明你是加密人,这就是SSL使用的验证机制。

常用的不对称加密一般有RSA,DSA,DH等。我们一般使用RSA.

数字签名也是不对称加密算法的一个重要应用,理解它对于理解SSL很重要的,放在这里一起介绍一下。

签名是什么大家都很熟悉吧?证明该东西是你写的,是你发布的,你就用签名搞定。看看那些重要文件都要头头签名。数字签名就是数字化的签名了。记得公用密钥和私有密钥的特征吗?只有你一个人有你自己的私有密钥。而你的公用密钥是其他人都知道的了。那么你在写完一封邮件之后,用自己的私有密钥加密自己的名字,接收人用你的公共密钥解开一看,哦,是你发的。这就是你的数字签名过程了。

上面的解释是很简化的了,其实数字签名比这个复杂多了,但我们没有了解的必要,知道数字签名是这么一回事就可以了。

还有一种我们需要知道的加密算法,其实我不觉得那是加密算法,应该叫哈希算法,英文是messagedigest,是用来把任何长度的一串明文以一定规则变成固定长度的一串字符串。它在SSL中的作用也很重要,以后会慢慢提及的。一般使用的是MD5,SHA.

base64不是加密算法,但也是SSL经常使用的一种算法,它是编码方式,用来把asc码和二进制码转来转去的。

具体的加密解密过程我们不需要了解,因为SSL根本不关心。但了解加密算法的一些基本原理是必要的,否则很难理解SSL。

对加密算法的细节有兴趣的同志,可以去网络上找这些加密算法的原理的文章和实现的程序来研究,不过先学数论吧。

OpenSSL 中文手册之三OpenSSL 简介-协议

SSL(SecureSocketLayer)是netscape公司提出的主要用于web的安全通信标准,分为2.0版和3.0版.TLS(TransportLayerSecurity)是IETF的TLS工作组在SSL3.0基础之上提出的安全通信标准,目前版本是1.0,即RFC2246.SSL/TLS提供的安全机制可以保证应用层数据在互联网络传输不被监听,伪造和窜改.

一般情况下的网络协议应用中,数据在机器中经过简单的由上到下的几次包装,就进入网络,如果这些包被截获的话,那么可以很容易的根据网络协议得到里面的数据.由网络监听工具可以很容易的做到这一点。

SSL就是为了加密这些数据而产生的协议,可以这么理解,它是位与应用层和TCP/IP之间的一层,数据经过它流出的时候被加密,再往TCP/IP送,而数据从TCP/IP流入之后先进入它这一层被解密,同时它也能够验证网络连接俩端的身份。

它的主要功能就是俩个:

一:加密解密在网络中传输的数据包,同时保护这些数据不被修改,和伪造。

二:验证网络对话中双方的身份

SSL协议包含俩个子协议,一个是包协议,一个是握手协议。包协议是说明SSL的数据包应该如何封装的。握手协议则是说明通信双方如何协商共同决定使用什么算法以及算法使用的key。很明显包协议位于握手协议更下一层。我们暂时对包协议的内容没有兴趣。

SSL握手过程说简单点就是:通信双方通过不对称加密算法来协商好一个对称加密算法以及使用的key,然后用这个算法加密以后所有的数据完成应用层协议的数据交换。

握手一般都是由client发起的,SSL也不例外。

1client送给server它自己本身使用的ssl的version(ssl一共有三个version),加密算法的一些配置,和一些随机产生的数据,以及其他在SSL协议中需要用到的信息。

2server送给client它自己的SSL的version,加密算法的配置,随机产生的数据,还会用自己的私有密钥加密SERVER-HELLO信息。Server还同时把自己的证书文件给送过去。同时有个可选的项目,就是server可以要求需要客户的certificate。

3client就用server送过来的certificate来验证server的身份。如果server身份验证没通过,本次通信结束。通过证书验证之后,得到server的公共密钥,解开server送来的被其用私有密钥加密过的SERVER-HELLO信息,看看对头与否。如果不对,说明对方只有该server 的公共密钥而没有私有密钥,必是假的。通信告吹。

4client使用到目前为止所有产生了的随机数据(sharedsecret),client产生本次握手中的premastersecret(这个步骤是有可能有server的参与的,由他们使用的加密算法决定),并且把这个用server的公共密钥加密,送回给server.如果server要求需要验证client,那么client 也需要自己把自己的证书送过去,同时送一些自己签过名的数据过去。

SSL协议有俩种技术来产生sharedsecret(真不好意思,又是一个很难意译的词组),

一种是RSA,一种是EDH.

RSA就是我们上一章说过的一种不对称加密算法。首先server把自己的RSA公共密钥送给client,client于是用这个key加密一个随机产生的值(这个随机产生的值就是sharedsecret),再把结果送给server.

EDH也是一种不对称加密算法,但它与RSA不同的是,它好象没有自己固定的公共密钥和

私有密钥,都是在程序跑起来的时候产生的,用完就K掉。其他的步骤俩者就差不多了。

RSA,DSA,DH三种不对称加密算法的区别也就在这里。RSA的密钥固定,后俩个需要一个参数来临时生成key.DH甚至要求双方使用同样的参数,这个参数要事先指定。如果SSL 库没有load进这个参数,DH算法就没办法用。DSA没研究过。

5Server验证完client的身份之后,然后用自己的私有密钥解密得到premastersecret然后双方利用这个premastersecret来共同协商,得到mastersecret.

6双方用master一起产生真正的sessionkey,着就是他们在剩下的过程中的对称加密的key 了。这个key还可以用来验证数据完整性。双方再交换结束信息。握手结束。

接下来双方就可以用协商好的算法和key来用对称加密算法继续下面的过程了。

很简单吧?其实要复杂一些的,我简化了很多来说。

不过还是有个问题,喜欢捣蛋的人虽然看不懂他们在交流些什么,但篡改总可以吧?

记得我们在加密算法里面介绍过的哈希算法吗?就是为了对付这种捣蛋者的。在每次送信息的时候,附带把整条信息的哈希值也送过去,接收方收到信息的时候,也把收到的内容哈希一把,然后和对方送来的哈希值对比一下,看看是否正确。捣蛋者如果乱改通信内容,哈希出来的值是不同的,那么就很容易被发现了。

但这样子,捣蛋者至少可以学舌。他可以把之前监听到的内容重复发给某一方,而这些内容肯定是正确的,无法验证出有问题的。哎,SSL是怎么对付这种人的我还没看出来。有篇文章说:多放点随机数在信息里可以对付,我也没去研究这句话是什么意思。

OpenSSL 中文手册之四OpenSSL 简介-入门

实现了SSL的软件不多,但都蛮优秀的。首先,netscape自己提出来的概念,当然自己会实现一套了。netscape的技术蛮优秀的,不过我没用过他们的ssl-toolkit.甚至连名字都没搞清楚。

1995年,eric.young开始开发openssl, 那时候叫ssleay.一直到现在,openssl还在不停的修改和新版本的发行之中。openssl真够大的,我真佩服eric的水平和兴趣。这些open/free

的斗士的精神是我写这个系列的主要动力,虽然写的挺烦的。

ps: eric现在去了RSA公司做,做了一个叫SSL-C的toolkit, 其实和openssl差不多。估计应该比openssl稳定,区别是这个是要银子的,而且几乎所有低层的函数都不提供直接调用了。那多没意思。

去https://www.sodocs.net/doc/d16730563.html, down openssl吧,最新的是0.9.6版。

安装是很简单的。我一直用的是sun sparc的机器,所以用sun sparc的机器做例子。

gunzip -d openssl.0.9.6.tar.gz

tar -xf openssl.0.9.6.tar

mv openssl.0.9.6 openssl

cd openssl

./configure --prefix=XXXXX --openssldir=XXXXXXXX

(这里prefix是你想安装openssl的地方, openssldir就是你tar开的openssl源码的地方。好象所有的出名点的free software都是这个操行,

configure, make , make test, make install, 搞定。)

./make(如果机器慢,这一步的时候可以去洗个澡,换套衣服)

./make test

./make install

OK, 如果路上没有什么问题的话,搞定。

经常有人报bug, 在hp-ux, sgi上装openssl出问题,我没试过,没发言权。

现在可以开始玩openssl了。

注意:我估计openssl最开始是在linux下开发的。大家可以看一看在linxu下有这么一个文件:/dev/urandom, 在sparc下没有。这个文件有什么用?你可以随时找它要一个随机数。在加密算法产生key的时候,我们需要一颗种子:seed。这个seed就是找/dev/urandom 要的那个随机数。那么在sparc下,由于没有这么一个设备,很多openssl的函数会报错:"PRNG not seeded". 解决方法是:在你的~/.profile里面添加一个变量$RANDFILE,设置如下:

$RANDFILE=$HOME/.rnd

然后在$HOME下vi .rnd, 随便往里面乱输入一些字符,起码俩行。

很多openssl的函数都会把这个文件当seed, 除了openssl rsa, 希望openssl尽快修改这个bug.

如果用openssl做toolkit编程,则有其他不太安全的解决方法。以后讲到openssl编程的章节会详细介绍。

先生成自己的私有密钥文件,比如叫server.key

openssl genrsa -des3 -out server.key 1024

genras表示生成RSA私有密钥文件,-des3表示用DES3加密该文件,1024是我们的key的长度。一般用512就可以了,784可用于商业行为了,1024可以用于军事用途了。

当然,这是基于现在的计算机的速度而言,可能没过几年1024是用于开发测试,2048用于一般用途了。

生成server.key的时候会要你输入一个密码,这个密钥用来保护你的server.key文件,这样即使人家偷走你的server.key文件,也打不开,拿不到你的私有密钥。

openssl rsa -noout -text -in server.key

可以用来看看这个key文件里面到底有些什么东西(不过还是看不懂)

如果你觉得server.key的保护密码太麻烦想去掉的话:

openssl rsa -in server.key -out server.key.unsecure

不过不推荐这么做

下一步要得到证书了。得到证书之前我们要生成一个Certificate Signing Request.

CA只对CSR进行处理。

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

生成CSR的时候屏幕上将有提示,依照其指示一步一步输入要求的信息即可.

生成的csr文件交给CA签名后形成服务端自己的证书.怎么交给CA签名?

自己去https://www.sodocs.net/doc/d16730563.html,慢慢看吧。

如果是自己玩下,那么自己来做CA吧。openssl有很简单的方法做CA.但一般只好在开发的时候或者自己玩的时候用,真的做出产品,还是使用正规的CA签发给你的证书吧

在你make install之后,会发现有个misc的目录,进去,运行CA.sh -newca,他会找你要CA需要的一个CA自己的私有密钥密码文件。没有这个文件?按回车创建,输入密码来保护这个密码文件。之后会要你的一个公司信息来做CA.crt文件。最后在当前目录下多了一个./demoCA这样的目录../demoCA/private/cakey.pem就是CA的key文件啦,

./demoCA/cacert.pem就是CA的crt文件了。把自己创建出来的server.crt文件copy到misc目录下,mv成newreq.pem,然后执行CA.sh -sign, ok,

得到回来的证书我们命名为server.crt.

看看我们的证书里面有些什么吧

openssl x509 -noout -text -in server.crt

玩是玩过了,openssl的指令繁多,就象天上的星星。慢慢一个一个解释吧。OpenSSL 中文手册之五OpenSSL 简介-常用指令

2011-05-13 12:00 342人阅读评论(0) 收藏举报openssl简介-指令verify

用法:

openssl verify 【-CApath directory】【-CAfile file】【-purpose purpose】【-untrusted file】【-help】【-issuer_checks】【-verbose】【-】【certificates】

说明:

证书验证工具。[/b:258940505f]

选项

-CApath directory

我们信任的CA的证书存放目录。这些证书的名称应该是这样的格式:

xxxxxxxx.0( xxxxxxxx代表证书的哈希值。参看x509指令的-hash)

你也可以在目录里touch一些这样格式文件名的文件,符号连接到真正的证书。

那么这个xxxxxxxx我怎么知道怎么得到?x509指令有说明。

其实这样子就可以了:

openssl x509 -hash -in server.crt

-CAfile file

我们信任的CA的证书,里面可以有多个CA的证书。

-untrusted file

我们不信任的CA的证书。

-purpose purpose

证书的用途。如果这个option没有设置,那么不会对证书的CA链进行验证。

现在这个option的参数有以下几个:

sslclinet

sslserver

nssslserver

smimesign

smimeencrypt

等下会详细解释的。

-help

打印帮助信息。

-verbose

打印出详细的操作信息。

-issuer_checks

打印出我们验证的证书的签发CA的证书的之间的联系。

要一次验证多个证书,把那些证书名都写在后面就好了。

验证操作解释:

S/MIME和本指令使用完全相同的函数进行验证。

我们进行的验证和真正的验证有个根本的区别:

在我们对整个证书链进行验证的时候,即使中途有问题,我们也会验证到最后,而真实的验证一旦有一个环节出问题,那么整个验证过程就告吹。

验证操作包括几个独立的步骤。

首先建立证书链,从我们目前的证书为基础,一直上溯到Root CA的证书.

如果中间有任何问题,比如找不到某个证书的颁发者的证书,那么这个步骤就挂。有任何一个证书是字签名的,就被认为是Root CA的证书。

寻找一个证书的颁发CA也包过几个步骤。在openssl0.9.5a之前的版本,如果一个证书的颁发者和另一个证书的拥有着相同,就认为后一个证书的拥有者就是前一个证书的签名CA.

openssl0.9.6及其以后的版本中,即使上一个条件成立,还要进行更多步骤的检验。包括验证系列号等。到底有哪几个我也没看明白。

得到CA的名称之后首先去看看是否是不信任的CA, 如果不是,那么才去看看是否是信任的CA. 尤其是Root CA, 更是必须是在信任CA列表里面。

现在得到链条上所有CA的名称和证书了,下一步是去检查第一个证书的用途是否和签发时候批准的一样。其他的证书则必须都是作为CA证书而颁发的。

证书的用途在x509指令里会详细解释。

过了第二步,现在就是检查对Root CA的信任了。可能Root CA也是每个都负责不同领域的证书签发。缺省的认为任何一个Root CA都是对任何用途的证书有签发权。

最后一步,检查整条证书链的合法性。比如是否有任何一个证书过期了?签名是否是正确的?是否真的是由该证书的颁发者签名的?

任何一步出问题,所有该证书值得怀疑,否则,证书检验通过。

如果验证操作有问题了,那么打印出来的结果可能会让人有点模糊。

一般如果出问题的话,会有类似这样子的结果打印出来:

server.pem: /C=AU/ST=Queensland/O=CryptSoft Pty Ltd/CN=Test CA (1024 bit)

error 24 at 1 depth lookup:invalid CA certificate

第一行说明哪个证书出问题,后面是其拥有者的名字,包括几个字段。第二行说明错误号,验证出错在第几层的证书,以及错误描述。

下面是错误号及其描述的详细说明,注意,有的错误虽然有定义,

但真正使用的时候永远不会出现。用unused标志.

0 X509_V_OK

验证操作没有问题

2 X509_V_ERR_UNABLE_TO_GET_ISSUER_CERT

找不到该证书的颁发CA的证书。

3 X509_V_ERR_UNABLE_TO_GET_CRL (unused)

找不到和该证书相关的CRL

4 X509_V_ERR_UNABLE_TO_DECRYPT_CERT_SIGNA TURE

无法解开证书里的签名。

5 X509_V_ERR_UNABLE_TO_DECRYPT_CRL_SIGNA TURE (unused)

无法解开CRLs的签名。

6 X509_V_ERR_UNABLE_TO_DECODE_ISSUER_PUBLIC_KEY

无法得到证书里的公共密钥信息。

7 X509_V_ERR_CERT_SIGNA TURE_FAILURE

证书签名无效

8 X509_V_ERR_CRL_SIGNA TURE_FAILURE (unused)

证书相关的CRL签名无效

9 X509_V_ERR_CERT_NOT_YET_V ALID

证书还没有到有效开始时间

10 X509_V_ERR_CRL_NOT_YET_V ALID (unused)

与证书相关的CRL还没有到有效开始时间

11 X509_V_ERR_CERT_HAS_EXPIRED

证书过期

12 X509_V_ERR_CRL_HAS_EXPIRED (unused)

与证书相关的CRL过期

13 X509_V_ERR_ERROR_IN_CERT_NOT_BEFORE_FIELD

证书的notBefore字段格式不对,就是说那个时间是非法格式。

14 X509_V_ERR_ERROR_IN_CERT_NOT_AFTER_FIELD

证书的notAfter字段格式不对,就是说那个时间是非法格式。

15 X509_V_ERR_ERROR_IN_CRL_LAST_UPDA TE_FIELD (unused) CRL的lastUpdate字段格式不对。

16 X509_V_ERR_ERROR_IN_CRL_NEXT_UPDA TE_FIELD (unused) CRL的nextUpdate字段格式不对

17 X509_V_ERR_OUT_OF_MEM

操作时候内存不够。这和证书本身没有关系。

18 X509_V_ERR_DEPTH_ZERO_SELF_SIGNED_CERT

需要验证的第一个证书就是字签名证书,而且不在信任CA证书列表中。

19 X509_V_ERR_SELF_SIGNED_CERT_IN_CHAIN

可以建立证书链,但在本地找不到他们的根??

: self signed certificate in certificate chain

excel表格的各函数常用函数

excel表格的各函数的基本操作 常用函数如下: 1、SUM()求和、总分函数 例:=SUM(B2:B5) 2、A VERAGE()求平均函数 例:=A VERAGE(B2:B5) 3、MIN()求最小值函数 例:=MIN(B2:B5) 4、MAX()求最大值函数 例:=MAX(B2:B5) 5、COUNTIF()求条件统计函数( 例:=COUNTIF(B7:B33,“>=90”) 6、COUNT()求统计函数 例:=COUNT(B7:B33) 7、IF()求逻辑函数 例:=IF(G7>=90,“优秀”,IF(G7>=80,“良好”,IF(G7)>=70,“中等”,IF(AND(G7<70,G7>0),“差生”,“没参考”)))) 8、RANK()求名次函数 例:=RANK(G7,$G$7:$G$33) 9、NOW()求电脑现在日期 例:=NOW() 10、求“性别”函数 例:=IF(MOD(MID(B6,15,1),2)=0,"女","男") 11、求“出生日期”函数 例:=CONCATENA TE(MID(B6,7,2),"-",MID(B6,9,2),"-",MID(B6,11,2)) 12、求“年龄”、“工龄”函数 例:=DATEDIF(E6,NOW(),"Y") 13、求“等级”函数 例:=IF(C6="基础班","入门级",IF(OR(C6="AUTOCAD班",C6="PHOTOSHOP",C6="CORELDRAW"),"平面设计级",IF(C6="综合班","综合办公应用级",IF(C6="OFFICE套班","办公应用级","网络设计级")))) 14、SUNIF()条件求和函数(根据指定的条件求和) 例:=SUMIF(B7:B33,">=100") 例:=SUMIF(C7:C36,"=人事",D7:D36)

使用OpenSSL建立根CA及自签名证书制作过程

使用OpenSSL建立根CA及自签名证书制作过程 2009-12-24 11:35:32| 分类:openssl |字号订阅 Openssl版本:0.9.8 版本,可从https://www.sodocs.net/doc/d16730563.html,处下载。 1.先建立如下目录结构: $home/testca # testca 是待建CA的主目录 ├─newcerts/ # newcerts子目录将存放CA签发过的数组证书(备份目录) ├─private/ # private目录用来存放CA私钥 └─conf/ # conf目录用来存放简化openssl命令行参数用的配置文件 此外使用命令 echo "01" > serial touch index.txt 在ca根目录下创建文件serial (用来存放下一个证书的序列号) 和indext.txt (证书信息数据库文件)。 1.生成CA的私钥和自签名证书 (根证书) 创建配置文件:vi "$HOME/testca/conf/gentestca.conf" 文件内容如下: #################################### [ req ] default_keyfile = /home/cx/testCA/private/cakey.pem default_md = md5 prompt = no

distinguished_name = ca_distinguished_name x509_extensions = ca_extensions [ ca_distinguished_name ] organizationName = ss organizationalUnitName = sstc commonName = sstcCA emailAddress = GChen2@https://www.sodocs.net/doc/d16730563.html, #自己的邮件地址 [ ca_extensions ] basicConstraints = CA:true ######################################## 然后执行命令如下: cd "$HOME/testca" openssl req -x509 -newkey rsa:2048 -out cacert.pem -outform PEM -days 2190 -config "$HOME/testca/conf/gentestca.conf" 执行过程中需要输入CA私钥的保护密码,假设我们输入密码: 888888 可以用如下命令查看一下CA自己证书的内容 openssl x509 -in cacert.pem -text –noout 创建一个配置文件,以便后续CA日常操作中使用 vi "$HOME/testca/conf/testca.conf"

excel函数公式图文说明教程

excel函数公式实例教程 excel教程珍藏版,简单明了,包你学会,欢迎转载! 教程在陆续上传添加中,敬请期待! 1、PERCENTILE函数实例:求百分比数值点 Excel中PERCENTILE函数实例:求百分 比数值点 [日期:2010-08-09] 来源:IT部落窝作者:IT部落窝阅读:8560次[字体:大中小] Excel中PERCENTILE函数的用法是:返回区域中数值的第 K 个百分点的值。 PERCENTILE函数实例:求百分比数值点 下面是IT部落窝某几天的一个流量表,详见下图。现在要统计出90%、80%、70%、60%、50%对应的百分比数值点。我们使用PERCENTILE函数设计公式来求取。 操作步骤如下:

第一步,选中B17单元格,输入公式:=PERCENTILE(C2:C14,0.9),确定,得到90%处的对应的百分比数值点。 第二步,选中B18单元格,输入公式:=PERCENTILE(C2:C14,0.8),确定,得到80%处的对应的百分比数值点。 第三步,选中B19单元格,输入公式:=PERCENTILE(C2:C14,0.7),确定,得到70%处的对应的百分比数值点。 第四步,选中B20单元格,输入公式:=PERCENTILE(C2:C14,0.6),确定,得到60%处的对应的百分比数值点。 第五步,选中B21单元格,输入公式:=PERCENTILE(C2:C14,0.5),确定,得到50%处的对应的百分比数值点。 2、frequency函数实例:统计一组数据出现的次数

frequency函数实例:统计一组数据出 现的次数 [日期:2010-08-06] 来源:IT部落窝作者:IT部落窝阅读:5390次[字体:大中小] 下表中统计了公司员工被投诉的记录。问题是统计出指定的员工编号被投诉的出现次数。 我们使用excel中frequency函数可以实现出现次数统计。frequency函数用于计算数值在某个区域内的出现频率次数,然后返回一个垂直数组。 操作步骤如下: 首先在C列建立需要参与统计投诉出现次数的员工编号,然后选中D5:D8单元格区域,在编辑栏输入公式:=FREQUENCY(B2:B11,C5:C8),然后按下“Ctrl+Shift+Enter”组合键,即可一次性统计出各个编号在B2:B11单元格区域中出现的次数。 3、frequency函数用法介绍 Excel中frequency函数用法介绍 [日期:2010-08-06] 来源:IT部落窝作者:IT部落窝阅读:6622次[字体:大中小]

OpenSSL证书制作过程

比亚迪培训讲义 在J2EE中使用数字证书 深圳市金蝶中间件有限公司 2007年12月

Table of Contents 1 数字证书使用的场合 (3) 2 数字证书的颁发 (3) 2.1 概述 (3) 2.2 创建自签名CA (3) 2.2.1 生成ca私钥 (3) 2.2.2 生成ca待签名证书 (4) 2.2.3用CA私钥进行自签名,得到自签名的CA根证书 (4) 2.2.4 https://www.sodocs.net/doc/d16730563.html,f配置文档 (5) 2.3 颁发服务器证书 (7) 2.3.1 生成服务器私钥对及自签名证书 (7) 2.3.2 生成服务器待签名证书 (7) 2.3.3 请求CA签名服务器待签名证书,得到经CA签名的服务器证书 (8) 2.3.4把CA根证书导入密钥库 mykeystore (8) 2.3.5把经过CA签名的服务器证书导入密钥库mykeystore (8) 2.4 颁发客户端证书 (9) 2.4.1 生成客户端私钥 (9) 2.4.2生成客户端待签名证书 (9) 2.4.3请求CA签名客户端待签名证书,得到经CA签名的客户端证书 (10) 生成客户端的个人证书client.p12 (10) 2.5 CA根证书导入客户端 (11) 2.6个人证书导入客户端 (11) 3 在J2EE中使用证书 (11) 3.1 配置SSL双向认证 (11) 3.1.1 服务器端密钥库和信任库 (12) 3.1.2修改Muxer服务 (12) 3.1.3修改SecurityService服务 (13) 3.2 在程序中获取证书信息 (13) 4 练习 (13) 5 附录 (14) 5.1 SSL v3的处理步骤 (14) 5.2 命令行调试SSL证书 (14)

openssl使用手册

OpenSSL有两种运行模式:交互模式和批处理模式。 直接输入openssl回车进入交互模式,输入带命令选项的openssl进入批处理模式。 (1) 配置文件 OpenSSL的默认配置文件位置不是很固定,可以用openssl ca命令得知。 你也可以指定自己的配置文件。 当前只有三个OpenSSL命令会使用这个配置文件:ca, req, x509。有望未来版本会有更多命令使用配置文件。 (2)消息摘要算法 支持的算法包括:MD2, MD4, MD5, MDC2, SHA1(有时候叫做DSS1), RIPEMD-160。SHA1和RIPEMD-160产生160位哈西值,其他的产生128位。除非出于兼容性考虑,否则推荐使用SHA1或者RIPEMD-160。 除了RIPEMD-160需要用rmd160命令外,其他的算法都可用dgst命令来执行。 OpenSSL对于SHA1的处理有点奇怪,有时候必须把它称作DSS1来引用。 消息摘要算法除了可计算哈西值,还可用于签名和验证签名。签名的时候,对于DSA生成的私匙必须要和DSS1(即SHA1)搭配。而对于RSA生成的私匙,任何消息摘要算法都可使用。 ############################################################# # 消息摘要算法应用例子 # 用SHA1算法计算文件file.txt的哈西值,输出到stdout $ openssl dgst -sha1 file.txt # 用SHA1算法计算文件file.txt的哈西值,输出到文件digest.txt $ openssl sha1 -out digest.txt file.txt # 用DSS1(SHA1)算法为文件file.txt签名,输出到文件dsasign.bin # 签名的private key必须为DSA算法产生的,保存在文件dsakey.pem中 $ openssl dgst -dss1 -sign dsakey.pem -out dsasign.bin file.txt # 用dss1算法验证file.txt的数字签名dsasign.bin, # 验证的private key为DSA算法产生的文件dsakey.pem $ openssl dgst -dss1 -prverify dsakey.pem -signature dsasign.bin file.txt # 用sha1算法为文件file.txt签名,输出到文件rsasign.bin # 签名的private key为RSA算法产生的文件rsaprivate.pem $ openssl sha1 -sign rsaprivate.pem -out rsasign.bin file.txt # 用sha1算法验证file.txt的数字签名rsasign.bin, # 验证的public key为RSA算法生成的rsapublic.pem $ openssl sha1 -verify rsapublic.pem -signature rsasign.bin file.txt (3) 对称密码 OpenSSL支持的对称密码包括Blowfish, CAST5, DES, 3DES(Triple DES), IDEA, RC2, RC4以及RC5。OpenSSL 0.9.7还新增了AES的支持。很多对称密码支持不同的模式,包括CBC, CFB, ECB以及OFB。对于每一种密码,默认的模式总是CBC。需要特别指出的是,尽量避免使用ECB模式,要想安全地使用它难以置信地困难。 enc命令用来访问对称密码,此外还可以用密码的名字作为命令来访问。除了加解密,base64可作为命令或者enc命令选项对数据进行base64编码/解码。 当你指定口令后,命令行工具会把口令和一个8字节的salt(随机生成的)进行组合,然后计算MD5 hash值。这个hash值被切分成两部分:加密钥匙(key)和初始化向量(initialization

OpenSSL 命令常用证书操作

在OpenSSL开发包中,包含一个实用工具:openssl,比如我用MinGW GCC 编译OpenSSL 0.9.8k 后,openssl 就保存在out目录下。openssl 工具是完成密钥、证书操作和其它SSL 事务的入口环境,直接运行不带参数的openssl 命令后,可以得到一个shell 环境,在其中可以以交互的方式完成SSL 相关的安全事务。 不过有时,如果用一个带参数选项的openssl 命令完成操作,会更方便。下面是我使用openssl 做证书操作时,记录的常用命令用法。 1.生成密钥 生成RSA密钥,保存在file.key中,命令如下: 上面命令的含义是:产生RSA密钥,包括:私钥和公钥两部分,然后使用DES3算法,用用户输入的密码(passphrase)加密该密钥数据,保存在file.key中。 file.key默认以BASE64方式编码密钥数据,file.key的格式称为:PEM (Privacy Enhanced Mail)格式,在RFC 1421到RFC 1424中定义,PEM是早期用来进行安全电子邮件传输的标准,但现在广泛用在证书、证书请求、PKCS#7对象的存储上,所以证书文件也经常以.pem为扩展名。 2.不加密的密钥 如果在生成密钥时,使用了-des3等加密选项,则会生成被用户密码保护的加密密钥,以增强密钥数据的保密性(因为密钥文件中包含私钥部分)。但有时为了方便,需要不加密的明文密钥(这样安全性会降低),比如:使用

Apache的HTTPS服务,每次启动Apache服务时,都需要用户输入保护密钥的密码,感觉麻烦的话,可以使用明文密钥。 明文密钥可以使用不带-des3等加密选项的openssl命令生成,还可以使用以下命令将加密保护的密钥转换成明文密钥,当然转换过程需要用户输入原来的加密保护密码: 3.查看密钥 查看保存在file.key中的RSA密钥的细节,如果此文件是加密保护的,会提示用户输入加密此文件的密码,命令如下: 输出的内容均是RSA密钥数据的数学信息(模数、指数、质数等),从输出的结果中也可知file.key保存的RSA密钥数据包括:私钥和公钥两部分。 该命令也能查看其它工具生成的密钥,比如SSH,只要密钥文件符合openssl支持的格式。 4.生成证书请求 由file.key产生一个证书请求(Certificate Request),保证在file.csr 中,命令如下: 指定时,默认会访问Unix格式的默认路径:/usr/local/ssl/https://www.sodocs.net/doc/d16730563.html,f。 创建证书请求时,会要求用户输入一些身份信息,示例如下:

EXCEL公式手册

这个东西其实是公司一个很老的培训资料,内容非常简单,说白了就是把Excel里按F1打开帮助都能找到的东西贴出来而已。这个东西的唯一价值,只是告诉你这些公式你可能会用得到,所以老手就不必看了,也不必喷了。我在原文的基础上添加了AVERAGEIF、AVERAGEIFS、SUMIFS、COUNTIFS和IFERROR函数(适用于2007以上版本)。 Contents Chapter 0:Updates内容更新 0.1 AVERAGEIF 0.2 AVERAGEIFS、SUMIFS、COUNTIFS 0.3 IFERROR Chapter 1:Text Functions文本函数 1.1 Concatenate 1.2 Exact 1.3 Upper 1.4 Lower 1.5 Left 1.6 Right 1.7 Len 1.8 Trim 1.9 Text 1.10 Substitute Chapter 2:LOOKUP查询函数 2.1 HLookup 2.2 VLookup 2.3 Lookup Chapter 3:Date and Time日期与时间函数 3.1 Today 3.2 Year

3.4 Day 3.5 Date 3.6 Time 3.7 Hour 3.8 Minute 3.9 Second Chapter 4:Math数学函数4.1 ABS 4.2 INT 4.3 PRODUCT 4.4 MOD 4.5 Rand 4.6 ROUND 4.7 ROUNDUP 4.8 ROUNDDOWN 4.9 SumIF 4.10 SumProduct 4.11 Trunc Chapter 5:Logical逻辑函数5.1 And 5.2 Not 5.3 Or 5.4 True 5.5 False 5.6 If Chapter 6:Financial财务函数6.1 PMT

openssl安装及使用

Openssl安装及使用 一软件 Windows下需要用到的软件 1.ActivePerl 一个perl脚本解释器。其包含了包括有Perl for Win32、Perl for ISAPI、PerlScript、Perl Package Manager四套开发工具程序,可以让你编写出适用于unix,windows,linux系统的CGI程序来。安装的只是perl的一个解释程序啦,外观上也不会发生什么变化,你在windows的cmd界面里输入perl -v可查看你所安装的版本。 在你编译perl程序时会用到它。 2.C++编译器 编译器就是将“高级语言”翻译为“机器语言(低级语言)” 的程序。一个现代编译器的主要工作流程:源代码(source code) →预处理器(preprocessor) →编译器(compiler) →汇编程序(assembler) →目标代码(object code) →链接器(Linker) →可执行程序(executables)。c++编译器是一个与标准化C++高度兼容的编译环境。这点对于编译可移植的代码十分重要。编译器对不同的CPU会进行不同的优化。 3.OpenSSL OpenSSL是一个强大的安全套接字层密码库,Apache使用

它加密HTTPS,OpenSSH使用它加密SSH,它还是一个多用途的、跨平台的密码工具。 OpenSSL整个软件包大概可以分成三个主要的功能部分:密码算法库、SSL协议库以及应用程序。OpenSSL的目录结构自然也是围绕这三个功能部分进行规划的。作为一个基于密码学的安全开发包,OpenSSL提供的功能相当强大和全面,囊括了主要的密码算法、常用的密钥和证书封装管理功能以及SSL协议,并提供了丰富的应用程序供测试或其它目的使用。 4.MASM 8.0 MASM是微软公司开发的汇编开发环境,拥有可视化的开发界面,使开发人员不必再使用DOS环境进行汇编的开发,编译速度快,支持80x86汇编以及Win32Asm是Windows下开发汇编的利器。它与windows平台的磨合程度非常好,但是在其他平台上就有所限制,使用MASM的开发人员必须在windows下进行开发。8.0版本在编译OpenSSL的时候不容易出错。 用winrar解压缩MASMSetup.exe得到:setup.exe继续用winrar解压缩setup.exe 得到:vc_masm1.cab继续用winrar解压缩vc_masm1.cab得到:FL_ml_exe__..... (很长的文件名,省略),将这个文件重命名为ml.exe测试得到的ml.exe , 应该显示:Microsoft (R) Macro Assembler Version 8.00.50727.104将ml.exe 拷贝到工作目录,即可正常使用。 5.mspdb60.dll

linux下利用openssl来实现证书的颁发(详细步骤)

linux下利用openssl来实现证书的颁发(详细步骤) 1、首先需要安装openssl,一个开源的实现加解密和证书的专业系统。在centos下可以利用yum安装。 2、openssl的配置文件是https://www.sodocs.net/doc/d16730563.html,f,我们一般就是用默认配置就可以。如果证书有特殊要求的话,可以修改配置适应需求。这样必须把相关的文件放到配置文件指定的目录下面。 3、首先需要利用openssl生成根证书,以后的服务器端证书或者客户端证书都用他来签发,可以建立多个根证书,就像对应不同的公司一样 #生成根证书的私钥 openssl genrsa -out /home/lengshan/ca.key #利用私钥生成一个根证书的申请,一般证书的申请格式都是csr。所以私钥和csr一般需要保存好openssl req -new -key /home/lengshan/ca.key -out /home/lengshan/ca.csr #自签名的方式签发我们之前的申请的证书,生成的证书为ca.crt openssl x509 -req -days 3650 -in /home/lengshan/ca.csr -signkey /home/lengshan/ca.key -out /home/lengshan/ca.crt #为我们的证书建立第一个序列号,一般都是用4个字符,这个不影响之后的证书颁发等操作 echo FACE > /home/lengshan/serial #建立ca的证书库,不影响后面的操作,默认配置文件里也有存储的地方 touch /home/lengshan/index.txt #建立证书回收列表保存失效的证书

Linux怎么使用OpenSSL命令行

Linux怎么使用OpenSSL命令行 OpenSSL是一款命令行工具可以用来做检测,加密解密等等,尤其在Linux中很实用。那么Linux要如何使用OpenSSL命令行呢?下面小编将针对OpenSSL命令行的使用给大家做个详细介绍。 Linux如何使用OpenSSL命令行 1. base64编码/解码 谈到命令行下如何发送邮件附件,很多人想起了uuencode。也可以使用base64编码。以下是openssl base64编码/解码的使用: $ openssl base64 《filename.bin 》filename.txt $ openssl base64 -d 《filename.txt 》filename.bin 2. 校验文件的一致性

UNIX下校验文件一致性的方法很多,比如sum、cksum、md5sum、sha1sum等。sum和cksum适用于简单校验的场合,生成的校验码容易重复。md5sum有安全漏洞,当前比较推荐的是sha1sum。不过sha1sum在不同的平台用法有些不同。考虑到跨平台性,建议用openssl。 $ openssl sha1 filename SHA1(filename)= e83a42b9bc8431a6645099be50b6341a35d3dceb $ openssl md5 filename MD5(filename)= 26e9855f8ad6a5906fea121283c729c4 3. 文件加密/解密 OpenSSL支持很多加密算法,不过一些算法只是为了保持向后兼容性,现在已不推荐使用,比如DES和RC4-40。推荐使用的加密算法是bf(Blowfish)和-aes-128-cbc(运行在CBC模式的128

openssl工具使用简介

openssl工具使用简介 1.私有密钥生成方法 生成私有密钥,可以使用不同的数字签名算法.下面分别介绍; #采用DSA算法 $ openssl dsaparam -noout -out dsakey0.pem -genkey 1024 #采用RSA算法 $ openssl genrsa -out rsakey0.pem 1024 #采用RSA算法,并使用密码保护.在生成私钥时,需要输入一个密码,用于保护私钥. #在使用这个私钥进行加/解密操作时,也需要输入这个密码. $ openssl genrsa -des3 -out rsakey1.pem 1024 2.公用密钥的生成方法 根据私钥来生成公钥 #生成dsa算法的公钥 $ openssl dsa -in dsakey0.pem -pubout -out dsakey0-pub.pem #生成rsa算法的公钥 $ openssl rsa -in rsakey0.pem -pubout -out rsakey0-pub.pem 3.自签名证书的生成方法 #产生DSA算法的证书 $ openssl req -x509 -key dsakey0.pem -days 365 -out mycert-dsa.pem -new #产生RSA算法的证书 $ openssl req -x509 -key rsakey0.pem -days 365 -out mycert-rsa.pem -new 4.使用证书进行邮件加密 我们的明文信件内容: $ cat test.txt 111111 222222 333333 444444 aaaaaa 使用证书对明文信件进行加密,输出到etest.txt文件: $ openssl smime -encrypt -in test.txt -out etest.txt mycert-rsa.pem 查看加密后的密文内容: $ cat etest.txt MIME-Version: 1.0 Content-Disposition: attachment; filename="smime.p7m" Content-Type: application/x-pkcs7-mime; smime-type=enveloped-data; name="smime.p7m" Content-Transfer-Encoding: base64 MIIBYAYJKoZIhvcNAQcDoIIBUTCCAU0CAQAxgewwgekCAQAwUjBFMQswCQYDVQQG EwJBVTETMBEGA1UECBMKU29tZS1TdGF0ZTEhMB8GA1UEChMYSW50ZXJuZXQgV2lk

openssl,CA证书生成命令集合

多级证书 平时我们自己签发CA证书再签发服务器证书的场景其实都非常简单。浏览器把自签CA导入后,就可以信任由这个CA直接签发的服务器证书。 但是实际上网站使用的证书肯定都不是由根CA直接签发的,比如 淘宝登陆服务器使用的证书。 我之前是自己写了脚本由自签CA直接签发服务器证书,为了真清楚的理解一下证书链的作用就直接使用openssl先签发2层的子CA,再由子CA去签发服务器证书。 手动签发证书的脚本如下: 生成自签CA # cat makerootca.sh #!/bin/bash DIR=/root/ssl.test2 mkdir -p $DIR/demoCA/{private,newcerts} touch $DIR/demoCA/index.txt echo 01 > $DIR/demoCA/serial opensslgenrsa -des3 -out $DIR/demoCA/private/cakey.pem 2048

opensslreq -new -x509 -days 3650 -key $DIR/demoCA/private/cakey.pem -out $DIR/demoCA/careq.pem 签发二级CA的脚本 https://www.sodocs.net/doc/d16730563.html,f/root/ssl.test2 # cat no2domain.sh #!/bin/bash [ $# -ne 1 ] && echo "$0 NAME" && exit NAME=$1 DIR=/root/ssl.test2/autoget mkdir -p $DIR opensslgenrsa -des3 -out $DIR/$NAME.key 2048 openssl x509 -in $DIR/../demoCA/careq.pem -noout -text opensslrsa -in $DIR/$NAME.key -out $DIR/$NAME.key opensslreq -new -days 3650 -key $DIR/$NAME.key -out $DIR/$NAME.csr opensslca -extensions v3_ca -in $DIR/$NAME.csr -config $DIR/../https://www.sodocs.net/doc/d16730563.html,f -days 3000 -out $DIR/$NAME.crt -cert $DIR/../demoCA/careq.pem -keyfile $DIR/../demoCA/private/cakey.pem 签发三级CA的脚本 # cat no3domain.sh #!/bin/bash #[ $# -ne 1 ] && echo "$0 NAME" && exit NAME=calv3 DIR=/root/ssl.test2/autoget opensslgenrsa -des3 -out $DIR/$NAME.key 2048

EXCEL VBA方法参考手册

Excel VBA 学习资料 函 数 参 考 手 册

目录 一些对象的应用方法 (4) Add 方法 (5) Add方法(Dictionary) (6) Add 方法(Folders) (6) Assert 方法 (7) BuildPath 方法 (8) Clear 方法 (8) Close 方法 (9) Copy 方法 (10) CopyFile 方法 (10) CopyFolder 方法 (11) CreateFolder 方法 (12) CreateTextFile 方法 (13) Delete 方法 (14) DeleteFile 方法 (14) DeleteFolder 方法 (15) DriveExists 方法 (15) Exists 方法 (16) FileExists 方法 (16) FolderExists 方法 (17) GetAbsolutePathName 方法 (17) GetBaseName 方法 (18) GetExtensionName 方法 (18) GetFile 方法 (19) GetFileName 方法 (19) GetFolder 方法 (20) GetParentFolderName 方法 (20) GetSpecialFolder 方法 (21) GetTempName 方法 (22) Hide 方法 (22) Item 方法 (23) Items 方法 (24) Keys方法 (24) Move 方法 (25) Move 方法(UseForm) (25) 1、应用于 (25) 2、请参阅 (25) MoveFile 方法 (25) MoveFolder 方法 (26) OpenAsTextStream 方法 (27) OpenTextFile 方法 (28) Print 方法 (30)

使用OPENSSL编写服务器和客户端代码实例

使用OPENSSL编写服务器和客户端代码实例使用相同的ca生成两个证书,一个是server.cer,一个是client.cer,注意生成server.cer的时候必须指明证书可以用于服务端的。 服务器代码: 1.#include "openssl/bio.h" 2.#include "openssl/ssl.h" 3.#include "openssl/err.h" 4. 5.#include 6. 7.#define EXIT_IF_TRUE(x) if (x) \ 8. do { \ 9. fprintf(stderr, "Check '%s' is true\n", #x); \ 10. ERR_print_errors_fp(stderr); \ 11. exit(2); \ 12. }while(0) 13. 14.int main(int argc, char **argv) 15.{ 16. SSL_CTX *ctx; 17. SSL *ssl; 18. X509 *client_cert; 19. 20. char szBuffer[1024]; 21. int nLen; 22. 23. struct sockaddr_in addr; 24. int len; 25. int nListenFd, nAcceptFd; 26. 27.// 初始化 28. cutil_init(); 29. cutil_log_set_level(LOG_ALL); 30. cutil_log_set_stderr(1);

31. SSLeay_add_ssl_algorithms(); 32. OpenSSL_add_all_algorithms(); 33. SSL_load_error_strings(); 34. ERR_load_BIO_strings(); 35. 36.// 我们使用SSL V3,V2 37. EXIT_IF_TRUE((ctx = SSL_CTX_new (SSLv23_method())) == NULL); 38. 39.// 要求校验对方证书 40. SSL_CTX_set_verify(ctx, SSL_VERIFY_PEER, NULL); 41. 42.// 加载CA的证书 43. EXIT_IF_TRUE (!SSL_CTX_load_verify_locations(ctx, "cacert.cer", NULL)); 44. 45.// 加载自己的证书 46. EXIT_IF_TRUE (SSL_CTX_use_certificate_file(ctx, "server.cer", SSL_FILETYPE_PEM ) <= 0) ; 47. 48.// 加载自己的私钥 49. EXIT_IF_TRUE (SSL_CTX_use_PrivateKey_file(ctx, "server.key", SSL_FILETYPE_PEM) <= 0) ; 50. 51.// 判定私钥是否正确 52. EXIT_IF_TRUE (!SSL_CTX_check_private_key(ctx)); 53. 54.// 创建并等待连接 55. nListenFd = cutil_socket_new(SOCK_STREAM); 56. cutil_socket_bind(nListenFd, NULL, 8812, 1); 57. 58. memset(&addr, 0, sizeof(addr)); 59. len = sizeof(addr); 60. nAcceptFd = accept(nListenFd, (struct sockaddr *)&addr, (size_t *)&len); 61. cutil_log_debug("Accept a connect from [%s:%d]\n", 62. inet_ntoa(addr.sin_addr), ntohs(addr.sin_port)); 63. 64.// 将连接付给SSL 65. EXIT_IF_TRUE( (ssl = SSL_new (ctx)) == NULL); 66. SSL_set_fd (ssl, nAcceptFd); 67. EXIT_IF_TRUE( SSL_accept (ssl) != 1); 68. 69.// 进行操作 70. memset(szBuffer, 0, sizeof(szBuffer)); 71. nLen = SSL_read(ssl,szBuffer, sizeof(szBuffer)); 72. fprintf(stderr, "Get Len %d %s ok\n", nLen, szBuffer);

OpenSSL介绍

标题:【翻译】(Ubuntu文档)OpenSSL 本文档用于介绍SSL应用层协议,特别是OpenSSL对SSL的实现。举例详细介绍了在Client-Server环境下OpenSSL的使用。最后,通过例子展示了如何在Apache上使用OpenSSL以提供Https服务。 读者应熟练使用命令行,bash,修改配置文件。 OpenSSL简介: SSL也即Secure Socket Layer,是由网景公司为了传输敏感数据而提出的协议。SSL使用私钥加密传输的数据,防止被窃听。SSL最普遍的使用适合和浏览器结合使用,但是其他很多的应用也可以使用SSL。一般而言,使用了SSL的URL以https开头。 OpenSSL是广泛使用的商业级SSL工具,由Eric A. Young和Tim J.Hudson开发的库SSLeay。 X.509是ITU-T发布的数字证书规范。它规定了确定个人或计算机系统身份确认所需的信息和属性,用于安全管理和发布英特网的数字签名证书。OpenSSL广泛应用X.509。 OpenSSL使用 安装:首先使用如下命令确定Ubuntu可用的SSL版本: apt-cache search libssl | grep SSL 应该看到如下结果: libssl0.9.6 - SSL shared libraries (old version) libssl-dev - SSL development libraries, header files and documentation libssl0.9.7 - SSL shared libraries 可能还需要安装ca-certificate. 若需要OpenSSL的通用库,还需安装libssl-dev. 基本OpenSSL命令 确定OpenSSL的版本: openssl verion OpenSSL的可用命令: openssl help 为查找某一命令的帮助,在命令后加-h,如 openssl enc -h 列出所有可用的加密算法: openssl ciphers -v 使用openssl speed可以查看本机的openssl速度,查看每个算法美妙的加密字节数,以及sign/verify的时间 SSL证书 该部分介绍SSL证书的产生,包括用于支持SSL的服务应用的自签名和公认签名,以及用于客户程序的X.509签名。 服务器SSL证书 生成X.509证书后,有三种方式进行签名:自签名,生成CA以及由公认的CA机构签名。证书签名后,便可用于OpenSSL、连接LDAP的SSL通道以及HTTP服务器。该部分用于介绍证书的生成和签名。 生成并自签名证书

openssl 编程入门(含完整示例)

openssl编程入门(含完整示例) 易剑 1.编写目的 第一次跑起openssl示例并不太简单,本文的目的是为了让这个过程变得非常简单。在开始之前,要非常感谢周立发同学,正是通过他共享的示例,较轻松的入了门。本文档对他共享的示例中的一个小错误进行了修正,并提供了傻瓜式的“编译-生成-KEY运行”一条龙脚本(方法请参见压缩包中的readme文件),让跑第一个openssl程序变得轻轻松松。 2.示例包 ssl_test.tar.gz openssl-0.9.8h-Su SE10.tar.gz ssl_test.tar.gz为示例源代码包,openssl-0.9.8h-SuSE10.tar.gz为openssl二进制包,测试时是安装在/usr/local/ssl。 ssl_test.tar.gz中的示例在SuSE10中测试通过,使用的是openssl-0.9.8h,它包括如下文件: -rw-r--r--1root root1346Dec518:11cacert.pem -rwxr-xr-x1root root114Dec518:11make_key.sh -rwxr-xr-x1root root172Dec518:37mk_client.sh -rwxr-xr-x1root root172Dec518:37mk_server.sh -rw-r--r--1root root1679Dec518:11privkey.pem -rw-r--r--1root root167Dec518:39readme -rwxr-xr-x1root root38Dec518:38run_client.sh -rwxr-xr-x1root root64Dec518:38run_server.sh -rwxr-xr-x1root root1140142Dec518:38ssl_client -rw-r--r--1root root3928Dec517:31ssl_client.cpp -rwxr-xr-x1root root1139667Dec518:38ssl_server -rw-r--r--1root root4882Dec517:31ssl_server.cpp readme为包内容说明,run_server.sh用来运行服务端,run_client.sh用来运行客户端,mk_server.sh用来编译服务端,mk_client.sh用来编译客户端,make_key.sh用来生成钥匙KEY。

使用OpenSSLAPI进行安全编程

使用OpenSSL API 进行安全编程 创建基本的安全连接和非安全连接 Kenneth Ballard (kenneth.ballard@https://www.sodocs.net/doc/d16730563.html,), 自由程序员 简介:学习如何使用 OpenSSL ——用于安全通信的最著名的开放库——的API 有些强人所难,因为其文档并不完全。您可以通过本文中的提示补充这方面的知识,并驾驭该 API。在建立基本的连接之后,就可以查看如何使用 OpenSSL 的 BIO 库来建立安全连接和非安全连接。与此同时,您还会学到一些关于错误检测的知识。 OpenSSL API 的文档有些含糊不清。因为还没有多少关于 OpenSSL 使用的教程,所以对初学者来说,在应用程序中使用它可能会有一些困难。那么怎样才能使用 OpenSSL 实现一个基本的安全连接呢?本教程将帮助您解决这个问题。 学习如何实现 OpenSSL 的困难部分在于其文档的不完全。不完全的 API 文档通常会妨碍开发人员使用该 API,而这通常意味着它注定要失败。但 OpenSSL 仍然很活跃,而且正逐渐变得强大。这是为什么? OpenSSL 是用于安全通信的最著名的开放库。在 google 中搜索“SSL library”得到的返回结果中,列表最上方就是 OpenSSL。它诞生于 1998 年,源自 Eric Young 和 Tim Hudson 开发的 SSLeay 库。其他 SSL 工具包包括遵循 GNU General Public License 发行的 GNU TLS,以及 Mozilla Network Security Services(NSS)(请参阅本文后面的参考资料,以获得其他信息)。 那么,是什么使得 OpenSSL 比 GNU TLS、Mozilla NSS 或其他所有的库都优越呢?许可是一方面因素(请参阅参考资料)。此外,GNS TLS(迄今为止)只支持 TLS v1.0 和 SSL v3.0 协议,仅此而已。 Mozilla NSS 的发行既遵循 Mozilla Public License 又遵循 GNU GPL,它允许开发人员进行选择。不过,Mozilla NSS 比 OpenSSL 大,并且需要其他外部库来对库进行编译,而 OpenSSL 是完全自包含的。与 OpenSSL 相同,大部分 NSS API 也没有文档资料。Mozilla NSS 获得了 PKCS #11 支持,该支持可以用于诸如智能卡这样的加密标志。OpenSSL 就不具备这一支持。 先决条件 要充分理解并利用本文,您应该: ?精通 C 编程。 ?熟悉 Internet 通信和支持 Internet 的应用程序的编写。

相关主题