Chapter 2. OpenSSL的安装和配置学习笔记
Chapter 2. OpenSSL的安装和配置学习笔记
2.1 在linux上面安装OpenSSL
我还是做点No paper事情比较在行,正好和老师的课程接轨一下。
以前尝试过在Windows上面安装过openSSL,这次正好在Linux上面实现一下。
希望各位园友门纠错,征求意见中。
2.1.1 安装OpenSSL的系统环境和编译环境
测试环境:Linux MINT 16 Petra
$ 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 , version , subversion (v5.14.2) built for x86_64-linux-gnu-thread-multi
(with registered patches, see perl -V for more detail) Copyright -, 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 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. (Ubuntu/Linaro 4.8.-10ubuntu9)

2.1.2 linux下openSSL的安装
/桌面/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

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


~/桌面/openssl-1.0.1g $ make
#输出一大堆信息,有可能提示没有gcc编译器(需安装),或者提示权限不足(用sudo命令)
~/桌面/openssl-1.0.1g $ make install
#输出一大堆信息,有可能提示提示权限不足(用sudo命令)
验证是否成功安装OpenSSL。
/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的加密及解密
#生成密钥文件格式: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 YNwIJD 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 公钥文件),即私钥内包含公钥。
Chapter 2. OpenSSL的安装和配置学习笔记的更多相关文章
- Windows+Nginx+Tomcat整合的安装与配置学习笔记
以下全部是nginx在window7下运行的: nginx学习总结: 我的是放在F盘 1.启动:F:\nginx-1.10.2\nginx-1.10.2>start nginx.exe(找到相应 ...
- redis 安装配置学习笔记
redis 安装配置学习笔记 //wget http://download.redis.io/releases/redis-2.8.17.tar.gz 下载最新版本 wget http://downl ...
- robotframework安装与配置--学习第一天
刚刚入职公司,之前学的是Java+selenium自动化测试,但公司要求使用robot framework,所以找了些资料学习.刚开始觉得为什么不用java.python等开发语言+selenium做 ...
- 四、CentOS 安装mariadb——Linux学习笔记
A)安装及配置 下载mariadb: yum -y install mariadb-server mariadb 开启mariadb服务: systemctl start mariadb.servic ...
- Hive0.11安装配置学习笔记
转:http://springsfeng.iteye.com/blog/1734517 1 . 首先请安装好MySQL并修改root账户密码,使用root账户执行下面命令: su - root ...
- Maven 下载、安装、配置学习
一.Maven 下载与安装 电脑已安装:JDK.Eclipse 1.下载Maven:http://maven.apache.org/download.cgi 2.解压并安装:解压路径名不能有中文! 3 ...
- fastdfs集群安装过程_学习笔记
最终效果 初始化为6个节点 在/usr/local/software 目录下上传需要用到tar包,分别在各个节点上传 使用scp 将本地software目录复制到其他节点上 73.74为 tracke ...
- Python、pip和scrapy的安装——Python爬虫学习笔记1
Python作为爬虫语言非常受欢迎,近期项目需要,很是学习了一番Python,在此记录学习过程:首先因为是初学,而且当时要求很快速的出demo,所以首先想到的是框架,一番查找选用了Python界大名鼎 ...
- 阿里云数据库配置学习笔记(二):下载并配置MySQL数据库
参考资料:阿里云官方文档 2018-02-20 一.MySQL数据库的下载 在Ubuntu环境下安装MySQL数据库十分简单 在命令行中输入 sudo apt-get update(更新软件源,预防出 ...
随机推荐
- Mac内建Apache开机启动
取消: sudo launchctl unload -w /System/Library/LaunchDaemons/org.apache.httpd.plist 添加: sudo launchctl ...
- [置顶] 步步辨析JS中的对象成员
前提 首先我们应该明白创建一个JS对象的具体实例是实例化的过程,而实例化是通过new关键字实现的,这个对象是含有constructor的,一般的核心对象都会具有constructor以便创建其实例.因 ...
- Codeforces 544E Remembering Strings 状压dp
题目链接 题意: 给定n个长度均为m的字符串 以下n行给出字符串 以下n*m的矩阵表示把相应的字母改动成其它字母的花费. 问: 对于一个字符串,若它是easy to remembering 当 它存在 ...
- mybatis 与 ehcache 整合[转]
1.简介 MyBatis 是支持普通SQL 查询,存储过程和高级映射的优秀持久层框架.MyBatis 消除了几乎所有的JDBC 代码和参数的手工设置以及结果集的检索. Ehcache 是现在最流行的纯 ...
- pat 1062. Talent and Virtue (25)
难得的一次ac 题目意思直接,方法就是对virtue talent得分进行判断其归属类型,用0 1 2 3 4 表示 不合格 sage noblemen foolmen foolmen 再对序列进行排 ...
- java mysql驱动
mysql驱动方式有三种, 1.第一种是先把jar包放在项目的目录下,通过添加jar包,是使用相对地址的,这样把项目复制到其它电脑也可以用 2.第二种方法是导入外部的jar包,是绝对地址,如果项目要复 ...
- navicat导入mysql数据库sql时报错或数据不完全问题
错误详情:[Err] [Imp] 2006 - MySQL server has gone away 或无提示错误,但是导入数据明显缺少字段和数据 找到服务器上的MYSQL安装目录下的my.ini文件 ...
- WebView使用详解(一)——Native与JS相互调用(附JadX反编译)
念念不忘,必有回响,永远坚持你所坚持的! 一直在用WebView,还没有系统的总结过它的用法,下面就系统的总结下,分享给大家 一.基本用法 1.加载在线URL void loadUrl(String ...
- C#解leetcode 11. Container With Most Water
Given n non-negative integers a1, a2, ..., an, where each represents a point at coordinate (i, ai). ...
- 【开源java游戏框架libgdx专题】-04-接口介绍及生命周期
在核心项目中包含6大与操作系统交互的接口,每个后端都实现了这6大接口. Application:运行应用程序并通知API的客户端应用程序级别的事件,提供日志记录设施和查询方法,例如,内存使用. Fil ...