天天看點

Chapter 2. OpenSSL的安裝和配置學習筆記

Chapter 2.

OpenSSL的安裝和配置學習筆記

2.1

在linux上面安裝OpenSSL

我還是做點No

paper事情比較在行,正好和老師的課程接軌一下。

以前嘗試過在Windows上面安裝過openSSL,這次正好在Linux上面實作一下。

希望各位園友門糾錯,征求意見中。

2.1.1

安裝OpenSSL的系統環境和編譯環境

測試環境:Linux MINT 16 Petra

1

2

3

4

5

6

<code>$ lsb_release</code><code>-</code><code>a</code><code>#檢視linux發行版本系統資訊</code>

<code>No LSB modules are available.</code>

<code>Distributor</code><code>ID</code><code>: LinuxMint</code>

<code>Description:    Linux Mint</code><code>16</code>

<code>Petra</code>

<code>Release:   </code><code>16</code>

<code>Codename:   petra</code>

Chapter 2. OpenSSL的安裝和配置學習筆記

安裝OpenSSL所需:ANSI C 編譯器(推薦GCC)、 Perl5(或5以上)、

make(幾乎每個linux發行版本都具有)

LinuxMint 16 自帶perl

5,不需要安裝,如果沒有的話,應該需要安裝perl

參考http://os.51cto.com/art/200912/172903.htm

以編譯的源碼的形式安裝

Chapter 2. OpenSSL的安裝和配置學習筆記
Chapter 2. OpenSSL的安裝和配置學習筆記

2.1.2

linux下openSSL的安裝

<code>/</code><code>桌面</code><code>/</code><code>openssl</code><code>-</code><code>1.0</code><code>.</code><code>1g</code>

<code>$ ls    </code><code>#解壓openssl-1.0.1g.tar.gz之後得到以下檔案</code>

<code>ACKNOWLEDGMENTS  CHANGES.SSLeay  doc      include        INSTALL.NW   INSTALL.WCE   Makefile.org     NEWS          PROBLEMS       ssl    VMS</code>

<code>apps             config          engines  INSTALL        INSTALL.OS2  LICENSE       Makefile.shared  openssl.doxy  README         test</code>

<code>bugs             Configure       e_os2.h  install.com    INSTALL.VMS  MacOS         makevms.com      openssl.spec  README.ASN1    times</code>

<code>certs            crypto          e_os.h   INSTALL.DJGPP  INSTALL.W32  Makefile      ms               os2           README.ENGINE  tools</code>

<code>CHANGES          demos           FAQ      INSTALL.MacOS  INSTALL.W64  Makefile.bak  Netware          perl          shlib          util</code>

Chapter 2. OpenSSL的安裝和配置學習筆記

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

<code>~</code><code>/</code><code>桌面</code><code>/</code><code>openssl</code><code>-</code><code>1.0</code><code>.</code><code>1g</code>

<code>$ .</code><code>/</code><code>config</code><code>-</code><code>-</code><code>prefix</code><code>=</code><code>/</code><code>usr</code><code>/</code><code>local</code><code>/</code><code>openssl </code><code>#OpenSSL配置檔案,配置安裝目錄</code>

<code>Operating system: x86_64</code><code>-</code><code>whatever</code><code>-</code><code>linux2</code>

<code>Configuring</code><code>for</code>

<code>linux</code><code>-</code><code>x86_64</code>

<code>    </code><code>no</code><code>-</code><code>ec_nistp_64_gcc_128 [default]  OPENSSL_NO_EC_NISTP_64_GCC_128 (skip</code><code>dir</code><code>)</code>

<code>    </code><code>no</code><code>-</code><code>gmp          [default]  OPENSSL_NO_GMP (skip</code><code>dir</code><code>)</code>

<code>    </code><code>no</code><code>-</code><code>jpake        [experimental] OPENSSL_NO_JPAKE (skip</code><code>dir</code><code>)</code>

<code>    </code><code>no</code><code>-</code><code>krb5         [krb5</code><code>-</code><code>flavor</code><code>not</code>

<code>specified] OPENSSL_NO_KRB5</code>

<code>    </code><code>no</code><code>-</code><code>md2          [default]  OPENSSL_NO_MD2 (skip</code><code>dir</code><code>)</code>

<code>    </code><code>no</code><code>-</code><code>rc5          [default]  OPENSSL_NO_RC5 (skip</code><code>dir</code><code>)</code>

<code>    </code><code>no</code><code>-</code><code>rfc3779      [default]  OPENSSL_NO_RFC3779 (skip</code><code>dir</code><code>)</code>

<code>    </code><code>no</code><code>-</code><code>sctp         [default]  OPENSSL_NO_SCTP (skip</code><code>dir</code><code>)</code>

<code>    </code><code>no</code><code>-</code><code>shared       [default]</code>

<code>    </code><code>no</code><code>-</code><code>store        [experimental] OPENSSL_NO_STORE (skip</code><code>dir</code><code>)</code>

<code>    </code><code>no</code><code>-</code><code>zlib         [default]</code>

<code>    </code><code>no</code><code>-</code><code>zlib</code><code>-</code><code>dynamic [default]</code>

<code>IsMK1MF</code><code>=</code><code>0</code>

<code>CC           </code><code>=</code><code>gcc</code>

<code>CFLAG        </code><code>=</code><code>-</code><code>DOPENSSL_THREADS</code><code>-</code><code>D_REENTRANT</code><code>-</code><code>DDSO_DLFCN</code><code>-</code><code>DHAVE_DLFCN_H</code><code>-</code><code>Wa,</code><code>-</code><code>-</code><code>noexecstack</code><code>-</code><code>m64</code><code>-</code><code>DL_ENDIAN</code><code>-</code><code>DTERMIO</code><code>-</code><code>O3</code><code>-</code><code>Wall</code><code>-</code><code>DOPENSSL_IA32_SSE2</code><code>-</code><code>DOPENSSL_BN_ASM_MONT</code><code>-</code><code>DOPENSSL_BN_ASM_MONT5</code><code>-</code><code>DOPENSSL_BN_ASM_GF2m</code><code>-</code><code>DSHA1_ASM</code><code>-</code><code>DSHA256_ASM</code><code>-</code><code>DSHA512_ASM</code><code>-</code><code>DMD5_ASM</code><code>-</code><code>DAES_ASM</code><code>-</code><code>DVPAES_ASM</code><code>-</code><code>DBSAES_ASM</code><code>-</code><code>DWHIRLPOOL_ASM</code><code>-</code><code>DGHASH_ASM</code>

<code>EX_LIBS      </code><code>=</code><code>-</code><code>ldl</code>

<code>CPUID_OBJ    </code><code>=</code><code>x86_64cpuid.o</code>

<code>BN_ASM       </code><code>=</code><code>x86_64</code><code>-</code><code>gcc.o x86_64</code><code>-</code><code>mont.o x86_64</code><code>-</code><code>mont5.o x86_64</code><code>-</code><code>gf2m.o modexp512</code><code>-</code><code>x86_64.o</code>

<code>DES_ENC      </code><code>=</code><code>des_enc.o fcrypt_b.o</code>

<code>AES_ENC      </code><code>=</code><code>aes</code><code>-</code><code>x86_64.o vpaes</code><code>-</code><code>x86_64.o bsaes</code><code>-</code><code>x86_64.o aesni</code><code>-</code><code>x86_64.o aesni</code><code>-</code><code>sha1</code><code>-</code><code>x86_64.o</code>

<code>......&lt;br&gt;&lt;br&gt;</code>

~/桌面/openssl-1.0.1g $ ./config -t

Operating system:

x86_64-whatever-linux2

Configuring for linux-x86_64

/usr/bin/perl

./Configure linux-x86_64 -Wa,--noexecstack

  

Chapter 2. OpenSSL的安裝和配置學習筆記
Chapter 2. OpenSSL的安裝和配置學習筆記

<code>$ make</code>

<code>#輸出一大堆資訊,有可能提示沒有gcc編譯器(需安裝),或者提示權限不足(用sudo指令)</code>

<code> </code><code>~</code><code>/</code><code>桌面</code><code>/</code><code>openssl</code><code>-</code><code>1.0</code><code>.</code><code>1g</code>

<code>$ make install</code>

<code>#輸出一大堆資訊,有可能提示提示權限不足(用sudo指令)</code>

 

驗證是否成功安裝OpenSSL。

<code>/</code><code>usr</code><code>/</code><code>local $ ldd</code><code>/</code><code>usr</code><code>/</code><code>local</code><code>/</code><code>openssl</code><code>/</code><code>bin</code><code>/</code><code>openssl    </code><code>#添加環境變量</code>

<code>linux</code><code>-</code><code>vdso.so.</code><code>1</code>

<code>=</code><code>&gt;  (</code><code>0x00007fff0a3fe000</code><code>)</code>

<code>libdl.so.</code><code>2</code>

<code>=</code><code>&gt;</code><code>/</code><code>lib</code><code>/</code><code>x86_64</code><code>-</code><code>linux</code><code>-</code><code>gnu</code><code>/</code><code>libdl.so.</code><code>2</code>

<code>(</code><code>0x00007f620cdd6000</code><code>)</code>

<code>libc.so.</code><code>6</code>

<code>=</code><code>&gt;</code><code>/</code><code>lib</code><code>/</code><code>x86_64</code><code>-</code><code>linux</code><code>-</code><code>gnu</code><code>/</code><code>libc.so.</code><code>6</code>

<code>(</code><code>0x00007f620ca0e000</code><code>)</code>

<code>/</code><code>lib64</code><code>/</code><code>ld</code><code>-</code><code>linux</code><code>-</code><code>x86</code><code>-</code><code>64.so</code><code>.</code><code>2</code>

<code>(</code><code>0x00007f620cff3000</code><code>)</code>

<code>/</code><code>usr</code><code>/</code><code>local $ openssl version   </code><code>#檢視OpenSSL版本資訊,并驗證是否安裝成功</code>

<code>OpenSSL</code><code>1.0</code><code>.</code><code>1e</code>

<code>11</code> <code>Feb</code><code>2013</code>

Chapter 2. OpenSSL的安裝和配置學習筆記

2.1.3

利用openssl的rsa算法進行加密解密

至此我們的OpenSSL在LinuxMINT上面安裝成功了,接下來我們進行簡單的rsa算法使用進行加密。

2.1.3.1

rsa算法簡要介紹:

RSA算法是1977年由羅納德·李維斯特(Ron Rivest)、阿迪·薩莫爾(Adi

Shamir)和倫納德·阿德曼(Leonard

Adleman)一起提出的公鑰非對稱加密算法,是目前最有影響力的公鑰加密算法。

RSA算法基于一個十分簡單的數論事實:将兩個大素數相乘十分容易,但那時想要對其乘積進行因式分解卻極其困難,是以可以将乘積公開作為加密密鑰。

RSA的算法涉及三個參數,n、e1、e2。

其中,n是兩個大質數p、q的積,n的二進制表示時所占用的位數,就是所謂的密鑰長度。

e1和e2是一對相關的值,e1可以任意取,但要求e1與(p-1)*(q-1)互質;再選擇e2,要求(e2*e1)mod((p-1)*(q-1))=1。

(n,e1),(n,e2)就是密鑰對。其中(n,e1)為公鑰,(n,e2)為私鑰。[1]

RSA加解密的算法完全相同,設A為明文,B為密文,則:A=B^e2

mod n;B=A^e1 mod n;(公鑰加密體制中,一般用公鑰加密,私鑰解密)

e1和e2可以互換使用,即:

A=B^e1 mod

n;B=A^e2 mod n;

2.1.3.2 使用OpenSSL進行RSA的加密及解密

26

27

28

29

30

31

32

33

34

<code>#生成密鑰檔案格式:openssl genrsa -out 密鑰檔案 密鑰長度</code>

<code>~</code><code>/</code><code>桌面 $ openssl genrsa</code><code>-</code><code>out test.key</code><code>1024</code>

<code>Generating RSA private key,</code><code>1024</code>

<code>bit</code><code>long</code>

<code>modulus</code>

<code>........................................</code><code>+</code><code>+</code><code>+</code><code>+</code><code>+</code><code>+</code>

<code>..................</code><code>+</code><code>+</code><code>+</code><code>+</code><code>+</code><code>+</code>

<code>e</code><code>is</code>

<code>65537</code> <code>(</code><code>0x10001</code><code>)</code>

<code>~</code><code>/</code><code>桌面 $ cat test.key</code>

<code>-</code><code>-</code><code>-</code><code>-</code><code>-</code><code>BEGIN RSA PRIVATE KEY</code><code>-</code><code>-</code><code>-</code><code>-</code><code>-</code>

<code>MIICXwIBAAKBgQDt86MIs2GWuHhyAlMd9fRnBJorp</code><code>/</code><code>Buii6YjoldzMaPF5KIf5ub</code>

<code>YKHhnGyYWPVo74mnWKRPDCL0o</code><code>/</code><code>pRhthdlHHY</code><code>/</code><code>Vdg2YG8KbK9wXwf4I</code><code>+</code><code>zihsc4vRy</code>

<code>NgmJNbF1jGI4srRt8oqtBDtrsYZykLYcqtWWxL9bqjXdJO9PtipOssK7DwIDAQAB</code>

<code>AoGBANPyquqKFUfSIn6ysWRDeyHzyHtQSGm9rYl3lMW3K7mzLnNk7q60oRy7X0NI</code>

<code>IbgJfRxRaXF7hvtPwBy0Nq8MFWaReEcnxcPJt61TKTwvFrKlGeZnrG71ksgazZel</code>

<code>690FrN67R1rUfPO1HCJA58InBGstktSVo</code><code>+</code><code>BXhXCfcoae7jIJAkEA</code><code>+</code><code>IAd6KZUU</code><code>+</code><code>71</code>

<code>KgdXMVUHCEUG</code><code>+</code><code>MQ4tISCuVV5Xq2in46tVWN5xeyneJirIpOrNk0rldS6MOKPoDav</code>

<code>Gg</code><code>/</code><code>bkgaf7QJBAPUiBY7BUG2FVs</code><code>/</code><code>nMbJg4qaTORVge84Sr2kK9A3wfvcul3bzgQ8u</code>

<code>xhubxQx6wuOwJ3</code><code>+</code><code>ZjDT1chq7AO</code><code>+</code><code>6hbc7D2sCQQC</code><code>+</code><code>H19CqUcpdFCUWEtojfI0bIN5</code>

<code>/</code><code>r6Xti5B19hlDJm4U7Pf</code><code>+</code><code>ZyoRniW9s8wRCShBgfLuZa</code><code>+</code><code>Ygia</code><code>/</code><code>luXp</code><code>/</code><code>xIy9K9AkEA</code>

<code>wTGuFaNvwtFa6QH6He7T0pqnW5yuFmyNiIkUbcQEHMXApAQnzBJ</code><code>+</code><code>GhY7R6mc3Zvg</code>

<code>lWUrpjVnV3</code><code>/</code><code>Yrhdf</code><code>+</code><code>Vf3vwJBAMO796q9Ne9YJvqTQMo9AjmQgD3kw9txhJe0BlQV</code>

<code>YX</code><code>/</code><code>Ffwo2FxFDdCAwNKWyKt3zEyXOmnxxvdzQb0MY2WSV7CE</code><code>=</code>

<code>-</code><code>-</code><code>-</code><code>-</code><code>-</code><code>END RSA PRIVATE KEY</code><code>-</code><code>-</code><code>-</code><code>-</code><code>-</code>

<code>#密鑰檔案生成公鑰檔案</code>

<code>#格式:openssl rsa -in 密鑰檔案 -pubout -out 公鑰檔案</code>

<code>~</code><code>/</code><code>桌面 $ openssl rsa</code><code>-</code><code>in</code>

<code>test.key</code><code>-</code><code>pubout</code><code>-</code><code>out TPub.key</code>

<code>writing RSA key</code>

<code>~</code><code>/</code><code>桌面 $ cat TPub.key</code>

<code>-</code><code>-</code><code>-</code><code>-</code><code>-</code><code>BEGIN PUBLIC KEY</code><code>-</code><code>-</code><code>-</code><code>-</code><code>-</code>

<code>MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDt86MIs2GWuHhyAlMd9fRnBJor</code>

<code>p</code><code>/</code><code>Buii6YjoldzMaPF5KIf5ubYKHhnGyYWPVo74mnWKRPDCL0o</code><code>/</code><code>pRhthdlHHY</code><code>/</code><code>Vdg</code>

<code>2YG8KbK9wXwf4I</code><code>+</code><code>zihsc4vRyNgmJNbF1jGI4srRt8oqtBDtrsYZykLYcqtWWxL9b</code>

<code>qjXdJO9PtipOssK7DwIDAQAB</code>

<code>-</code><code>-</code><code>-</code><code>-</code><code>-</code><code>END PUBLIC KEY</code><code>-</code><code>-</code><code>-</code><code>-</code><code>-</code>

Chapter 2. OpenSSL的安裝和配置學習筆記
Chapter 2. OpenSSL的安裝和配置學習筆記

這裡我們生成一個包含"this text will

encrypt"的文本檔案TText.en作為待加密檔案,并使用rsa加密算法對其進行加密,然後在對加密檔案進行解密。

這裡需要注意的是用OpenSSL的rsa算法生成的秘鑰檔案就是本次解密使用的私鑰,而我們的公鑰是由該私鑰檔案分解出來的(openssl rsa -in

密鑰檔案 -pubout -out 公鑰檔案),即私鑰内包含公鑰。