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

$ lsb_release -a #查看linux发行版本系统信息

No LSB modules are available.

Distributor ID: LinuxMint

Description:    Linux Mint 16
Petra

Release:    16

Codename:   petra

安装OpenSSL所需:ANSI C 编译器(推荐GCC)、 Perl5(或5以上)、
make(几乎每个linux发行版本都具有)

LinuxMint 16 自带perl
5,不需要安装,如果没有的话,应该需要安装perl
参考http://os.51cto.com/art/200912/172903.htm
以编译的源码的形式安装


$ perl -v #查看perl版本信息

This is perl 5, version 14, subversion 2 (v5.14.2) built for x86_64-linux-gnu-thread-multi
(with 80 registered patches, see perl -V for more detail)

Copyright 1987-2011, Larry Wall

Perl may be copied only under the terms of either the Artistic License or the
GNU General Public License, which may be found in the Perl 5 source kit.

Complete documentation for Perl, including FAQ lists, should be found on
this system using "man perl" or "perldoc perl". If you have access to the
Internet, point your browser at http://www.perl.org/, the Perl Home Page.


$ gcc -v    #查看gcc版本信息
Using built-in specs.
COLLECT_GCC=gcc
COLLECT_LTO_WRAPPER=/usr/lib/gcc/x86_64-linux-gnu/4.8/lto-wrapper
Target: x86_64-linux-gnu
Configured with: ../src/configure -v --with-pkgversion=‘Ubuntu/Linaro 4.8.1-10ubuntu9‘ --with-bugurl=file:///usr/share/doc/gcc-4.8/README.Bugs --enable-languages=c,c++,java,go,d,fortran,objc,obj-c++ --prefix=/usr --program-suffix=-4.8 --enable-shared --enable-linker-build-id --libexecdir=/usr/lib --without-included-gettext --enable-threads=posix --with-gxx-include-dir=/usr/include/c++/4.8 --libdir=/usr/lib --enable-nls --with-sysroot=/ --enable-clocale=gnu --enable-libstdcxx-debug --enable-libstdcxx-time=yes --enable-gnu-unique-object --enable-plugin --with-system-zlib --disable-browser-plugin --enable-java-awt=gtk --enable-gtk-cairo --with-java-home=/usr/lib/jvm/java-1.5.0-gcj-4.8-amd64/jre --enable-java-home --with-jvm-root-dir=/usr/lib/jvm/java-1.5.0-gcj-4.8-amd64 --with-jvm-jar-dir=/usr/lib/jvm-exports/java-1.5.0-gcj-4.8-amd64 --with-arch-directory=amd64 --with-ecj-jar=/usr/share/java/eclipse-ecj.jar --enable-objc-gc --enable-multiarch --disable-werror --with-arch-32=i686 --with-abi=m64 --with-multilib-list=m32,m64,mx32 --with-tune=generic --enable-checking=release --build=x86_64-linux-gnu --host=x86_64-linux-gnu --target=x86_64-linux-gnu
Thread model: posix
gcc version 4.8.1 (Ubuntu/Linaro 4.8.1-10ubuntu9)

2.1.2
linux下openSSL的安装

?





1

2

3

4

5

6

/桌面/openssl-1.0.1g
$ ls     #解压openssl-1.0.1g.tar.gz之后得到以下文件

ACKNOWLEDGMENTS  CHANGES.SSLeay  doc      include        INSTALL.NW   INSTALL.WCE   Makefile.org     NEWS          PROBLEMS       ssl    VMS

apps             config          engines  INSTALL        INSTALL.OS2  LICENSE       Makefile.shared  openssl.doxy  README         test

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

certs            crypto          e_os.h   INSTALL.DJGPP  INSTALL.W32  Makefile      ms               os2           README.ENGINE  tools

CHANGES          demos           FAQ      INSTALL.MacOS  INSTALL.W64  Makefile.bak  Netware          perl          shlib          util

?





1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

~/桌面/openssl-1.0.1g
$ ./config --prefix=/usr/local/openssl  #OpenSSL配置文件,配置安装目录

Operating system: x86_64-whatever-linux2

Configuring for
linux-x86_64

Configuring for
linux-x86_64

    no-ec_nistp_64_gcc_128 [default]  OPENSSL_NO_EC_NISTP_64_GCC_128 (skip dir)

    no-gmp          [default]  OPENSSL_NO_GMP (skip dir)

    no-jpake        [experimental] OPENSSL_NO_JPAKE (skip dir)

    no-krb5         [krb5-flavor not
specified] OPENSSL_NO_KRB5

    no-md2          [default]  OPENSSL_NO_MD2 (skip dir)

    no-rc5          [default]  OPENSSL_NO_RC5 (skip dir)

    no-rfc3779      [default]  OPENSSL_NO_RFC3779 (skip dir)

    no-sctp         [default]  OPENSSL_NO_SCTP (skip dir)

    no-shared       [default]

    no-store        [experimental] OPENSSL_NO_STORE (skip dir)

    no-zlib         [default]

    no-zlib-dynamic [default]

IsMK1MF=0

CC            =gcc

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

EX_LIBS       =-ldl

CPUID_OBJ     =x86_64cpuid.o

BN_ASM        =x86_64-gcc.o x86_64-mont.o x86_64-mont5.o x86_64-gf2m.o modexp512-x86_64.o

DES_ENC       =des_enc.o fcrypt_b.o

AES_ENC       =aes-x86_64.o vpaes-x86_64.o bsaes-x86_64.o aesni-x86_64.o aesni-sha1-x86_64.o

......<br><br>

~/桌面/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

  

?





1

2

3

4

~/桌面/openssl-1.0.1g
$ make

#输出一大堆信息,有可能提示没有gcc编译器(需安装),或者提示权限不足(用sudo命令)

 ~/桌面/openssl-1.0.1g
$ make install

#输出一大堆信息,有可能提示提示权限不足(用sudo命令)

 

验证是否成功安装OpenSSL。

?





1

2

3

4

5

6

7

8

/usr/local $ ldd /usr/local/openssl/bin/openssl     #添加环境变量

linux-vdso.so.1
=>  (0x00007fff0a3fe000)

libdl.so.2
=> /lib/x86_64-linux-gnu/libdl.so.2
(0x00007f620cdd6000)

libc.so.6
=> /lib/x86_64-linux-gnu/libc.so.6
(0x00007f620ca0e000)

/lib64/ld-linux-x86-64.so.2
(0x00007f620cff3000)

/usr/local $ openssl version    #查看OpenSSL版本信息,并验证是否安装成功

OpenSSL 1.0.1e
11 Feb 2013

  

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的加密及解密

?





1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

#生成密钥文件格式:openssl genrsa -out 密钥文件 密钥长度

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

Generating RSA private key, 1024
bit long
modulus

........................................++++++

..................++++++

e is
65537 (0x10001)

~/桌面 $ cat test.key

-----BEGIN RSA PRIVATE KEY-----

MIICXwIBAAKBgQDt86MIs2GWuHhyAlMd9fRnBJorp/Buii6YjoldzMaPF5KIf5ub

YKHhnGyYWPVo74mnWKRPDCL0o/pRhthdlHHY/Vdg2YG8KbK9wXwf4I+zihsc4vRy

NgmJNbF1jGI4srRt8oqtBDtrsYZykLYcqtWWxL9bqjXdJO9PtipOssK7DwIDAQAB

AoGBANPyquqKFUfSIn6ysWRDeyHzyHtQSGm9rYl3lMW3K7mzLnNk7q60oRy7X0NI

IbgJfRxRaXF7hvtPwBy0Nq8MFWaReEcnxcPJt61TKTwvFrKlGeZnrG71ksgazZel

690FrN67R1rUfPO1HCJA58InBGstktSVo+BXhXCfcoae7jIJAkEA+IAd6KZUU+71

KgdXMVUHCEUG+MQ4tISCuVV5Xq2in46tVWN5xeyneJirIpOrNk0rldS6MOKPoDav

Gg/bkgaf7QJBAPUiBY7BUG2FVs/nMbJg4qaTORVge84Sr2kK9A3wfvcul3bzgQ8u

xhubxQx6wuOwJ3+ZjDT1chq7AO+6hbc7D2sCQQC+H19CqUcpdFCUWEtojfI0bIN5

/r6Xti5B19hlDJm4U7Pf+ZyoRniW9s8wRCShBgfLuZa+Ygia/luXp/xIy9K9AkEA

wTGuFaNvwtFa6QH6He7T0pqnW5yuFmyNiIkUbcQEHMXApAQnzBJ+GhY7R6mc3Zvg

lWUrpjVnV3/Yrhdf+Vf3vwJBAMO796q9Ne9YJvqTQMo9AjmQgD3kw9txhJe0BlQV

YX/Ffwo2FxFDdCAwNKWyKt3zEyXOmnxxvdzQb0MY2WSV7CE=

-----END RSA PRIVATE KEY-----

#密钥文件生成公钥文件

#格式:openssl rsa -in 密钥文件 -pubout -out 公钥文件

~/桌面 $ openssl rsa -in
test.key -pubout -out TPub.key

writing RSA key

~/桌面 $ cat TPub.key

-----BEGIN PUBLIC KEY-----

MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDt86MIs2GWuHhyAlMd9fRnBJor

p/Buii6YjoldzMaPF5KIf5ubYKHhnGyYWPVo74mnWKRPDCL0o/pRhthdlHHY/Vdg

2YG8KbK9wXwf4I+zihsc4vRyNgmJNbF1jGI4srRt8oqtBDtrsYZykLYcqtWWxL9b

qjXdJO9PtipOssK7DwIDAQAB

-----END PUBLIC KEY-----

  

这里我们生成一个包含"this text will
encrypt"的文本文件TText.en作为待加密文件,并使用rsa加密算法对其进行加密,然后在对加密文件进行解密。


~/桌面 $ echo "this text will encrypt" > TText.en
#加密格式:openssl rsautl -encrypt -in 待加密文件 -inkey 公钥文件 -pubin -out 加密后文件
~/桌面 $ openssl rsautl -encrypt -in TText.en -inkey TPub.key -pubin -out TText.out
~/桌面 $ cat TText.out
????[}???Oa??
X YNw?D s??r??????rg?????j%??&% ??d?:?^}???????y~gW?{
#解密格式:openssl rsautl -decrypt -in 加密后文件 -inkey 私钥文件 -out 解密后文件
~/桌面 $ openssl rsautl -decrypt -in TText.out -inkey test.key -out TText.de
~/桌面 $ cat TText.de
this text will encrypt

这里需要注意的是用OpenSSL的rsa算法生成的秘钥文件就是本次解密使用的私钥,而我们的公钥是由该私钥文件分解出来的(openssl rsa -in
密钥文件 -pubout -out 公钥文件),即私钥内包含公钥。

时间: 2024-08-04 14:14:40

Chapter 2. OpenSSL的安装和配置学习笔记的相关文章

Redis简介、安装、配置学习笔记

前一篇文章有介绍关系型数据库和非关系型数据库的差异,现在就来学习一下用的较广的非关系型数据库:Redis数据库 Redis 简介 Redis 是完全开源免费的,遵守BSD协议,是一个高性能的key-value数据库. Redis 与其他 key - value 缓存产品有以下三个特点: Redis支持数据的持久化,可以将内存中的数据保存在磁盘中,重启的时候可以再次加载进行使用. Redis不仅仅支持简单的key-value类型的数据,同时还提供list,set,zset,hash等数据结构的存储

redis 安装配置学习笔记

redis 安装配置学习笔记 //wget http://download.redis.io/releases/redis-2.8.17.tar.gz 下载最新版本 wget http://download.redis.io/redis-stable.tar.gz 首先必须要有 gcc 与 make apt-get install gcc apt-get install make 1.解压 [email protected]:~# tar -xvf redis-stable.tar.gz 2.测

Vuejs入门-----安装+基本语法学习笔记

一.基本介绍 Vuejs是一套构建用户界面的渐进式框架. vue-cli脚手架 搭建基本代码框架vue-router 官方插件管理路由vue-resourse Ajax通信webpack 构建工具es6+eslint eslint:es6代码风格检查工具工程化 组件化 模块化 移动端常用开发技巧:flex弹性布局 css stickyfooter 炫酷的交互设计 2-vuejs介绍 架构从传统后台MVC向REST API+前端MV*迁移 MVVM :view(视图.dom) viewmodel(

HA heartbeat + drbd 配置学习笔记

heartbeat安装软件 heartbeat-3.0.4-2.el6.x86_64.rpmheartbeat-devel-3.0.4-2.el6.x86_64.rpmheartbeat-libs-3.0.4-2.el6.x86_64.rpmldirectord-3.9.5-3.1.x86_64.rpm /usr/share/doc/        ha.cf           Main configuration file        haresources     Resource co

HA corosync 配置学习笔记

两个主机 相同的配置安装  corosync.x86_64 pssh-2.3.1-2.1.x86_64.rpm  crmsh-1.2.6-0.rc2.2.1.x86_64.rpm /etc/corosync/corosync.conf    4 totem {  5         version: 2  6         secauth: off  7         threads: 0  8         interface {  9                 ringnumbe

HA iscsi+ricci 配置学习笔记

服务端: 安装 :iscsi-initiator-utils.x86_64配置 /etc/tgt/targets.conf 38 <target iqn.20016-09.com.example:server.target1> 39     backing-store /dev/vdb1           #新加磁盘 40     initiator-address 172.25.28.26    #客户端主机 41     initiator-address 172.25.28.27   

【DAY1】Linux的安装和基本命令学习笔记

vmware安装 ----------------- 优化win7(旗舰版) ------------------ 1.桌面个性化(使用windows经典) 桌面右键 -- >windows经典. 2.清理桌面图标 3.调整操作系统为性能最佳 计算机->属性->系统->高级系统设置-> 高级选项卡->设置(性能) ->选择调整为最佳性能->保留平滑屏幕字体边缘. 4.卸载不必要的软件 5.停止不需要的服务. cmd -> services.msc 6.

windows7安装和配置Mongodb笔记

做个简单笔记,记录安装配置Mongodb的过程 首先下载Mongodb,本事用的安装版,路径比较操蛋,于是复制粘贴到其它路径,最终路径如下(包括其它一些配置文件) C:\MongoDB |--bin |--mongo.conf |--startup.bat |--.....(others) |--db |--log |--mongodb.log 以上的文件夹及文件都是自己建的 其中,mongo.conf文件内容如下: 1 dbpath=C:\MongoDB\db 2 logpath=C:\Mon

webpack 配置学习笔记

最简单的 webpack 配置 const path = require('path') module.exports = { entry: './app/index.js', // 入口文件 output: { path: path.resolve(__dirname, 'build'), // 必须使用绝对地址,输出文件夹 filename: "bundle.js" // 打包后输出文件的文件名 } } webpack 命令配置 在 package.json 中添加代码 "