Openssl

   以下是导师给的一位师姐在openssl方面的总结,按照步骤认真的做了一遍,其中一些在初次接触中困绕的问题,在如下文章中用红色进行了解释和分析,初学者,应该结合相关openssl方面的书,了解本开源软件中的来龙去脉,在实践下面文章中说的操作,收获会更大!

 

       现在还有一个困扰的问题是——release文件夹的生成。在实践中,通过下文说的一篇博客中提供的一份源码msvc,解压后里面有个openssl.dsw文件,编译它,生成release,可是这个文件夹偶尔有生成过,生成的也是空的文件,不知道是否这个文件生成的时候还有其他的.exe文件自动生成了。

 

       

Win32平台下的Openssl学习总结

       Openssl包是共同开发的一个完备的,商业级别的,完全开放源代码的软件包。它实现了SSL协议及相关的加密技术。其中SSL是一个安全传输协议,在Internet网上进行数据保护和身份确认。

一、           Openssl的安装与编译

首先需要下载OpensslPerlVisual C++编译器,其中Openssl可以在http://www.openssl.org/source网站中下载。

其次直接把Openssl解压即可,如:C:/根目录下。

再次,将下载的ActivePerl-5.8.0.806-MSWin32-x86和Visual C++ 进行解压并安装。

完成这一切后进行如下操作:

1)  在“运行”中输入cmd,进行MS-DOS环境

2)  找到openssl解压到的目录,如在C盘根目录,文件名为:openssl-0.9.7e,输入语句:Perl Configure VC-WIN32

即:C:/ openssl-0.9.7e >Perl Configure VC-WIN32

会有如下显示:

 

注:如未出现以上界面,则表明操作有误,而重新解压Openssl再重新操作。若出现如上界面表示Perl已经成功安装且在环境变量Path中加入了C:/Perl/binPerl安装的目录,会安装时自动加入,可以通过查看环境变量看到,如没有,需自己手动加入)。

3)  还是在Openssl的目录下输入ms/do_ms.bat,即:

C:/ openssl-0.9.7e >ms/do_ms.bat,则会有如下类似输出:

4) MS-DOS方式下转到Visual C++的安装目录下的bin目录中,默认目录是:C:/Program Files/Microsoft Visual Studio/VC98/bin,执行vcvars32.bat,以配置环境变量。有如图输入:

   

5)  再回到Openssl的目录,执行:nmake -f ms/ntdll.mak。

即:C:/ openssl-0.9.7e > nmake -f ms/ntdll.mak

如图:

会有如下类似显示:

如果编译成功,最后的输出都在C:/openssl-0.9.7e/out32dll目录下:包括可执行文件(.exe)、两个dll文件和两个lib文件。

 

注:为了可以方便的使用生成的库及可执行文件,需要在环境变量的path项中加入:C:/openssl-0.9.7e/out32dll目录。这样就可以使用openssl。

二、创建自己的认证中心

1、认证中心:

认证中心是提供你在应用程序中需要的各种签名认证的场所。最著名的一些都是Verisign公司和Thawte公司,它们提供网络服务上的SSL认证和微软公司的ActiveX销售的数字签名。这些认证提供加密,提供的安全性能确保公司的安全通信。

创建自己的认证中心,开发者能够在自己的应用软件或程序中使用自己的认证证书。由Trizen设计开发的Visual 3270Visual SSL都是用基于Trizen 服务的认证中心进行的签名的认证证书。如果你想建立一个自己的签名证书,就需要在自己的网络中建立一个能够被访问的认证中心(CA)架构。

       1)建立目录结构

在自己的硬盘上建立一个目录名为CARoot的文件。例如我们可以把这个目录建立在C盘根目录C:/CARoot。在这个目录中创建四个新的目录,分别为certs, crl, newcerts, private。结构类似如下:

注:这些文件目录在建立证书时使用。

2)建立一个随机文件(.rnd

private子目录中建立一个扩展名为.rnd的文件(注:不要在扩展名前加前缀,也就是说文件名就是“.rnd”而不是random.rnd或其它什么名字)。

建立方法是:在运行中输入“cmd,打开cmd.exe,进入C:/CARoot目录,输入

edit private/.rnd

即:C:/CARoot>edit private/.rnd

当看到MS-DOS文件编辑窗口后,输入大串的数字或者打开一个已经有很多数字的文件,并保存文件。这样就在C:/CARoot/private目录下建好了一个.rnd文件。

如图:

3)建立CA Key文件

生成自己的认证机构(CA)的私钥和证书文件。这些文件将在你使用你自己的CA创建其他的认证签名时使用。进入CARoot目录,

       输入openssl genrsa –out private/ca.key –rand private/.rnd 2048

 

上面的语句将产生一个RSA私钥文件,它就是CA私钥文件并且将被用来产生公共的证书。如果输入此语句后提示“目录错误(bad command)”,则说明你没有在坏境变量中加入C:/openssl-0.9.7e/out32dll/release,这个是经过Visual c++编译后生成的Openssl库文件所在的目录。如果一切都运行正确,则会看到与如下类似的画面:

说明:这个“经过Visual c++编译”的编译文件是通过下载一个叫做Msvc097.rar 的文件,解压后即可以看到有个openssl.dsw的工作单元文件,用c++编译后即可。http://www.infosecurity.org.cn/forum/read.php?fid=11&tid=301&fpage=1,这个是下载网页,针对openssl-0.9.7e/f版本的,在0.9.8的版本上,效果不对。但是本次实现偶尔也没有产生预期的release文件夹,研究中。

如果想对所生成的私钥文件加一个密码,这也是被提倡使用的,则可以执行下面的代码来代替刚才已经生成的文件。

C:/CARoot> openssl genrsa –out private/ca.key –rand private/.rnd –des3 2048

可以注意到所加的只是一个“–des3”,如果想了解genrsa这个指令的更多信息,可以执行以下指令

C:/CARoot> openssl genrsa –help

你可以用这个命令来了解更多的OpenSSL指令,并且当忘记哪一个指令用法时可以方便的查找。

 

三、创建一个配置文件(OpenSSL.cnf

       这个配置文件的名字为:OpenSSL.cnf,被用来创建公共证书。这个配置文件包含所有的基于CA体系结构和CA密钥文件来产生公共证书所必须的怕有信息。在OpenSSL文件的apps目录下提供了一个配置文件的例子。但是,Windows系统把.cnf扩展名的文件都作为speed dial类型文件来看待,并且认为是本地文件,所以如果找一个名为“openssl”的这种扩展名的文件就是要找类型为speed dial,名称为openssl的文件。如下:

 

openssl-0.9.7e/apps目录下复制openssl.cnf文件,即图中所选中的文件到CARoot目录下。打开cmd.exe,CARoot目录中输入edit openssl.cnf

即:C:/CARoot>edit openssl.cnf

这样将在MS-DOS的编辑器中打开openssl.cnf的内容,使其处在编辑状态。如图:

 

其包含的内容中最重要的部分如下:

1、  dir .”表示(openssl.cnf)这个配置文件被存储的当前目录。因为我们已经为要建立的认证建立了个目录CARoot,所以需把dir的目录:./demoCA改为:“.”,使用所建立的文件目录。说明:根据用户设定的路径更改此路径

2、  certs:已经发布或者请求的认证存放的位置。

3、  crl_dir:保存撤回即销毁的证书列表,这些证书将不需要再被接受,即不可再被使用。

4、  database:一个文本(index.txt)文件,用来保存已发行证书的编号信息。

5、  new_certs_dir:用来保存签名证书。如果按1中已经改的目录,则这个目录就是:C:/CARoot/newcerts

6、  certificate:这个CA签名来源于CA密钥文件(ca.crt);说明:这个属性是根据用户设置的文件名不同而不同的,本次实验用的是ca.crt,若下次实验用其他的文件名,需要在此配置文件中做相应的修改。

7、  serical:每一个证书在它产生时就被赋于了一个序列号(serial number),用这个来记录增加量。

8、  private_keyCA密文件,保存私钥(ca.key);说明:同6

9、  RANDFILE:这个文件在产生密钥时使用,值得注意的事,加密算法的一些不足会通过使用随机数而避免,使其具有更好的保密性。

其他的部分将在产生公用证书时使用,例如什么样的问题将要被问,它们将被怎么来提问以及其他默认设置。后面你会注意到在这个配置文件中默认的国家是AU,你可以把它改成你的国家的代号,如US(美国)。在这一点上,要保证使每一处修改在配置文件openssl.cnf中都能突出显示。

       如果你已经做了与上面相类似的配置文件(openssl.cnf),将它保存在C:/CARoot目录下,这样你在CARoot目录下就有这样一个配置文件。

 

四、在打开配置文件时存在一些问题

       如果利用上面那种方法打开配置文件时存在一些问题,不是警告。则进入openssl.cnf所存在的那个目录进行操作,即在openssl-0.9.7e/apps目录下:

C:/openssl-0.9.7e/apps>edit openssl.cnf

这样将会打开MS-DOS编辑器,你同样可以做自己的一些修改,然后另存到CARoot目录下。

 

五、为CA创建Datebase文件(index.txt)和序列文件(serial

       可以在配置文件(openssl.cnf)中知道database文件的位置,它指向了一个文件名为(index.txt)的文件。这个文件是由一行行的被CA签名的证书入口组成的。建立这个index文件,需要在C:/CARoot目录下输入:touch ./index.txt

即:C:/CARoot>touch ./index.txt

 

注:Touch是一个程序,用来用当前的系统时间来设置文件的时间戳。如果当前没有touch.exe文件或类似的文件,不用担心,只需手工在CARoot目录下创建一个名为index.txt的文本文件即可。

       现在,你必须创建一个序列文件(serial.这个文件可以通过下面的方式被创建:

打开MS-DOS窗口,输入语句echo 01>serial

即:C:/CARoot>echo 01>serial

 

通过这个命令,可以在CARoot目录下创建文件serial,可能使用计事本或editplus将其打开,打开后会发现它只有一行文字是:01,它将永远不会被引用。OpenSSL文件将使用两次不会被引用的“01”。所以,它在Windows系统中并不起什么作用。应该保证在使用中不对“01”进行引用。

总结一下:现在在CARoot目录下有两个新的文件分别为serialindex.txt。注意这两个文件均在配置文件(openssl.cnf)中被声明过,分别是:database项(使用index.txt)和serial项(使用serial文件)。保证这两个文件在C:/CARoot目录下,而不是它的子目录下。

 

六、建立一个CA证书

通过这一部分,你可以成功地建立一个CA证书。首先要确保你已经把环境变量PATH中加入了C:/openssl-0.9.7e/out32dll/release目录(这个目录是在openssl.dsw中编译时生成的)。进入MS-DOS窗口(或双击CARoot目录下的cmd.exe文件),输入如下的语句:

C:/CARoot> openssl req –new –x509 –days 3650 –key private/ca.key –out private/ca.crt –config openssl.cnf

显示如下:

通过上面的显示可以看出,我们被提出了一系列的问题。当你创建你自己的证书时应该有一个给这个证书签名的最长期限,比如10年(36500天),这是作为CA信息应该知道的。注意到一个问题是与配置文件(openssl.cnf)有关的。同样可以注意执行完这个命令后到,没有什么文件被添加到其他的目录如newcerts目录中。记住,跟上面一样,当使用req.exe可执行文件时,创建的是一个自签名证书!一个自签名证书是一个虚拟的证书,并且是没有被认证中心(CA)认证签名的。如果你进行任何的客户端或者是服务器端的认证,它都将会返因一个错误代码(18,这个代码表示是自签名认证。对于认证中心(CA)的认证,他们都是自签名认证,因为他们是最高级别的;然而,当你创建其他证书时,你将要用你自己的认证中心(CA)的信息对这些证书进行签名。下面就是显示了一个自签名认证中心的CA认证用Wordpad打开时的样子。

 

       这是自签名证书非常标准的书写格式,简单到所有的信息代码都放在了BEGIN CERTIFICATEEND CERTIFICATE中间。通过这一步你已经成功地创建了自己的认证中心(CA)的公开认证签名,并建立了自己的认证中心(CA)的私钥文件,这两个文件都会被保存在C:/CARoot/private 目录中。

 

七、创建一个新的公开认证签名和密钥对

       通过这一步,你将有一个非常基本的认证中心(CA)架构,除此以外,你还可以利用你的机构对它们进行认证和签名。下面的内容将引导你创建一个密钥对:

1)  genrsa.exe命令创建一个新的密钥文件:

C:/CARoot> openssl genrsa –out cert.key –rand private/.rnd 2048

2)  genrsa.exe命令创建一个带有密码的密钥文件:

C:/CARoot> openssl genrsa –out cert.key –rand private/.rnd –des3 2048

 

  如果一切都正常,将会看到与上面类似的画面。使用一个密码来加密服务器上的密钥文件是被高度提倡的。然而,对于客户端的文件来使用一个密码来进行加密是没有必要的。如果你忘记了自己的密码,你将不得不重新申请一个认证签名。

注:输入的密码是不在上面显示的,所以只需要保证两次输入的一致就可。

3)  如下图所示使用req.exe命令来建立一个公开认证签名:

       如果一切运行正常,将会看到类似上面的显示。注意这些问题的提问格式以及如何与先前修改的openssl.cnf文件相匹配的。你可以在任何时候找开这个配置文件(openssl.cnf)来改变它的默认设置。通过这一步,你就在CARoot目录下拥有了一个cert.key和一个cert.crt文件。如果这些文件不存在,重新检查一下自己所做的工作并且进行再次尝试。应该知道这个新的cert.crt文件并没有被签名并且跟认证中心(CA)的证书非常类似。下一步就是使用认证中心(CA)的密钥文件对其进行签名。

 

4)  用下面的指令对证书进行认证签名:

C:/CARoot>openssl ca –ss_cert cert.crt –key private/ca.key –config openssl.cnf –policy policy_anything –out signedcert.crt

 

       注意:不要使用cert.key(在上步刚刚生成的密钥),因为它是刚刚产生的,是用它来产生一个公开密钥,并不是对密钥进行认证签名的。所以必须使用认证中心(CA)的密钥文件(早一些时间产生出来的)来建立这个认证链。

       在上面,一般情况下要 –policy policy_anything指令来接受这个认证,因为这是在ca.exe命令中普便存在的。你一旦对证书进行了认证签名,它将被保存在C:/CARoot/newcerts目录下作为使用序列号的事务交易的一个记录,并且一个扩展名为.pem的文件被创建,如01.pem。对于每个新的认证签名证书,你的newcerts目录将被更新,对每一个新的证书都增加记录(index number)。另一个位置是在C:/CARoot目录下增加一个signedcert.crt文件,它是在-out参数下指定的。在你的OpenSSL应用程序中需用用这个文件和cert.key文件。

 

      注意:你可能需要删除index.txt文件,如果你想重新创建或重新签名认证一个证书。你也需要改变serial文件中的一些连续的数字。

 

       执行上面的语句后将会看到MS-DOS窗口中出现很多文字。并且你会被问你是否想要对证书进行签名。只需要按“Y”并且按回车键。你还将会被问是否想提交这个文件,也是按“Y”并且按回车键。然后,又会看到一些信息显示出来并且最后以“database updated”结束。

       上面的窗口显示了标准地认证过程。如果没有看到与上面类似的东西,则重复上面这些步骤来确认一下是否严格按照例子来执行了。

 

       newcerts目录下会看到一个与名01.pem类似的新的证书。如果打开这个文件,会看到如下类似的内容:

 

Certificate:

    Data:

        Version: 3 (0x2)

        Serial Number: 1 (0x1)

        Signature Algorithm: md5WithRSAEncryption

        Issuer: C=CH, ST=GuiZhou, L=GuiYang, O=JLS, OU=JLS, CN=YFY/emailAddress=yuanfeiyan198310@sohu.com

        Validity

            Not Before: May  7 04:51:34 2007 GMT

            Not After : May  6 04:51:34 2008 GMT

        Subject: C=CH, ST=GuiZhou, L=GuiYang, O=JLS, OU=JLS, CN=YFY/emailAddress=yuanfeiyan198310@sohu.com

        Subject Public Key Info:

            Public Key Algorithm: rsaEncryption

            RSA Public Key: (2048 bit)

                Modulus (2048 bit):

                    00:ad:a5:61:be:fb:eb:06:a4:fa:52:7d:44:4c:28:

                    37:07:0e:2b:a2:3d:fc:69:19:c0:4f:b4:cf:24:51:

                    f1:68:5a:c4:d4:0b:b4:cd:60:75:8a:8f:5c:66:0e:

                    72:73:d6:96:0f:b4:30:4a:f9:e9:26:24:c9:a9:f2:

                    d3:5a:9b:be:a3:2d:d9:0f:72:39:3b:86:7b:35:50:

                    af:6a:58:1f:a1:4f:92:01:74:34:20:71:d2:d4:fc:

                    ba:7f:38:80:86:40:af:b1:80:36:e1:7c:37:3e:63:

                    44:cc:7d:f2:78:ab:99:90:d1:5d:74:fd:b1:68:96:

                    0a:f0:86:8e:ee:e9:4b:15:1a:82:1d:ff:c9:e4:c6:

                    53:bc:ee:00:a7:16:a2:5a:25:7b:39:6a:7e:46:ff:

                    5f:07:bf:67:26:a3:19:ac:dd:60:7c:80:7f:34:c8:

                    d0:0f:85:9d:6b:24:b9:3e:e4:40:72:54:71:d8:5d:

                    0c:60:29:ad:32:4c:f8:b8:85:c2:58:b1:d5:ee:4b:

                    a4:20:00:3a:5e:75:e3:aa:44:76:5e:4d:08:b4:5f:

                    8b:78:84:d0:8b:de:94:0d:50:19:66:a5:23:02:a8:

                    fe:4a:54:00:c4:c6:e3:ba:4f:fe:b8:1f:fa:0e:64:

                    25:9a:14:df:f4:d7:3c:26:ed:41:fa:a1:1d:65:69:

                    b1:61

                Exponent: 65537 (0x10001)

        X509v3 extensions:

            X509v3 Basic Constraints:

                CA:FALSE

            Netscape Comment:

                OpenSSL Generated Certificate

            X509v3 Subject Key Identifier:

                F6:E1:65:70:30:B0:EC:BF:7D:7E:AA:B2:3A:48:8D:41:67:55:79:C7

            X509v3 Authority Key Identifier:

                keyid:26:D7:89:CD:5E:AB:8C:89:5F:4F:A3:3B:CC:E9:EC:A4:2A:0B:B4:5C

               DirName:/C=CH/ST=GuiZhou/L=GuiYang/O=JLS/OU=JLS/CN=YFY/emailAddress=yuanfeiyan198310@sohu.com

                serial:E5:C1:B1:9F:57:DA:BB:74

 

    Signature Algorithm: md5WithRSAEncryption

        97:7d:6c:1e:7d:50:70:da:ff:82:f7:fe:7c:45:84:aa:ae:f9:

        1b:66:31:24:f9:c1:a9:9e:ee:51:cb:72:3c:1f:b2:c9:b8:1e:

        e3:2b:4f:4f:09:a6:a1:e0:b2:b0:5c:aa:c4:cc:f1:1e:d7:6e:

        6a:54:6b:e3:a1:c3:a9:41:23:42:9a:ba:c0:b9:24:2c:58:22:

        13:17:a2:9c:65:85:5f:b7:7e:74:39:16:f6:d2:cc:e5:52:0a:

        78:d6:42:e1:20:4d:88:25:82:5e:c4:9f:a0:45:81:80:fe:41:

        4a:22:95:a2:c8:32:1f:50:41:ea:ea:b8:9b:09:dc:46:2e:ec:

        27:45:2b:bc:85:b3:76:2a:38:2b:7e:25:97:4b:ea:4f:67:d8:

        7b:a5:85:47:c0:38:86:c1:a0:f2:8a:da:fe:fc:f8:28:5a:6c:

        1a:0c:db:48:be:e4:56:49:d7:44:40:94:d8:40:6f:92:70:04:

        dc:dd:63:87:c5:f1:8d:17:62:c4:7b:4e:d2:13:e6:25:72:45:

        ad:b4:ab:9d:e4:07:67:9c:03:74:aa:82:2c:aa:5c:85:bd:e2:

        d2:3c:25:d1:b3:e7:80:40:00:64:c1:bf:f2:a4:d6:41:88:6a:

        1b:7b:82:fd:3c:29:bd:46:25:b1:b3:cf:36:e9:5b:54:f0:51:

        56:31:71:67

-----BEGIN CERTIFICATE-----

MIIEojCCA4qgAwIBAgIBATANBgkqhkiG9w0BAQQFADCBhTELMAkGA1UEBhMCQ0gx

EDAOBgNVBAgTB0d1aVpob3UxEDAOBgNVBAcTB0d1aVlhbmcxDDAKBgNVBAoTA0pM

UzEMMAoGA1UECxMDSkxTMQwwCgYDVQQDEwNZRlkxKDAmBgkqhkiG9w0BCQEWGXl1

YW5mZWl5YW4xOTgzMTBAc29odS5jb20wHhcNMDcwNTA3MDQ1MTM0WhcNMDgwNTA2

MDQ1MTM0WjCBhTELMAkGA1UEBhMCQ0gxEDAOBgNVBAgTB0d1aVpob3UxEDAOBgNV

BAcTB0d1aVlhbmcxDDAKBgNVBAoTA0pMUzEMMAoGA1UECxMDSkxTMQwwCgYDVQQD

EwNZRlkxKDAmBgkqhkiG9w0BCQEWGXl1YW5mZWl5YW4xOTgzMTBAc29odS5jb20w

ggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQCtpWG+++sGpPpSfURMKDcH

DiuiPfxpGcBPtM8kUfFoWsTUC7TNYHWKj1xmDnJz1pYPtDBK+ekmJMmp8tNam76j

LdkPcjk7hns1UK9qWB+hT5IBdDQgcdLU/Lp/OICGQK+xgDbhfDc+Y0TMffJ4q5mQ

0V10/bFolgrwho7u6UsVGoId/8nkxlO87gCnFqJaJXs5an5G/18Hv2cmoxms3WB8

gH80yNAPhZ1rJLk+5EByVHHYXQxgKa0yTPi4hcJYsdXuS6QgADpedeOqRHZeTQi0

X4t4hNCL3pQNUBlmpSMCqP5KVADExuO6T/64H/oOZCWaFN/01zwm7UH6oR1labFh

AgMBAAGjggEZMIIBFTAJBgNVHRMEAjAAMCwGCWCGSAGG+EIBDQQfFh1PcGVuU1NM

IEdlbmVyYXRlZCBDZXJ0aWZpY2F0ZTAdBgNVHQ4EFgQU9uFlcDCw7L99fqqyOkiN

QWdVeccwgboGA1UdIwSBsjCBr4AUJteJzV6rjIlfT6M7zOnspCoLtFyhgYukgYgw

gYUxCzAJBgNVBAYTAkNIMRAwDgYDVQQIEwdHdWlaaG91MRAwDgYDVQQHEwdHdWlZ

YW5nMQwwCgYDVQQKEwNKTFMxDDAKBgNVBAsTA0pMUzEMMAoGA1UEAxMDWUZZMSgw

JgYJKoZIhvcNAQkBFhl5dWFuZmVpeWFuMTk4MzEwQHNvaHUuY29tggkA5cGxn1fa

u3QwDQYJKoZIhvcNAQEEBQADggEBAJd9bB59UHDa/4L3/nxFhKqu+RtmMST5wame

7lHLcjwfssm4HuMrT08JpqHgsrBcqsTM8R7XbmpUa+Ohw6lBI0KausC5JCxYIhMX

opxlhV+3fnQ5FvbSzOVSCnjWQuEgTYglgl7En6BFgYD+QUoilaLIMh9QQerquJsJ

3EYu7CdFK7yFs3YqOCt+JZdL6k9n2HulhUfAOIbBoPKK2v78+ChabBoM20i+5FZJ

10RAlNhAb5JwBNzdY4fF8Y0XYsR7TtIT5iVyRa20q53kB2ecA3SqgiyqXIW94tI8

JdGz54BAAGTBv/Kk1kGIaht7gv08Kb1GJbGzzzbpW1TwUVYxcWc=

-----END CERTIFICATE-----

 

 

 

       如果你查看C:/CARoot目录下的index.txt文件,将会看到有一条来显示证书信息,为:V     080506045134Z            01       unknown/C=CH/ST=GuiZhou/L=GuiYang/O=JLS/OU=JLS/CN=YFY/emailAddress=yuanfeiyan198310@sohu.com。在serial文件内也会看到“02,它表示一个新的证书索引(其中01是最开始一个证书)。

 

       你现在就可以对新建立的这些signedcert.crt文件(已认证证书)进行分发。这些证书将在OpenSSL环境下有效并且在完全使用OpenSSL库的应用中起作用;然而,如果你想在Windows操作系统中安装这个证书,则需要做一些修改使其能够适合Windows操作系统。

 

八、认证证书请求(Signing Certificate Requests)(作为一个认证中心)

       在上面的例子中,我们示范了一个自签名证书的认证过程。在这一部分我们将引导你进入关于如何得到一个证书请求并用自己的信息对其进行认证签名(In this section we will show you how to take a certificate request with your credentials. )。与Verisign或者Thawte类似,你需要从网络信息服务器上创建一个证书请求(request)并且把证书传递给服务器对进行签名认证然后再把签名后的证书返回去给你使用。从IIS服务器上申请一个证书在Creating PKCS#12 Certificates in Internet Information Server这一部分将进行讨论。你可以在MS-DOS窗口中输入下面的语句来进行证书的申请:

C:/CARoot>openssl req –newkey rsa:1024 –keyout private/dummy.key –out private/dummy.pem –config openssl.cnf

 

注意:这只是去进行证书的申请,所以你必须要建立一个认证中心(Certificate Authority)。这对于那些不想去做认证中心(CA)的人来说往往是很困难的。这就是为什么要在网络信息服务器(Internet Information Server)上去创建它们了。得到证书签名请求文件(或创建签名请求文件)你就可以运行下面的语名(command)来对证书进行认证签名:

C:/CARoot>openssl ca –in certreq.txt –key private/ca.key –out newcerts/mycert.cer –policy policy_anything –config openssl.cnf

 

可以注意到它跟自签名证书的唯一的区别就是分别使用了–ss_cert cert.crt–in certreq.txt

 

调整(Adjusting)证书使其适应Windows操作系统(Windows Operating Systems

Windows系统是不能识别由OpenSSL第一次创建的扩展名为.pem的文件的,但是Windows系统可以识别扩展名为.crt的文件。当你对证书进行认证签名时你会注意到,它的内容改变了,你不仅仅像刚开始建立一个证书时那样只有BEGIN CERTIFICATEEND CERTIFICATE所包含的内容。如果你仅仅把文件的扩展名由.pem改为.crt然后双击这个文件。Windows系统提示你一个错误。你必须删除除了包含在BEGIN CERTIFICATEEND CERTIFICATE(与上面的自签名认证中心证书的类似)之间的数据外的其它所有的内容。完成后,鼠标右击这个新创建的signedcert.crt文件,并使用word或者editplus打开。

word或者editplus打开比用计事本(NotePad)打开要好,因为计事本将会显示出所有的额外的ASCII码,使对证书的编辑变得困难。打开这个文件后,删除掉所有的除了在BEGIN CERTIFICATE END CERTIFICATE之间的数据以外的所有内容,以保证BEGIN CERTIFICATE所在行处在第一行并且END CERTIFICATE所在行处在最后一行。保存这个文件。(不用担心,你如果弄错了,你可以再重新创建一个证书并且在index.txt文件和serial文件中删除掉证书的入口即可)。你的文件现在看起来应该与ca.crt文件比较类似了。

 

当你删除掉了开头的信息后,如果需要,可以把扩展名.pem改为.crt。你可以双击这个文件,你应该可以看到如下的注释表明你的信息还有少许的差异:

 

       你有这个安装这个证书到Windows可信任证书的证书数据库的选择权,但在这个时候并不是必须的。如果你查看其它的标签,你会注意到你这个认证证书的所有信息包括关于认证中心的发行者的信息。你还可以注意到,Windows系统并不能在这个证书上找到任何信息。我们将在下一部分安装认证中心(CA)的证书。

 

九、安装认证中心的证书到Windows操作系统(Installing the CA Certificate into the Windows Operating System

       对于任何签名证书,你都需要去掉头部信息并且只能保留BEGIN CERTIFICATEEND CERTIFICATE信息比如在Creating the CA Certificate这一部分介绍的内容。打开C:/CARoot/private目录下的ca.crt文件(用word或者editplus打开),确保它看起来像一个没有头部信息的标准的证书,只有-----BEGIN CERTIFICATE----------END CERTIFICATE-----

       如果CA 证书适合了Windows操作系统的.crt格式,那么你就可以双击这个证书。当一个对话框出现时,与上面的图像类似,点击安装证书(Install Certificate)按钮:

       按下安装证书(Install Certificate…)按钮后,将会看到如下的对话框:

然后点击下一步(Next)即可:

       在上面的对话框中,我选择了“安装所有的证书在如下的位置(Place all certificate in the following store)”然后点击浏览(Browse…)按钮。当选择证书的存放位置的对话框弹出后,我选择了“受信任的根证书颁发机构(Trusted Root Certificate Authorities)”目录并且点击了OK。点击下一步(Next)继续。又将会看到如下的对话框:

然后点击完成(Finish)完成安装过程:

点击YES继续并且安装这个证书。这样,你就已经安装这个认证中心的根证书(CA Root certificate)作为一个可信任的认证中心(a trusted Certificate Authority)。下一步将要安装被这个认证中心认证签名的公开证书。当你再次双击ca.crt时,会发现所显示出来的信息与第一次显示的信息不同:

 

在上面的图片中,Windows已经得到了一些信息,跟我们第一次双击CA 证书时并不一样。如果你点击上面的Certification Path标签,你将会看到看到Windows系统说这个证书路径正确。

       在这一步创建并且认证一个证书,然后双击这个扩展名为.crt的文件,它是刚被创建的认证证书,在C:/CARoot/newcerts目录下(你可能需要改变扩展名.pem.crt并且去掉内部的一些其它数据,只保留开始和结束之间的内容)。如果你依照新的公开证书和密钥对(Creating a New Public Certificate and Key Pair这一部分的指导,你就可以有一个证书并且可以双击进行安装(确定已经使其适应Windows操作系统)。你将会看到下面的对话框:

 

       可以看到并没有安装这个证书。这已经是通过认证的,因为它的根证书已经被安装在Windows系统中且已经通过认证。如果你双击上面的Certification Path标签,将会看到证书链:

注意到这个最新创建并且获得认证签名的根证书是YFY(普通名称)证书。如果你双击它,你将会浏览CA证书。

 

十、使用Web浏览器来安装证书(Using Internet Explorer to Install the Certificate

       另一种安装证书的方式是使用Web浏览器(Internet Explorer)进行安装。它将可以允许你安装.pem类型的文件(保证您已经改变成适合Windows解析)和其它符合PEMx509架构的文件。

 

       打开Web浏览器,从菜单栏选择工具->Internet选项Tools | Internet Options)。当你选择内容标签时,你将可以看到如下内容:

 

当上面的对话框出现时(假设你用的是5.0版本的浏览器),点击证书(Certificates…)按钮。你应该可以得到如下的对话框:

 

十一、证书链(Certificate Chaining

 

从这儿你将可以看到所有可信任的根证书(Trusted Root Certificates)即CACertificate Authorities)。如果这些CA中的一个已经认证签名了一个证书,并且你计算机已经认证,这个根证书将要被接受。根证书处于所有签名证书链的最上面。这些是根据证书链一个个连接在一起的,尽管这儿可以有很多CACertificate Authorities),每一个会在这个证书链中安置一个位置。在这种情况下,Trizen就是根证书,我们认证的其它证书将有1的深度(从0开始),其中0位置是已经认证签名的证书(signed certificate)并且位置1Trizen Root。如果你把Visual SSL或者OpenSSL用在安全应用上,你需要了解客户端认证和证书深度方面的内容。

 

十二、导入CA证书(Import the CA Certificate

       在上面的对话框中,点击导入(import…)按钮。你将会看到如下的对话框:

 

点击下一步(Next)按钮,将会看到如下对话框:

点击浏览(Browse…)按钮并且找到要认证签名的证书,例如,你想导入C:/CARoot/private目录下的ca.crt证书,你必须选择它,并点击下一步(next)按钮继续。

       这个对话框中,只需按默认设置即可,并且点击下一步(Next)按钮。你将会看到如下的对话框。

这一步跟你直接双击.crt文件比较类似。记住你不能双击.pem文件得到这个对话框,你可以通过Web浏览器或者改变.pem的扩展名为.crt,并且去掉文伯内的开头信息,只保留---BEGIN CERTIFICATE------END CERTIFICATE---数据。

 

十三、使用OpenSSL应用程序中的s_server.exe & s_client.exeUsing the OpenSSL Applications s_server.exe & s_client.exe

       无疑,你肯定想要测试你的证书。OpenSSL给你提供了丰富的应用程序,它可以在C:/openssl-0.9.7e/out32dll/release目录下找到。我们已经在上面的部分中讨论了它们中的一些应用,但是作为一个开发者,你会想使用其它的一些应用程序来测试你自己的SSL激活的应用程序。记住这些用法都是基于MS-DOS窗口的,所以把cmd.exe或者command.com复制到C:/openssl-0.9.7e/out32dll/release目录下是被提倡的。

 

运行s_client.exes_server.exeRunning s_client.exe and s_server.exe

       我们可以肯定在你的SSL发展的生命周期中一定会使用到s_server.exe。这是一个很大的应用,因为它将测试你的客户机程序的性能并且确定你可以链接一切正常。如果你的客户机程序可以与s_server.exe取得链接你就可以很确定它可以与其它的SSL激活的服务准确正常的工作,包括https://www.verisign.com和其它的SSL激活的服务。

 

       C:/openssl-0.9.7e/apps目录中复制server.pemclient.pem文件到C:/openssl-0.9.7e/out32dll/release目录。

       双击在release目录下的cmd.exe或者command.com。当MS-DOS窗口打开后,输入如下的语句:

C:/openssl-0.9.7e/out32dll/release>s_server –accept 4433

       这个s_server.exe程序已经准备去接受客户机程序。这时,通过两次点击Ctrl+C退出这个应用程序来停止这个服务。再输入如下的内容并按回车键:

C:/openssl-0.9.7e/out32dll/release>s_server -help

这个命令会显示在s_server.exe应用程序中使用的所有的选项。如果你不使用任保选项(option,这个服务会使用server.pem作为证书在4433端口来接受(accept),当然这个证书也包含一个私钥。注意到你在你使用OpenSSL时你可以把私钥入在同一们文件中作为公开证书(Note that you can place the private key into the same file as the public certificate when using OpenSSL)。

 

       如果你不能停止s_server.exe应用程序的完成,就按住CTRL键,连按字母C两次。这时再复制CARoot/private目录下的ca.keyca.crt文件到release目录。打开MS-DOS窗口,输入:

C:/openssl-0.9.7e/out32dll/release>s_server –cert ca.crt –key ca.key

 

       这样将会使用先前创建的CA公开证书(CA Public Certificate)和CA私钥文件来启动(start)这个s_server应用程序。如果它需要PEM密码,就输入你在创建CA密钥时输入的密码即可。

 

这时,让s_server.exe继续运行,并且双击cmd.exe或者command.com文件打开一个新的MS-DOS窗口,在这个DOS窗口中输入如下语句:

C:/openssl-0.9.7e/out32dll/release>s_client –cert ca.crt –key ca.key

将会看到如下的输出:

       如果没有看到上面类似的输出,应该查看一下是否把ca.crtca.key文件放到了s_client.exe应用程序所在的目录(C:/openssl0.9.7e/out32dll/release)。当然你可能需要加入语句-connect 127.0.0.1:4433,它将把s_server.exe应用程序的主机IP和端口与描述出来。

 

       注意到最后一行:Verify return code:18self signed certificate)。这个s_client.exe应用程序将会自动试图检验这个服务器的证书,而s_server.exe应用程序使用的CA证书是自认证签名的,这是很有意义的。这时就可以关掉你的s_client.exe应用程序,然后再关闭s_server.exe应用程序。

   这时s_server命令所在窗口的输出为:

       复制上一些时间创建的已经认证签名的证书signedcert.crt,或者01.pem文件(或者其它在C:/CARoot目录下的其它文件)到C:/openssl-0.9.7e/out32dll/release目录。复制cert.key,它是在创建请求证书(create the request certificate)时使用的,晚一些时候进行认证签名的。这是一个公开密钥对(实际上这儿有三个,一个公开认证证书,一个请求证书和一个密钥文件)。输入如下语句:

C:/openssl-0.9.7e/out32dll/release>s_server –cert signedcert.crt –key cert.key

你的服务应该是开启并且运行了,再打开另一个MS-DOS窗口,输入下面的语句:

C:/openssl-0.9.7e/out32dll/release>s_client –cert signedcert.crt –key cert.key

 

       如果一切运行正常,你将会看到另一个认证错误。在最后你并没有看到表示自签名认证的错误代码“18,而是“21”或者其它什么。这个错误表示不能确定服务器端的证书是使用一个可信任的证书库进行认证的(就像上面的在Windows系统中安装证书时创建)。

       这里的每一件事都跟客户机程序的认证过程有关。基本上来说,我们需要告知s_client.exe应用程序,它需要在文件里找这些它应该信任的这些证书。这个可以通过使用-CAFile来达到目的。停止运行s_client.exe应用程序,而让s_server.exe应用程序保持运行。

 

十三、创建CAfileCreating a CAfile

       一个CAFile文件创建起来比较简单,它由一些相互关联的公开证书组成。创建一个CAFile,从我的电脑中进入C:/openssl-0.9.7e/out32dll/release目录,在空白处点右键,新建->文本文档,这样会新建一个文本文档,可以把这个文件的名字改为root.pem。这样,你的release目录将会如下所示:

 

       editplus或者word文档来打开root.pem文档。你可以看到一个空白文档。然后用同样的方法打开signedcert.crt文件并且选择所有的内容,并把它复制到root.pem文件中。保存后退出。

 

       这样你就成功地创建了CAfile。如果你还没有关闭s_client.exe。这时你可以把它关闭掉了。然后再输入如下语句:

C:/openssl-0.9.7e/out32dll/release>s_client –cert signedcert.crt –key cert.key –CAfile root.pem

结果为:

如果一切运行正常,你会看到这样的错误!“Unable to verify the first certificate”不是你所要期昐的,但是我们只是复制了这个获得认证签名的证书,我们还必须复制这个CA证书(ca.crt)。关闭掉s_client.exe应用程序并且复制ca.crt证书内部的数据到root.pem文件内容的下面,复制的方法可以跟复制signedcert.crt文件的内容类似,复制完成后保存退出。这时root.pem文件应该看起来与下面的内容类似:

-----BEGIN CERTIFICATE-----

MIIEkzCCA3ugAwIBAgIBATANBgkqhkiG9w0BAQQFADCBhTELMAkGA1UEBhMCQ0gx

EDAOBgNVBAgTB0d1aVpob3UxEDAOBgNVBAcTB0d1aVlhbmcxDDAKBgNVBAoTA0pM

UzEMMAoGA1UECxMDSkxTMQwwCgYDVQQDEwNZRlkxKDAmBgkqhkiG9w0BCQEWGXl1

YW5mZWl5YW4xOTgzMTBAc29odS5jb20wHhcNMDcwNTA3MDU1MDEzWhcNMDgwNTA2

MDU1MDEzWjB3MQswCQYDVQQGEwJDSDERMA8GA1UECBMIU2hhbkRvbmcxDjAMBgNV

BAcTBUxpbllpMQwwCgYDVQQKEwM1MDQxDDAKBgNVBAsTAzUwNDEMMAoGA1UEAxMD

Rk1NMRswGQYJKoZIhvcNAQkBFgxmbW1Ac2luYS5jb20wggEiMA0GCSqGSIb3DQEB

AQUAA4IBDwAwggEKAoIBAQC8rQWPSmi2JAwyQ+3VBNUAI0NmXw+oxlEXPsApki5z

tQUhjLtCOv0C+B4o2NscmgemEd3wRBc1k4SiqfnKHLB+1pZl5rxM3ntskvw3sZRz

2CCqI6wsg7BLPKbLPMBBMQpWobpC8vneZJlrWC1wKWoMb1bWKhCQ3AIjS3P+zT0W

F76Z8ww9UESDbAyhIqw/IsYJsJhoasGJnOtGWmkubdyPIZ9DZFAFw96woXEMK5ZN

L7VkYhwdDpxxdR/rvzXnBEX/FRTvQFA6oYtmf+BmmRlzSlxjZmtvjsOLT5EPoggg

5O6PYf38hAIyDFSj8vNG07maxIY0S0MXcptn5qQUsjPBAgMBAAGjggEZMIIBFTAJ

BgNVHRMEAjAAMCwGCWCGSAGG+EIBDQQfFh1PcGVuU1NMIEdlbmVyYXRlZCBDZXJ0

aWZpY2F0ZTAdBgNVHQ4EFgQURjrBtQF0lVlZ4BgxKjh6datkbBUwgboGA1UdIwSB

sjCBr4AUW7/yqoR/QCIgnLMAPyxVZkOzZV6hgYukgYgwgYUxCzAJBgNVBAYTAkNI

MRAwDgYDVQQIEwdHdWlaaG91MRAwDgYDVQQHEwdHdWlZYW5nMQwwCgYDVQQKEwNK

TFMxDDAKBgNVBAsTA0pMUzEMMAoGA1UEAxMDWUZZMSgwJgYJKoZIhvcNAQkBFhl5

dWFuZmVpeWFuMTk4MzEwQHNvaHUuY29tggkA05vCMCZrAgQwDQYJKoZIhvcNAQEE

BQADggEBADrfenn9uqILzFmNPoIcaIIuZS7SBKK3yGA4f4q2gOXdeu2IMAyGXFeL

Jtt4lSNg21BgUjQLe8J6vF74U2FnEcicAZ1dRzy8vyAwgknylf78sSVi3nPaePBx

Km9rprEfrF8AQyUBVqZafZbL7eHrMNxx9HRHYacuGLMBgimR6DyZ72ZjsHxPWh27

K/BtVAja8dC8nyWCRivDX7D4DNlot8wqlz0uqO2KX3Uy4Q624QHl5P0LmR2IH9Uc

Ql+9eB3F9+3auguqWgyf5jBlR8coFnrgd47NNmoHI0e9AbS/iE/jvGgBRNnf4+R/

Hs3hmTPqRvkUr5VHgA7KzlJWPpBXkbY=

-----END CERTIFICATE-----

-----BEGIN CERTIFICATE-----

MIIEfTCCA2WgAwIBAgIJANObwjAmawIEMA0GCSqGSIb3DQEBBAUAMIGFMQswCQYD

VQQGEwJDSDEQMA4GA1UECBMHR3VpWmhvdTEQMA4GA1UEBxMHR3VpWWFuZzEMMAoG

A1UEChMDSkxTMQwwCgYDVQQLEwNKTFMxDDAKBgNVBAMTA1lGWTEoMCYGCSqGSIb3

DQEJARYZeXVhbmZlaXlhbjE5ODMxMEBzb2h1LmNvbTAeFw0wNzA1MDcwNTM2NTRa

Fw0xNzA1MDQwNTM2NTRaMIGFMQswCQYDVQQGEwJDSDEQMA4GA1UECBMHR3VpWmhv

dTEQMA4GA1UEBxMHR3VpWWFuZzEMMAoGA1UEChMDSkxTMQwwCgYDVQQLEwNKTFMx

DDAKBgNVBAMTA1lGWTEoMCYGCSqGSIb3DQEJARYZeXVhbmZlaXlhbjE5ODMxMEBz

b2h1LmNvbTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAKsM1gmyyYKn

RB5befH1QvlwWf8TAGRrct+3p1Ax+ibA2garkOFgzD/yrUVDmX53gpdyZbQPX7GI

y9w5CUAU4c84He6jSCEe7/2o5RL1+LbXYQ51Rrd+IB+a2w3rpShdVf45A4jo2pCc

n2ijc+1X0JIG9mqNfH6dmFnhNs17SXVQOcxEbWyoQgDztCBuoUa4kaOY98ywU37E

JMwC/mLPSlrO9GIeK51/bX/e/PUb2hrVHuOFpuNu2G+gK56OQlqdh+Z1I2MN3kjF

HCpCz+Pyt0WI3x41i8HxHE1EAlF2cxasZNBju6CCzAYLIJnct1mWIzpcYJZw/Wq/

ew2UUGRUeacCAwEAAaOB7TCB6jAdBgNVHQ4EFgQUW7/yqoR/QCIgnLMAPyxVZkOz

ZV4wgboGA1UdIwSBsjCBr4AUW7/yqoR/QCIgnLMAPyxVZkOzZV6hgYukgYgwgYUx

CzAJBgNVBAYTAkNIMRAwDgYDVQQIEwdHdWlaaG91MRAwDgYDVQQHEwdHdWlZYW5n

MQwwCgYDVQQKEwNKTFMxDDAKBgNVBAsTA0pMUzEMMAoGA1UEAxMDWUZZMSgwJgYJ

KoZIhvcNAQkBFhl5dWFuZmVpeWFuMTk4MzEwQHNvaHUuY29tggkA05vCMCZrAgQw

DAYDVR0TBAUwAwEB/zANBgkqhkiG9w0BAQQFAAOCAQEAB37L+atq3EviMGzZRsJe

c7ybGQ27xKlPqlIYCzHjsejQ6VJ/ORvnQ7aQkS4JJf86BW3pw1hpO+P0Po5ZLmVl

Pc/Cg04nRCx9+D+kUhHej6Amg2JjMVQoy5YNoGhN5VbGzqU9QjVixxty8h/BNgZ6

J6USwc+YV22qTdDHpbFNXTTL0cJHR6J5jGaTRFDnjDmF0L7NIosSleW/e+oIH3lf

r1KCQl2ZnvHxXjXXCmge5Ifv0dSHrW3GH4L6hXFYbW6+GYUqSDu3wK1cUB8t/6Xm

XiyYUaebx/C0hjCxQYHHCP3FZIYIpgEU9NVCXSdItKGgq3ECa/njCRAv3gorJk4w

KQ==

-----END CERTIFICATE-----

       这时你可以进入MS-DOS窗口中,输入刚才输入的语句并按回车键:

C:/openssl-0.9.7e/out32dll/release>s_client –cert signedcert.crt –key cert.key –CAfile root.pem

则会看到如下显示:

       可以注意到:“Verify return code:0(ok)”是对客户机程序认证的返。这就是我们从最开始时所想要得到的。但是我们在root.pem中需要cert.crt证书的内容吗?回答是否定的,一旦你把最高级别的证书安装到CAFileroot.pem,这个客户机程序将会返回“OK”。

阅读更多
个人分类: Openssl
想对作者说点什么? 我来说一句

没有更多推荐了,返回首页

关闭
关闭
关闭