OpenSSL安装文档(官方翻译)

Windows平台的注意:



Windows目标可以归类为“本机”,即直接使用Windows API和依赖POSIX兼容层“托管”。  
“本机”归结于VC-*(其中“VC”源于缩写Microsoft Visual C编译器)和MinGW[64]。
“托管”平台是Cygwin和MSYS[2]。 甚至虽然后者([2])不是OpenSSL团队直接支持的,但它是Cygwin#1建立MinGW目标的热门选择。 简而言之,MinGW构建总是交叉编译。
在Linux和    Cygwin    上,它们看起来完全一样,并要求--cross-compile-prefix选项。 
在MSYS 2上,通过替换GCC编译器,它已经解决了在$PATH上生成“MinGW二进制”代码。
这通常是混乱的根源。  
“托管”应用程序“寄宿”于模拟文件系统命名空间,像POSIX-y root,在挂载点/dev甚至/proc。  
事实上,MSYS2 shell的造成了更大的混乱(或者更确切地说是模拟execve(2)调用)因为二进制文件即将运行时,它会进行检测,
如果发现*不*与MSYS2 POSIX-y链接,看起来像文件名的命令行参数会将模拟文件命名空间翻译为“本机”能识别的。 
例如:'/c/some/where'变为'c:\some\where','/dev/null'变为'nul'。
这造成了一种错觉MSYS2 shell和“MinGW二进制”之间没有区别,但是事实是有。
请记住,“MinGW二进制文件”“体验”Windows系统与VC生成的系统完全相同,但两者本质切无法区分。  (顺便说一句,这就是为什么它在引用中引用为“MinGW二进制”,因为它就只能活在“本机”,就和应为native这个单词一样。)

翻译完之后感觉作者好像对windows很多不满哦

备注:
MinGW是什么?
MinGW是是将GCC编译器和GNU Binutils移植到Win32平台下的产物,包括一系列头文件(Win32API)、库和可执行文件。GCC支持的语言大多在MinGW也受支持,其中涵盖C、C++、Objective-C、Fortran及Ada。对于C语言之外的语言,MinGW使用标准的GNU运行库,如C++使用GNU libstdc++。但是MinGW使用Windows中的C运行库。因此用MinGW开发的程序不需要额外的第三方DLL支持就可以直接在Windows下运行,而且也不一定必须遵从GPL许可证。这同时造成了MinGW开发的程序只能使用Win32API和跨平台的第三方库,而缺少POSIX支持[3],大多数GNU软件无法在不修改源代码的情况下用MinGW编译。具体细节可看官方网站。

MinGW 和 Cygwin 的关系?
MinGW是从Cygwin(1.3.3版)基础上发展而来。Cygwin是一个在windows平台上运行的类UNIX模拟环境。

MSYS是什么?
Minimal GNU(POSIX)system on Windows,是一个小型的GNU环境,包括基本的bash,make等等。与Cygwin大致相当。

Visual C++ 编译, a.k.a. VC-*


先决条件:


    除了INSTALL中列出的要求和说明外,
    这些也是必需的:

 -  Perl我们建议使用ActiveState Perl
    https://www.activestate.com/ActivePerl。
    另一种可行的选择是Strawberry Perl(士多俾梨 Perl),http://strawberryperl.com。
    您还需要CPAN上提供的perl模块Text::Template。
    有关更多信息,请阅读NOTES.PERL。

 -  Microsoft Visual C编译器。因为我们无法全部测试,所以有
    关于支持哪些版本的不可避免的不确定性。最新
    肯定支持版本以及之前的几个版本。上
    另一方面,最古老版本已经不能编译了。
    如果存在任何意外,那也属于尽力而为的范畴之外了。(作者这句英文实在难翻译)

 -  Netwide Assembler,a.k.a。NASM,可从https://www.nasm.us获得,
    是必须的。请注意,NASM是唯一受支持的汇编程序。甚至
    虽然微软提供的汇编程序不受支持,但通过持续集成VC-WIN64A-masm使得现代64位版本可以运行为目标。


安装指导:


    默认的安装目录来源于环境变量。
    对于VC-WIN32,使用以下默认值:
        PREFIX:%ProgramFiles(86)%\ OpenSSL
        OPENSSLDIR:%CommonProgramFiles(86)%\ SSL
    对于VC-WIN64,使用以下默认值:
        PREFIX:%ProgramW6432%\ OpenSSL
        OPENSSLDIR:%CommonProgramW6432%\ SSL
    这些环境变量是否应该存在(在纯Win32上)安装例子),使用这些后备:
        PREFIX:%ProgramFiles%\ OpenSSL
        OPENSSLDIR:%CommonProgramFiles%\ SSL

    另请注意,即使这些目录通常也是写保护的,
    尽管您的帐户位于Administrators组中,为了能良好的工作,
    您也要通过右键单击“以管理员运行“启动控制台运行'nmake install'之前。另一个解决方案
    当然,通过配置--prefix和--openssldir使用一组不同的目录。
    


mingw and mingw64



    * MSYS2 shell和开发环境安装:

     从https://msys2.github.io/下载MSYS2并按照安装说明进行操作。
    一旦启动并运行安装,有可能甚至make,perl,(git,如果需要),mingw-w64-i686-gcc和mingw-w64-x86_64-gcc等都需要安装。
    你应该在开始菜单上有相应的MinGW项目,使用*它们*,而不是通用的MSYS2。
    正如开篇中所暗示的那样,它们之间的差异是在$PATH环境变量上找到第一个编译器。
    此时./config应该识别正确的目标,它就好像在Unix正确运行了...

     *也可以在Linux或Cygwin上构建mingw [64]
     使用相应的--cross-compile-prefix =选项进行配置。 对于
     例

     ./Configure mingw --cross-compile-prefix = i686-w64-mingw32- ...

     要么

     ./Configure mingw64 --cross-compile-prefix = x86_64-w64-mingw32- ...

     这自然意味着您已经安装了相应的附加组件包。
     


链接您的应用程序


    本节适用于所有“本机”构建。

如果您链接到静态OpenSSL库,那么您应该将您的应用程序链接到WS2_32.LIB,GDI32.LIB,ADVAPI32.LIB,CRYPT32.LIB和USER32.LIB
那些正在开发非交互式服务应用程序可能会感到担心与GDI32.LIB和USER32.LIB链接,
因为它们与交互式桌面关联的使用,不属于开发范畴。
该工具包旨在检测它的运行环境,GUI,控制台应用程序或服务,并相应地采取行动,即是否实际进行GUI调用(意思是如果没有GUI调用则不会调用的,请放心吧)。
另外那些使用/DELAYLOAD:GDI32.DLL和/DAYAYLOAD:USER32.DLL延迟加载和
实际上,让他们关闭服务过程应该考虑实现并从.exe图像导出自己的_OPENSSL_isservice函数没有依赖于USER32.DLL。
例如,在Windows Vista及更高版本中,您可以:
__declspec(dllexport)__ cdecl BOOL _OPENSSL_isservice(void)
{
    DWORD sess;
    if(ProcessIdToSessionId(GetCurrentProcessId(),&sess))
        return sess == 0;
    return FALSE;
}

如果您与OpenSSL.DLLs链接,那么您应该包括你的应用程序代码小“shim”片段,
它提供之间的粘合剂OpenSSL BIO层和编译器运行时。请参阅OPENSSL_Applink手册页了解更多详情。

 

Cygwin,“托管”环境


Cygwin实现了一个Posix / Unix运行时系统(cygwin1.dll)Windows子系统并提供了一个bash shell和GNU工具环境。
因此,使用Cygwin的OpenSSL几乎与之相同Unix程序。

要使用Cygwin构建OpenSSL,您需要:

*安装Cygwin(参见https://cygwin.com/)

*安装Cygwin Perl并确保它在路径中。版本至少需要5.10.0

*运行Cygwin bash shell

除此之外,请按照INSTALL中的Unix说明进行操作。

注意:“make test”和正常文件可能操作失败,在目录中由于Cygwin而挂载为文本剥离回车(即,mount -t c:\somewhere /home)
。为了避免这种情况,请确保二进制使用mount,例如mount -b c:\somewhere /home。

    

第一章 基础知识.....................................................................................................................10 1.1 对称算法.....................................................................................................................10 1.2 摘要算法.....................................................................................................................10 1.3 公钥算法.....................................................................................................................11 1.4 回调函数.....................................................................................................................13 第二章 openssl 简介................................................................................................................15 2.1 openssl 简介................................................................................................................15 2.2 openssl 安装................................................................................................................15 2.2.1 linux 下的安装................................................................................................15 2.2.2 windows 编译安装.....................................................................................15 2.3 openssl 源代码............................................................................................................16 2.4 openssl 学习方法........................................................................................................18 第三章 堆栈.............................................................................................................................19 3.1 openssl 堆栈................................................................................................................19 3.2 数据结构.....................................................................................................................19 3.3 源码.............................................................................................................................19 3.4 定义用户自己的堆栈函数.........................................................................................20 3.5 编程示例.....................................................................................................................21 第四章 哈希表.........................................................................................................................23 4.1 哈希表.........................................................................................................................23 4.2 哈希表数据结构.........................................................................................................23 4.3 函数说明.....................................................................................................................24 4.4 编程示例.....................................................................................................................26 第五章 内存分配.....................................................................................................................29 5.1 openssl 内存分配........................................................................................................29 5.2 内存数据结构.............................................................................................................29 5.3 主要函数.....................................................................................................................30 5.4 编程示例.....................................................................................................................30 第六章 动态模块加载.............................................................................................................32 6.1 动态库加载.................................................................................................................32 6.2 DSO 概述....................................................................................................................32 6.3 数据结构.....................................................................................................................32 6.4 编程示例.....................................................................................................................33 第七章 抽象IO .......................................................................................................................36 7.1 openssl 抽象IO ..........................................................................................................36 7.2 数据结构.....................................................................................................................36 7.3 BIO 函数....................................................................................................................37 7.4 编程示例.....................................................................................................................38 7.4.1 mem bio...........................................................................................................38 7.4.2 file bio .............................................................................................................38 7.4.3 socket bio ........................................................................................................39 7.4.4 md BIO............................................................................................................41 7.4.5 cipher BIO.......................................................................................................41 7.4.6 ssl BIO.............................................................................................................42 5 7.4.7 其他示例.........................................................................................................44 第八章 配置文件.....................................................................................................................45 8.1 概述.............................................................................................................................45 8.2 openssl 配置文件读取................................................................................................45 8.3 主要函数.....................................................................................................................45 8.4 编程示例.....................................................................................................................46 第九章 随机数.........................................................................................................................48 9.1 随机数.........................................................................................................................48 9.2 openssl 随机数数据结构与源码................................................................................48 9.3 主要函数.....................................................................................................................49 9.4 编程示例.....................................................................................................................50 第十章 文本数据库.................................................................................................................52 10.1 概述.........................................................................................................................52 10.2 数据结构.................................................................................................................52 10.3 函数说明.................................................................................................................53 10.4 编程示例.................................................................................................................53 第十一章 大数.........................................................................................................................56 11.1 介绍.............................................................................................................................56 11.2 openssl 大数表示........................................................................................................56 11.3 大数函数.....................................................................................................................56 11.4 使用示例.....................................................................................................................59 第十二章 BASE64 编解码.....................................................................................................66 12.1 BASE64 编码介绍.....................................................................................................66 12.2 BASE64 编解码原理..................................................................................................66 12.3 主要函数.................................................................................................................67 12.4 编程示例.................................................................................................................67 第十三章 ASN1 库..................................................................................................................70 13.1 ASN1 简介..................................................................................................................70 13.2 DER 编码....................................................................................................................71 13.3 ASN1 基本类型示例..................................................................................................71 13.4 openssl 的ASN.1 库..................................................................................................74 13.5 用openssl 的ASN.1 库DER 编解码....................................................................75 13.6 Openssl 的ASN.1 宏..................................................................................................76 13.7 ASN1 常用函数..........................................................................................................77 13.8 属性证书编码...........................................................................................................90 第十四章 错误处理.................................................................................................................95 14.1 概述.........................................................................................................................95 14.2 数据结构.................................................................................................................95 14.3 主要函数.................................................................................................................97 14.4 编程示例.................................................................................................................99 第十五章 摘要与HMAC......................................................................................................102 15.1 概述.......................................................................................................................102 15.2 openssl 摘要实现......................................................................................................102 15.3 函数说明...............................................................................................................102 6 15.4 编程示例...............................................................................................................103 15.5 HMAC.......................................................................................................................104 第十六章 数据压缩...............................................................................................................106 16.1 简介.......................................................................................................................106 16.2 数据结构...............................................................................................................106 16.3 函数说明...............................................................................................................107 16.4 openssl 中压缩算法协商..........................................................................................107 16.5 编程示例...............................................................................................................108 第十七章 RSA.......................................................................................................................109 17.1 RSA 介绍...................................................................................................................109 17.2 openssl 的RSA 实现................................................................................................109 17.3 RSA 签名与验证过程..............................................................................................110 17.4 数据结构...............................................................................................................110 17.4.1 RSA_METHOD.................................................................................................110 17.4.2 RSA............................................................................................................... 111 17.5 主要函数...............................................................................................................112 17.6 编程示例.......................................................................................................................113 17.6.1 密钥生成............................................................................................................113 17.6.2 RSA 加解密运算..........................................................................................115 17.6.3 签名与验证........................................................................................................118 第十八章 DSA.......................................................................................................................121 18.1 DSA 简介..............................................................................................................121 18.2 openssl 的DSA 实现................................................................................................121 18.3 DSA 数据结构..........................................................................................................122 18.4 主要函数...............................................................................................................123 18.5 编程示例...............................................................................................................124 18.5.1 密钥生成............................................................................................................124 18.5.2 签名与验证........................................................................................................125 第十九章DH...............................................................................................................................128 19.1 DH 算法介绍............................................................................................................128 19.2 openssl 的DH 实现..................................................................................................128 19.3 数据结构.......................................................................................................................129 19.4 主要函数...............................................................................................................130 19.5 编程示例...............................................................................................................131 第二十章 椭圆曲线...............................................................................................................134 20.1 ECC 介绍..................................................................................................................134 20.2 openssl 的ECC 实现................................................................................................134 20.3 主要函数...............................................................................................................135 20.4 编程示例...............................................................................................................135 第二十一章 EVP...................................................................................................................139 21.1 EVP 简介......................................................................................................................139 21.2 数据结构......................................................................................................................139 21.2.1 EVP_PKEY...................................................................................................139 21.2.2 EVP_MD.......................................................................................................140 7 21.2.3 EVP_CIPHER...............................................................................................141 21.2.4 EVP_CIPHER_CTX.....................................................................................142 21.3 源码结构......................................................................................................................142 21.4 摘要函数......................................................................................................................143 21.5 对称加解密函数..........................................................................................................143 21.6 非对称函数..................................................................................................................144 21.7 BASE64 编解码函数................................................................................................145 21.8 其他函数.......................................................................................................................145 21.9 对称加密过程............................................................................................................147 21.10 编程示例...............................................................................................................148 第二十二章 PEM 格式.........................................................................................................155 22.1 PEM 概述.................................................................................................................155 22.2 openssl 的PEM 实现................................................................................................155 22.3 PEM 函数.................................................................................................................156 22.4 编程示例...............................................................................................................157 第二十三章 Engine ...............................................................................................................161 23.1 Engine 概述..............................................................................................................161 23.2 Engine 支持的原理..................................................................................................161 23.3 Engine 数据结构......................................................................................................161 23.4 openssl 的Engine 源码...........................................................................................162 23.5 Engine 函数..............................................................................................................163 23.6 实现Engine 示例.................................................................................................164 第二十四章 通用数据结构...................................................................................................178 24.1 通用数据结构...............................................................................................................178 24.2 X509_ALGOR..........................................................................................................178 24.3 X509_VAL................................................................................................................179 24.4 X509_SIG .................................................................................................................181 24.5 X509_NAME_ENTRY.............................................................................................182 24.6 X509_NAME............................................................................................................182 24.7 X509_EXTENSION .................................................................................................188 24.8 X509_ATTRIBUTE..................................................................................................194 24.9 GENERAL_NAME ..................................................................................................195 第二十五章 证书申请...........................................................................................................199 25.1 证书申请介绍.......................................................................................................199 25.2 数据结构...............................................................................................................199 25.3 主要函数...............................................................................................................200 25.4 编程示例...............................................................................................................202 25.4.1 生成证书请求文件............................................................................................202 25.4.2 解码证书请求文件.......................................................................................204 第二十六章 X509 数字证书.................................................................................................206 26.1 X509 数字证书.........................................................................................................206 26.2 opessl 实现................................................................................................................206 26.3 X509 数据结构.........................................................................................................206 26.4 X509_TRUST 与X509_CERT_AUX......................................................................209 8 26.5 X509_PURPOSE ......................................................................................................211 26.6 主要函数...............................................................................................................214 26.7 证书验证...............................................................................................................217 26.7.1 证书验证项........................................................................................................217 26.7.2 Openssl 中的证书验证.................................................................................217 第二十七章 OCSP.................................................................................................................218 27.1 概述.......................................................................................................................218 27.2 openssl 实现..............................................................................................................218 27.3 主要函数...............................................................................................................218 27.4 编程示例.......................................................................................................................223 第二十八章 CRL...................................................................................................................224 28.1 CRL 介绍..................................................................................................................224 28.2 数据结构...............................................................................................................224 28.3 CRL 函数..................................................................................................................225 28.4 编程示例...............................................................................................................226 第二十九章 PKCS7...............................................................................................................229 29.1 概述...............................................................................................................................229 29.2 数据结构...............................................................................................................229 29.3 函数.......................................................................................................................230 29.4 消息编解码.............................................................................................................230 29.4.1 data ..............................................................................................................231 29.4.2 signed data...................................................................................................231 29.4.3 enveloped ....................................................................................................232 29.4.4 signed_and_enveloped ................................................................................233 29.4.5 digest ...........................................................................................................234 29.4.6 encrypted.....................................................................................................234 29.4.7 读取PEM .....................................................................................................235 29.4.8 解码pkcs7 ....................................................................................................236 第三十章 PKCS12...............................................................................................................237 30.1 概述.......................................................................................................................237 30.2 openss 实现...............................................................................................................237 30.3 数据结构.......................................................................................................................237 30.4 函数...............................................................................................................................238 30.5 编程示例...............................................................................................................240 第三十一章 SSL 实现...........................................................................................................250 31.1 概述...............................................................................................................................250 31.2 openssl 实现..............................................................................................................250 31.3 建立SSL 测试环境..............................................................................................250 31.4 数据结构...............................................................................................................251 31.5 加密套件...............................................................................................................252 31.6 密钥信息...............................................................................................................253 31.7 SESSION ..................................................................................................................253 31.8 多线程支持...........................................................................................................254 31.9 编程示例...............................................................................................................254 9 31.10 函数.......................................................................................................................265 第三十二章 Openssl 命令.....................................................................................................268 32.1 概述...............................................................................................................................268 32.2 asn1parse...................................................................................................................268 32.3 dgst...........................................................................................................................270 32.4 gendh.........................................................................................................................271 32.5 passwd.......................................................................................................................271 32.6 rand ...........................................................................................................................272 32.7 genrsa ........................................................................................................................273 32.8 req .............................................................................................................................273 32.9 x509...........................................................................................................................276 32.10 version...................................................................................................................279 32.11 speed......................................................................................................................279 32.12 sess_id .................................................................................................................280 32.13 s_server ...............................................................................................................280 32.14 s_client ................................................................................................................282 32.15 rsa........................................................................................................................284 32.16 pkcs7 ...................................................................................................................285 32.17 dsaparam .............................................................................................................285 32.18 gendsa..................................................................................................................286 32.19 enc .......................................................................................................................287 32.20 ciphers .................................................................................................................288 32.21 CA.......................................................................................................................288 32.22 verify ...................................................................................................................292 32.23 rsatul....................................................................................................................293 32.24 crl ..........................................................................................................................294 32.25 crl2pkcs7 ...........................................................................................................295 32.26 errstr ..................................................................................................................296 32.27 ocsp .............................................................................................................................296 32.28 pkcs12 .................................................................................................................299 32.29 pkcs8 ...................................................................................................................301 32.30 s_time ..................................................................................................................302 32.31 dhparam 和dh.............................................................................................................303 32.32 ecparam.................................................................................................................305 32.33 ec .........................................................................................................................306 32.34 dsa .......................................................................................................................307 32.35 nseq .....................................................................................................................308 32.36 prime ...................................................................................................................308 32.37 smime ..................................................................................................................309
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值