barriers / 阅读 / 详情

如何删除osx /usr/bin/openssl 文件

2023-08-02 17:37:10
共1条回复
LuckySXyd

其实,并不需要删除掉系统自带的openssl,巧妙利用一下环境变量设置和homebrew的link功能即可解决好两个版本的openssl和谐共存了。

1、在终端确认环境变量$PATH设置中,/usr/local/bin在/usr/bin之前,如下就是符合前置条件要求的环境变量设置;

echo $PATH

/usr/local/bin:<blablabla>:/usr/bin:/bin

如果不是这样,可以根据终端默认shell来永久性重新设置$PATH的值,以确保满足条件1。查看当前用户的默认shell的方法

echo $SHELL

/bin/bash

以上命令输出结果说明当前用户使用的终端shell就是bash,然后就可以修改~/.bash_profile,配置PATH的新值,例如这样:

export PATH=/usr/local/bin:$PATH

如果用的是zsh,则需要类似修改~/.zshrc。

2、让homebrew自动链接安装的homebrew版openssl。

brew link openssl

如果提示创建软链接失败,则添加参数--force

brew link openssl --force

3、新打开一个终端,这时再输入openssl就会发现已经使用上最新版的openssl啦。

openssl version

OpenSSL 1.0.2d 9 Jul 2015

/usr/bin/openssl version

OpenSSL 0.9.8zg 14 July 2015

相关推荐

openssl命令详解

OpenSSL是一个安全套接字层密码库,其包括常用的密码算法、常用的密钥生成和证书封装管理功能及SSL协议,并提供了丰富的应用程序以供测试。 OpenSSL是一个开源的项目,其由三个部分组成: 1、openssl命令行工具; 2、libencrypt加密算法库; 3、libssl加密模块应用库; 这里主要学习下openssl命令工具的用法,openssl命令工具有两种运行模式: 交换模式 和 批处理模式 。直接输入openssl回车即可进入交互模式,而输入带命令选项的openssl命令则进行批处理模式。 利用OpenSSL作对称加密需要使用其子命令enc,其用法为: 其中常用的选项为: 使用案例 : OpenSSL单向加密的子命令为dgst,其语法如下: 其常用的选项为: 单向加密除了 openssl dgst 工具还有: md5sum,sha1sum,sha224sum,sha256sum ,sha384sum,sha512sum 使用案例 : 或 OpenSSL还支持生成密码的hash离散值,其子命令为passwd,语法如下: 常用选项为: 使用案例 : openssl命令也支持生成随机数,其子命令为rand,对应的语法为: 常用选项有: 使用案例 : 利用openssl命令的子命令genrsa生成私钥,然后再使用子命令rsa私钥中提取公钥。 genrsa的语法如下: 通常来说秘钥文件的权限一般只能由管理员访问,因此可以结合umask命令来设置生成的密钥文件的权限,如: 而随后可利用rsa子命令生成的私钥文件中提取公钥,rsa子命令的语法为: 常用选项为: -in FILENAME:指明私钥文件的存放路径; -out FILENAME:指明将公钥的保存路径; -pubout:根据提供的私钥,从中提取出公钥; 如: 在使用OpenSSL命令创建证书前,可查看配置文件/etc/pki/tls/openss.conf文件,查看该文件定义了的证书存放位置及名称。 1)创建自签证书 首先为CA提供所需的目录及文件,并指明证书的开始编号: 随后生成私钥,注意私钥的文件名及其存放的位置,需与配置文件中相匹配: 最后创建自签证书: 其中命令 openssl req -new -x509 -key /etc/pki/CA/private/cakey.pem -out /etc/pki/CA/cacert.pem -days 3650 用到子命令为req,其为证书请求及生成的工具,用到的选项解释为: 2)颁发证书 通常来说在CA签署颁发证书需要进行以下步骤: 上述命令用到了openssl命令的子命令CA,用于在CA服务器上签署或吊销证书。 上述查看证书使用了openssl命令的子命令x509,其选项解释为: 3)吊销证书 吊销证书的步骤通常为: -gencrl选项为根据/etc/pki/CA/index.txt文件中的信息生成crl文件。
2023-08-02 01:35:341

OpenSSL 入门:密码学基础知识

本文是使用 OpenSSL 的密码学基础知识的两篇文章中的第一篇,OpenSSL 是在 Linux 和其他系统上流行的生产级库和工具包。(要安装 OpenSSL 的最新版本,请参阅 这里 。)OpenSSL 实用程序可在命令行使用,程序也可以调用 OpenSSL 库中的函数。本文的示例程序使用的是 C 语言,即 OpenSSL 库的源语言。 本系列的两篇文章涵盖了加密哈希、数字签名、加密和解密以及数字证书。你可以从 我的网站 的 ZIP 文件中找到这些代码和命令行示例。 让我们首先回顾一下 OpenSSL 名称中的 SSL。 安全套接字层 (Secure Socket Layer)(SSL)是 Netscape 在 1995 年发布的一种加密协议。该协议层可以位于 HTTP 之上,从而为 HTTPS 提供了 S: 安全(secure)。SSL 协议提供了各种安全服务,其中包括两项在 HTTPS 中至关重要的服务: SSL 有多个版本(例如 SSLv2 和 SSLv3),并且在 1999 年出现了一个基于 SSLv3 的类似协议 传输层安全性(Transport Layer Security)(TLS)。TLSv1 和 SSLv3 相似,但不足以相互配合工作。不过,通常将 SSL/TLS 称为同一协议。例如,即使正在使用的是 TLS(而非 SSL),OpenSSL 函数也经常在名称中包含 SSL。此外,调用 OpenSSL 命令行实用程序以 openssl 开始。 除了 man 页面之外,OpenSSL 的文档是零零散散的,鉴于 OpenSSL 工具包很大,这些页面很难以查找使用。命令行和代码示例可以将主要主题集中起来。让我们从一个熟悉的示例开始(使用 HTTPS 访问网站),然后使用该示例来选出我们感兴趣的加密部分进行讲述。 此处显示的 client 程序通过 HTTPS 连接到 Google: 可以从命令行编译和执行该程序(请注意 -lssl 和 -lcrypto 中的小写字母 L): 该程序尝试打开与网站 www.google.com 的安全连接。在与 Google Web 服务器的 TLS 握手过程中,client 程序会收到一个或多个数字证书,该程序会尝试对其进行验证(但在我的系统上失败了)。尽管如此,client 程序仍继续通过安全通道获取 Google 主页。该程序取决于前面提到的安全工件,尽管在上述代码中只着重突出了数字证书。但其它工件仍在幕后发挥作用,稍后将对它们进行详细说明。 通常,打开 HTTP(非安全)通道的 C 或 C++ 的客户端程序将使用诸如文件描述符或网络套接字之类的结构,它们是两个进程(例如,这个 client 程序和 Google Web 服务器)之间连接的端点。另一方面,文件描述符是一个非负整数值,用于在程序中标识该程序打开的任何文件类的结构。这样的程序还将使用一种结构来指定有关 Web 服务器地址的详细信息。 这些相对较低级别的结构不会出现在客户端程序中,因为 OpenSSL 库会将套接字基础设施和地址规范等封装在更高层面的安全结构中。其结果是一个简单的 API。下面首先看一下 client 程序示例中的安全性详细信息。 在与 Web 服务器握手期间,client 程序会接收一个或多个数字证书,以认证服务器的身份。但是,client 程序不会发送自己的证书,这意味着这个身份验证是单向的。(Web 服务器通常配置为 不 需要客户端证书)尽管对 Web 服务器证书的验证失败,但 client 程序仍通过了连接到 Web 服务器的安全通道继续获取 Google 主页。 为什么验证 Google 证书的尝试会失败?典型的 OpenSSL 安装目录为 /etc/ssl/certs,其中包含 ca-certificates.crt 文件。该目录和文件包含着 OpenSSL 自带的数字证书,以此构成 信任库(truststore)。可以根据需要更新信任库,尤其是可以包括新信任的证书,并删除不再受信任的证书。 client 程序从 Google Web 服务器收到了三个证书,但是我的计算机上的 OpenSSL 信任库并不包含完全匹配的证书。如目前所写,client 程序不会通过例如验证 Google 证书上的数字签名(一个用来证明该证书的签名)来解决此问题。如果该签名是受信任的,则包含该签名的证书也应受信任。尽管如此,client 程序仍继续获取页面,然后打印出 Google 的主页。下一节将更详细地介绍这些。 让我们从客户端示例中可见的安全工件(数字证书)开始,然后考虑其他安全工件如何与之相关。数字证书的主要格式标准是 X509,生产级的证书由诸如 Verisign 的 证书颁发机构(Certificate Authority)(CA)颁发。 数字证书中包含各种信息(例如,激活日期和失效日期以及所有者的域名),也包括发行者的身份和数字签名(这是加密过的加密哈希值)。证书还具有未加密的哈希值,用作其标识指纹。 哈希值来自将任意数量的二进制位映射到固定长度的摘要。这些位代表什么(会计报告、小说或数字电影)无关紧要。例如, 消息摘要版本 5(Message Digest version 5)(MD5)哈希算法将任意长度的输入位映射到 128 位哈希值,而 SHA1( 安全哈希算法版本 1(Secure Hash Algorithm version 1))算法将输入位映射到 160 位哈希值。不同的输入位会导致不同的(实际上在统计学上是唯一的)哈希值。下一篇文章将会进行更详细的介绍,并着重介绍什么使哈希函数具有加密功能。 数字证书的类型有所不同(例如根证书、中间证书和最终实体证书),并形成了反映这些证书类型的层次结构。顾名思义,根证书位于层次结构的顶部,其下的证书继承了根证书所具有的信任。OpenSSL 库和大多数现代编程语言都具有 X509 数据类型以及处理此类证书的函数。来自 Google 的证书具有 X509 格式,client 程序会检查该证书是否为 X509_V_OK。 X509 证书基于 公共密钥基础结构(public-key infrastructure)(PKI),其中包括的算法(RSA 是占主导地位的算法)用于生成密钥对:公共密钥及其配对的私有密钥。公钥是一种身份: Amazon 的公钥对其进行标识,而我的公钥对我进行标识。私钥应由其所有者负责保密。 成对出现的密钥具有标准用途。可以使用公钥对消息进行加密,然后可以使用同一个密钥对中的私钥对消息进行解密。私钥也可以用于对文档或其他电子工件(例如程序或电子邮件)进行签名,然后可以使用该对密钥中的公钥来验证签名。以下两个示例补充了一些细节。 在第一个示例中,Alice 将她的公钥分发给全世界,包括 Bob。然后,Bob 用 Alice 的公钥加密邮件,然后将加密的邮件发送给 Alice。用 Alice 的公钥加密的邮件将可以用她的私钥解密(假设是她自己的私钥),如下所示: 理论上可以在没有 Alice 的私钥的情况下解密消息,但在实际情况中,如果使用像 RSA 这样的加密密钥对系统,则在计算上做不到。 现在,第二个示例,请对文档签名以证明其真实性。签名算法使用密钥对中的私钥来处理要签名的文档的加密哈希: 假设 Alice 以数字方式签署了发送给 Bob 的合同。然后,Bob 可以使用 Alice 密钥对中的公钥来验证签名: 假若没有 Alice 的私钥,就无法轻松伪造 Alice 的签名:因此,Alice 有必要保密她的私钥。 在 client 程序中,除了数字证书以外,这些安全性都没有明确展示。下一篇文章使用使用 OpenSSL 实用程序和库函数的示例填充更多详细的信息。 同时,让我们看一下 OpenSSL 命令行实用程序:特别是在 TLS 握手期间检查来自 Web 服务器的证书的实用程序。调用 OpenSSL 实用程序可以使用 openssl 命令,然后添加参数和标志的组合以指定所需的操作。 看看以下命令: 该输出是组成 加密算法套件(cipher suite)()的相关算法的列表。下面是列表的开头,加了澄清首字母缩写词的注释: 下一条命令使用参数 s_client 将打开到 www.google.com 的安全连接,并在屏幕上显示有关此连接的所有信息: 诸如 Google 之类的主要网站通常会发送多个证书进行身份验证。 输出以有关 TLS 会话的摘要信息结尾,包括加密算法套件的详细信息: client 程序中使用了协议 TLS 1.2,Session-ID 唯一地标识了 openssl 实用程序和 Google Web 服务器之间的连接。Cipher 条目可以按以下方式进行解析: 加密算法套件正在不断发展中。例如,不久前,Google 使用 RC4 流加密算法(RSA 的 Ron Rivest 后来开发的 Ron"s Cipher 版本 4)。 RC4 现在有已知的漏洞,这大概部分导致了 Google 转换为 AES128。 我们通过安全的 C Web 客户端和各种命令行示例对 OpenSSL 做了首次了解,使一些需要进一步阐明的主题脱颖而出。 下一篇文章会详细介绍 ,从加密散列开始,到对数字证书如何应对密钥分发挑战为结束的更全面讨论。 via: https://opensource.com/article/19/6/cryptography-basics-openssl-part-1 作者: Marty Kalin 选题: lujun9972 译者: wxy 校对: wxy
2023-08-02 01:35:411

openssl是什么软件

openssl是一个开放源代码的软件库包软件。应用程序可以使用这个软件库包来进行安全通信,避免窃听,同时确认另一端连接者的身份。这个软件库包广泛被应用在互联网的网页服务器上。作为一个基于密码学的安全开发包,openssl提供的功能相当强大和全面,囊括了主要的密码算法、常用的密钥和证书封装管理功能以及ssl协议,并提供了丰富的应用程序供测试或别的目的使用。openssl整个软件库包大概可以分成三个主要的功能部分,分别是ssl协议库、应用程序以及密码算法库。openssl的目录结构自然也是围绕这三个功能部分进行规划的。openssl特点:1、数据保密性。信息加密就是把明码的输入文件用加密算法转换成加密的文件以实现数据的保密。加密的过程需要用到密钥来加密数据然后再解密。没有了密钥,就无法解开加密的数据。数据加密之后,只有密钥要用一个安全的方法传送。加密过的数据可以公开地传送。2、数据完整性。加密也能保证数据的一致性。例如:消息验证码,能够校验用户提供的加密信息,接收者可以用MAC来校验加密数据,保证数据在传输过程中没有被篡改过。3、安全验证。加密的另外一个用途是用来作为个人的标识,用户的密钥可以作为他的安全验证的标识。ssl是利用公开密钥的加密技术来作为用户端与服务器端在传送机密资料时的加密通讯协定。
2023-08-02 01:35:491

Linux里面openssl作用是什么?

ssl 安全协议openssl 是开放式ssl协议的一个实现
2023-08-02 01:36:286

OpenSSL之配置文件用法

OpenSSL配置文件采用linux风格,其文件格式由分组字段名、属性名、属性值三部分组成。 如下面的例子: 其中,属性值还支持变量替换,如该例的属性: log = $path/log 其值最终会被替换为./module_a/log 本文假设你已经安装好了OpenSSL,并且持有一份1.1.1的源码。 配置文件相关的头文件为conf.h、源文件实现在crypto/conf目录中。 这个结构定义了单个配置项的数据结构。主要字段含义: section —— 表示一个配置段的名称。 name —— 表示在该配置段下的属性名称。 value —— 表示对应属性的值。 这个结构定义了配置抽象方法集合。主要字段含义: name —— 配置方法名称。 create —— 根据配置抽象方法,创建一个配置项结构,返回其指针。 init —— 初使化配置。 destroy —— 释放所有配置。 destroy_data —— 仅释放所有配置项数据,不释放配置本身。 load_bio —— 以BIO的方式加载配置。 dump —— 打印配置项到BIO中。 is_number —— 判断指定字符是否数字。 to_int —— 将字符转换为数字。 load —— 从文件(重新)加载所有配置。 这个结构定义了配置存储数据结构。主要字段含义: meth —— 抽象方法集合。 meth_data —— 附加的内存数据,暂时还没有明确用途。 data —— 配置项哈希表。 在1.1.1中,大多数的数据结构已经不再向使用者开放,从封装的角度来看,这是更合理的。如果你在头文件中找不到结构定义,不妨去源码中搜一搜。 CONF *NCONF_new(CONF_METHOD *meth); 指定一个抽象方法集合,创建配置存储结构。 成功返回有效指针,失败返回NULL。 如果meth传入NULL,表示使用默认的抽象方法。 void NCONF_free(CONF *conf); 释放配置存储。 int NCONF_load(CONF *conf, const char *file, long *eline); 从指定文件加载配置,eline表示出错时输出的行号。 成功返回1,失败返回0。 int NCONF_load_bio(CONF *conf, BIO *bp, long *eline); 从BIO加载配置,eline表示出错时输出的行号。 成功返回1,失败返回0。 int NCONF_load_fp(CONF *conf, FILE *fp, long *eline); NCONF_load_bio()的FILE版本。 char *NCONF_get_string(const CONF *conf, const char *group, const char *name); 从配置中,获取指定分组下的属性值。 成功返回C风格字符串,失败返回NULL。 若group传NULL,表示取全局属性。 int NCONF_get_number_e(const CONF *conf, const char *group, const char *name, long *result); 从配置中,获取指定分组下的数字属性值,数字值输出到result中。 成功返回1,失败返回0。 若group传NULL,表示取全局属性。 STACK_OF(CONF_VALUE) *NCONF_get_section(const CONF *conf, const char *section); 返回指定分组下的配置项堆栈集合。section不能为NULL。 成功返回有效堆栈指针,失败返回NULL。 下面这个例子演示了使用配置API进行基本的文件操作。 test.cnf文件内容: user = root [module_a] path = ./module_a log = $path/log filecount = 10 输出: global user:[root] module_a::path:[./module_a] module_a::log:[./module_a/log] ret:[1] module_a::filecount:[10] 下面这个例子演示了使用BIO读取配置文件,并且遍历指定的分组。 输出: section:[module_a] name:[path] value:[./module_a] section:[module_a] name:[log] value:[./module_a/log] section:[module_a] name:[filecount] value:[10]
2023-08-02 01:36:421

openssl——自签名根证书、签名客户端和服务器证书

openssl genrsa -out root.key 2048 也可以是pem文件,也可为了区分这是私钥而改用key后缀名,内容如下: 查看详细解析:包含两个大素数和两个指数和一个系数 openssl rsa -in root.key -text 可通过命令提取公钥: openssl rsa -pubout -in root.key openssl req -new -out root-req.csr -key root.key -keyform PEM -keyform PEM:证书有pem和der格式之分,前者文本,多用于java和windows服务器,后者二进制 CSR是Certificate Signing Request的英文缩写,即证书请求文件 openssl x509 -req -in root-req.csr -out root-cert.cer -signkey root.key -CAcreateserial -days 365 -CAcreateserial ,创建证书序列号,使用此选项,当CA序列号文件不存在时将被创建:它将包含序列号“02”,正在签名的证书将具有1作为其序列号。通常如果指定了-CA选项并且序列号文件不存在,则会出现错误。 -days 据说3650天有时候会意外导致证书验证失败,没遇到过 此处可有pem、crt、cer多种输出格式,其实内容都一样,来试一下: 每次生成的证书都不一样,但是未发现不同后缀名下的证书格式不同。 我的理解: pem是最基本的编码格式,der也相同。 CRT文件是由第三方证书颁发机构(例如VeriSign或DigiCert)提供和生成的安全文件,ASCII编码格式。 cer是crt的微软形式。 为了统一,全使用cer格式。 可选择将证书和私钥导入密钥库,通常用p12和jks( Java Key Store)格式: openssl pkcs12 -export -in root-cert.cer -inkey root.key -out root.p12 -name "lab" 需要加密保护, -name 设置别名 然后可选择使用keytool将p12转为jks格式,此处就不做转换了。 步骤基本相同 步骤基本相同 openssl genrsa -out server-key.key 2048 openssl req -new -out server-req.csr -key server-key.key -keyform PEM openssl x509 -req -in server-req.csr -out server-cert.cer -CA F:CERTmycert testopensslwin oot oot-cert.cer -CAkey F:CERTmycert estopensslwin oot oot.key -CAcreateserial -days 360 openssl pkcs12 -export -in server-cert.cer -inkey server-key.key -out server. p12 -name "lab-server" 运行环境要包含完整证书链。需要将证书链放到系统可信目录下。 为证书绑定ip,只能通过config文件, 文件如下【可将常用参数写入,生成请求文件时直接enter即可】: 使用配置文件时在生成请求文件和签发证书时的参数不同: 生成请求文件: openssl req -new -out server-req1.csr -key server-key.key -keyform PEM -extensions v3_req -config openssl. cnf 签发证书: openssl x509 -req -in server-req1.csr -out server-cert1.cer -CA F:CERTmycert estopensslwin oot oot- cert.cer -CAkey F:CERTmycert estopensslwin oot oot.key -CAcreateserial -days 360 -extensions v3_req -extfile openssl.cnf 默认证书链长度为2,使用中间ca签发时,中间ca的生成需要在配置文件中加修改长度参数: [ v3_ca ] basicConstraints = CA:true,pathlen:3 Note: 参考: OpenSSL主配置文件openssl.cnf 利用OpenSSL创建证书链并应用于IIS7 openssl系列文章: http://www.cnblogs.com/f-ck-need-u/p/7048359.html
2023-08-02 01:36:491

OpenSSL详解

OpenSSL初接触的人恐怕最难的在于先理解各种概念 公钥/私钥/签名/验证签名/加密/解密/非对称加密 我们一般的加密是用一个密码加密文件,然后解密也用同样的密码.这很好理解,这个是对称加密.而有些加密时,加密用的一个密码,而解密用另外一组密码,这个叫非对称加密,意思就是加密解密的密码不一样.初次接触的人恐怕无论如何都理解不了.其实这是数学上的一个素数积求因子的原理的应用,如果你一定要搞懂,百度有大把大把的资料可以看,其结果就是用这一组密钥中的一个来加密数据,可以用另一个解开.是的没错,公钥和私钥都可以用来加密数据,相反用另一个解开,公钥加密数据,然后私钥解密的情况被称为加密解密,私钥加密数据,公钥解密一般被称为签名和验证签名. 因为公钥加密的数据只有它相对应的私钥可以解开,所以你可以把公钥给人和人,让他加密他想要传送给你的数据,这个数据只有到了有私钥的你这里,才可以解开成有用的数据,其他人就是得到了,也看懂内容.同理,如果你用你的私钥对数据进行签名,那这个数据就只有配对的公钥可以解开,有这个私钥的只有你,所以如果配对的公钥解开了数据,就说明这数据是你发的,相反,则不是.这个被称为签名. 实际应用中,一般都是和对方交换公钥,然后你要发给对方的数据,用他的公钥加密,他得到后用他的私钥解密,他要发给你的数据,用你的公钥加密,你得到后用你的私钥解密,这样最大程度保证了安全性. RSA/DSA/SHA/MD5 非对称加密的算法有很多,比较著名的有RSA/DSA ,不同的是RSA可以用于加/解密,也可以用于签名验签,DSA则只能用于签名.至于SHA则是一种和md5相同的算法,它不是用于加密解密或者签名的,它被称为摘要算法.就是通过一种算法,依据数据内容生成一种固定长度的摘要,这串摘要值与原数据存在对应关系,就是原数据会生成这个摘要,但是,这个摘要是不能还原成原数据的,嗯....,正常情况下是这样的,这个算法起的作用就是,如果你把原数据修改一点点,那么生成的摘要都会不同,传输过程中把原数据给你再给你一个摘要,你把得到的原数据同样做一次摘要算法,与给你的摘要相比较就可以知道这个数据有没有在传输过程中被修改了. 实际应用过程中,因为需要加密的数据可能会很大,进行加密费时费力,所以一般都会把原数据先进行摘要,然后对这个摘要值进行加密,将原数据的明文和加密后的摘要值一起传给你.这样你解开加密后的摘要值,再和你得到的数据进行的摘要值对应一下就可以知道数据有没有被修改了,而且,因为私钥只有你有,只有你能解密摘要值,所以别人就算把原数据做了修改,然后生成一个假的摘要给你也是不行的,你这边用密钥也根本解不开. CA/PEM/DER/X509/PKCS 一般的公钥不会用明文传输给别人的,正常情况下都会生成一个文件,这个文件就是公钥文件,然后这个文件可以交给其他人用于加密,但是传输过程中如果有人恶意破坏,将你的公钥换成了他的公钥,然后得到公钥的一方加密数据,不是他就可以用他自己的密钥解密看到数据了吗,为了解决这个问题,需要一个公证方来做这个事,任何人都可以找它来确认公钥是谁发的.这就是CA,CA确认公钥的原理也很简单,它将它自己的公钥发布给所有人,然后一个想要发布自己公钥的人可以将自己的公钥和一些身份信息发给CA,CA用自己的密钥进行加密,这里也可以称为签名.然后这个包含了你的公钥和你的信息的文件就可以称为证书文件了.这样一来所有得到一些公钥文件的人,通过CA的公钥解密了文件,如果正常解密那么机密后里面的信息一定是真的,因为加密方只可能是CA,其他人没它的密钥啊.这样你解开公钥文件,看看里面的信息就知道这个是不是那个你需要用来加密的公钥了. 实际应用中,一般人都不会找CA去签名,因为那是收钱的,所以可以自己做一个自签名的证书文件,就是自己生成一对密钥,然后再用自己生成的另外一对密钥对这对密钥进行签名,这个只用于真正需要签名证书的人,普通的加密解密数据,直接用公钥和私钥来做就可以了. 密钥文件的格式用OpenSSL生成的就只有PEM和DER两种格式,PEM的是将密钥用base64编码表示出来的,直接打开你能看到一串的英文字母,DER格式是二进制的密钥文件,直接打开,你可以看到........你什么也看不懂!.X509是通用的证书文件格式定义.pkcs的一系列标准是指定的存放密钥的文件标准,你只要知道PEM DER X509 PKCS这几种格式是可以互相转化的. == End http://www.cnblogs.com/phpinfo/archive/2013/08/09/3246376.html == 为了方便理解,我画了一个图,如下: 使用 openssl 生成证书(含openssl详解) 一、openssl 简介 openssl 是目前最流行的 SSL 密码库工具,其提供了一个通用、健壮、功能完备的工具套件,用以支持SSL/TLS 协议的实现。 官网: https://www.openssl.org/source/ 构成部分 密码算法库 密钥和证书封装管理功能 SSL通信API接口 用途 建立 RSA、DH、DSA key 参数 建立 X.509 证书、证书签名请求(CSR)和CRLs(证书回收列表) 计算消息摘要 使用各种 Cipher加密/解密 SSL/TLS 客户端以及服务器的测试 处理S/MIME 或者加密邮件 二、RSA密钥操作 默认情况下,openssl 输出格式为 PKCS#1-PEM 生成RSA私钥(无加密) openssl genrsa -out rsa_private.key 2048 生成RSA公钥 openssl rsa -in rsa_private.key -pubout -out rsa_public.key 生成RSA私钥(使用aes256加密) openssl genrsa -aes256 -passout pass:111111 -out rsa_aes_private.key 2048 其中 passout 代替shell 进行密码输入,否则会提示输入密码; 生成加密后的内容如: -----BEGIN RSA PRIVATE KEY----- Proc-Type: 4,ENCRYPTED DEK-Info: AES-256-CBC,5584D000DDDD53DD5B12AE935F05A007 Base64 Encoded Data-----END RSA PRIVATE KEY----- 此时若生成公钥,需要提供密码 openssl rsa -in rsa_aes_private.key -passin pass:111111 -pubout -out rsa_public.key 其中 passout 代替shell 进行密码输入,否则会提示输入密码; 转换命令 私钥转非加密 openssl rsa -in rsa_aes_private.key -passin pass:111111 -out rsa_private.key 私钥转加密 openssl rsa -in rsa_private.key -aes256 -passout pass:111111 -out rsa_aes_private.key 私钥PEM转DER openssl rsa -in rsa_private.key -outform der-out rsa_aes_private.der -inform和-outform 参数制定输入输出格式,由der转pem格式同理 查看私钥明细 openssl rsa -in rsa_private.key -noout -text 使用-pubin参数可查看公钥明细 私钥PKCS#1转PKCS#8 openssl pkcs8 -topk8 -in rsa_private.key -passout pass:111111 -out pkcs8_private.key 其中-passout指定了密码,输出的pkcs8格式密钥为加密形式,pkcs8默认采用des3 加密算法,内容如下: -----BEGIN ENCRYPTED PRIVATE KEY----- Base64 Encoded Data -----END ENCRYPTED PRIVATE KEY----- 使用-nocrypt参数可以输出无加密的pkcs8密钥,如下: -----BEGIN PRIVATE KEY----- Base64 Encoded Data -----END PRIVATE KEY----- 三、生成CA自签名证书和RSA私钥(测试场景步骤) 测试场景步骤1:生成 RSA 私钥和自签名证书: openssl req -newkey rsa:2048 -nodes -keyout rsa_private.key -x509 -days 36500 -out cert.crt 注释: 操作步骤如下:提示填写过程中如果想删除填写的内容,用ctrl+Backspace删除前面的字符 [root@szxelab01-web-100 cert]# openssl req -newkey rsa:2048 -nodes -keyout rsa_private.key -x509 -days 36500 -out cert.crt Generating a 2048 bit RSA private key .............+++ ........................+++ writing new private key to "rsa_private.key" You are about to be asked to enter information that will be incorporated into your certificate request. What you are about to enter is what is called a Distinguished Name or a DN. There are quite a few fields but you can leave some blank For some fields there will be a default value, If you enter ".", the field will be left blank. Country Name (2 letter code) [XX]:CN State or Province Name (full name) []:GuangDong Locality Name (eg, city) [Default City]:ShenZhen Organization Name (eg, company) [Default Company Ltd]:SunFoBank Organizational Unit Name (eg, section) []:IT Dept Common Name (eg, your name or your server"s hostname) []:sunfobank.com Email Address [] :admin@sunfobank.com [root@szxjdwins01-web-27 cert]# ll total 8 -rw-r--r--. 1 root root 1452 Jun 22 14:29 cert.crt -rw-r--r--. 1 root root 1708 Jun 22 14:29 rsa_private.key openssl req -newkey rsa:2048 -nodes -keyout rsa_private.key -x509 -days 36500 -out cert.crt -subj "/C=CN/ST=GuangDong/L=ShenZhen/O=SunFoBank/OU=IT Dept/CN= sunfobank.com/emailAddress=admin@sunfobank.com " openssl req -new -x509 -days 36500 -key rsa_private.key -out cert.crt 四、生成服务器签名请求文件及CA 签名颁发服务器证书() server.key建议不要加密码,如果加密码,重启nginx的时候每次都需要密码才可以启动nginx影响效率。 nginx配置只需要server.key和server.crt两个文件。 openssl genrsa -aes256 -passout pass:111111 -out server.key 2048 openssl req -new -key server.key -out server.csr [root@szxjdwins01-web-27 cert]# openssl genrsa -aes256 -passout pass:111111 -out server.key 2048 Generating RSA private key, 2048 bit long modulus ............................+++ .......+++ e is 65537 (0x10001) [root@szxjdwins01-web-27 cert]# openssl genrsa -aes256 -out server.key 2048 Generating RSA private key, 2048 bit long modulus .............................................+++ ........................................................+++ e is 65537 (0x10001) Enter pass phrase for server.key: 111111手动输入密码 Verifying - Enter pass phrase for server.key: 111111手动输入密码 [root@szxelab01-web-27 cert]# openssl req -new -key server.key -out server.csr Enter pass phrase for server.key: You are about to be asked to enter information that will be incorporated into your certificate request. What you are about to enter is what is called a Distinguished Name or a DN. There are quite a few fields but you can leave some blank For some fields there will be a default value, If you enter ".", the field will be left blank. Country Name (2 letter code) [XX]:CN State or Province Name (full name) []:GuangDong Locality Name (eg, city) [Default City]:ShenZhen Organization Name (eg, company) [Default Company Ltd]:SunFoBank Organizational Unit Name (eg, section) []:IT Dept Common Name (eg, your name or your server"s hostname) []:sunfobank.com Email Address [] :admin@sunfobank.com Please enter the following "extra" attributes to be sent with your certificate request A challenge password []: 不输入密码 An optional company name []: 不输入密码 此后输入密码、server证书信息完成,也可以命令行指定各类参数 openssl req -new -key server.key -passin pass:111111 -out server.csr -subj "/C=CN/ST=GuangDong/L=ShenZhen/O=SunFoBank/OU=IT Dept/CN= sunfobank.com/emailAddress=admin@sunfobank.com " *** 此时生成的 csr签名请求文件可提交至 CA进行签发 *** cat server.csr -----BEGIN CERTIFICATE REQUEST----- Base64EncodedData -----END CERTIFICATE REQUEST----- openssl req -noout -text -in server.csr openssl x509 -req -days 365000 -in server.csr -CA cert.crt -CAkey rsa_private.key -passin pass:111111 -CAcreateserial -out server.crt [root@szxelab01-web-27 cert]# openssl x509 -req -days 365000 -in server.csr -CA cert.crt -CAkey rsa_private.key -passin pass:111111 -CAcreateserial -out server.crt Signature ok subject=/C=CN/ST=GuangDong/L=ShenZhen/O=SunFoBank/OU=IT Dept/CN= sunfobank.com/emailAddress=admin@sunfobank.com Getting CA Private Key 其中 CAxxx 选项用于指定CA 参数输入 [root@szxelab01-web-27 cert]# ll total 24 -rw-r--r--. 1 root root 1452 Jun 22 14:29 cert.crt -rw-r--r--. 1 root root 17 Jun 22 15:07 cert.srl -rw-r--r--. 1 root root 1708 Jun 22 14:29 rsa_private.key -rw-r--r--. 1 root root 1334 Jun 22 15:07 server.crt -rw-r--r--. 1 root root 1070 Jun 22 15:04 server.csr -rw-r--r--. 1 root root 1766 Jun 22 14:54 server.key 此时对nginx任何操作,都需要提示输入server.key的密码才可以执行。 [root@szxelab01-web-27 nginx]# /application/nginx/sbin/nginx -t Enter PEM pass phrase: 输入密码111111 nginx: the configuration file /application/nginx-1.12.2//conf/nginx.conf syntax is ok 为例不输入密码,需要把加密server.key转换成不加密的server.key [root@szxelab01-web-27 cert]# openssl rsa -in server.key -passin pass:111111 -out server.key writing RSA key 此时nginx操作就不提示输入密码了: [root@szxelab01-web-27 cert]# /application/nginx/sbin/nginx -t nginx: the configuration file /application/nginx-1.12.2//conf/nginx.conf syntax is ok nginx: configuration file /application/nginx-1.12.2//conf/nginx.conf test is successful 证书位置: [root@szxelab01-web-27 cert]# pwd /application/nginx/cert [root@szxelab01-web-27 cert]# ll total 24 -rw-r--r--. 1 root root 1452 Jun 22 14:29 cert.crt -rw-r--r--. 1 root root 17 Jun 22 15:07 cert.srl -rw-r--r--. 1 root root 1708 Jun 22 14:29 rsa_private.key -rw-r--r--. 1 root root 1334 Jun 22 15:07 server.crt -rw-r--r--. 1 root root 1070 Jun 22 15:04 server.csr -rw-r--r--. 1 root root 1679 Jun 22 15:19 server.key 至此测试场景私有证书配置完成 五、证书查看及转换 查看证书细节 openssl x509 -in cert.crt -noout -text 转换证书编码格式 openssl x509 -in cert.cer -inform DER -outform PEM -out cert.pem 合成 pkcs#12 证书(含私钥) ** 将 pem 证书和私钥转 pkcs#12 证书 ** openssl pkcs12 -export -in server.crt -inkey server.key -passin pass:111111 -password pass:111111 -out server.p12 其中-export指导出pkcs#12 证书,-inkey 指定了私钥文件,-passin 为私钥(文件)密码(nodes为无加密),-password 指定 p12文件的密码(导入导出) ** 将 pem 证书和私钥/CA 证书 合成pkcs#12 证书** openssl pkcs12 -export -in server.crt -inkey server.key -passin pass:111111 -chain -CAfile ca.crt -password pass:111111 -out server-all.p12 其中-chain指示同时添加证书链,-CAfile 指定了CA证书,导出的p12文件将包含多个证书。(其他选项:-name可用于指定server证书别名;-caname用于指定ca证书别名) ** pcks#12 提取PEM文件(含私钥) ** openssl pkcs12 -in server.p12 -password pass:111111 -passout pass:111111 -out out/server.pem 其中-password 指定 p12文件的密码(导入导出),-passout指输出私钥的加密密码(nodes为无加密) 导出的文件为pem格式,同时包含证书和私钥(pkcs#8): Bag Attributes localKeyID: 97 DD 46 3D 1E 91 EF 01 3B 2E 4A 75 81 4F 11 A6 E7 1F 79 40 subject=/C=CN/ST=GD/L=SZ/O=vihoo/OU=dev/CN= vihoo.com/emailAddress=yy@vihoo.com issuer=/C=CN/ST=GD/L=SZ/O=viroot/OU=dev/CN= viroot.com/emailAddress=yy@viroot.com-----BEGIN CERTIFICATE-----MIIDazCCAlMCCQCIOlA9/dcfEjANBgkqhkiG9w0BAQUFADB5MQswCQYDVQQGEwJD 1LpQCA+2B6dn4scZwaCD-----END CERTIFICATE-----Bag Attributes localKeyID: 97 DD 46 3D 1E 91 EF 01 3B 2E 4A 75 81 4F 11 A6 E7 1F 79 40 Key Attributes: <No Attributes> -----BEGIN ENCRYPTED PRIVATE KEY-----MIIEvAIBADANBgkqhkiG9w0BAQEFAASCBKYwggSiAgEAAoIBAQDC/6rAc1YaPRNf K9ZLHbyBTKVaxehjxzJHHw== -----END ENCRYPTED PRIVATE KEY----- 仅提取私钥 openssl pkcs12 -in server.p12 -password pass:111111 -passout pass:111111 -nocerts -out out/key.pem 仅提取证书(所有证书) openssl pkcs12 -in server.p12 -password pass:111111 -nokeys -out out/key.pem 仅提取ca证书 openssl pkcs12 -in server-all.p12 -password pass:111111 -nokeys -cacerts -out out/cacert.pem 仅提取server证书 openssl pkcs12 -in server-all.p12 -password pass:111111 -nokeys -clcerts -out out/cert.pem 六、openssl 命令参考
2023-08-02 01:36:571

openssl插件有什么用

OpenSSL的作用:是一个强大的安全套接字层密码库,囊括主要的密码算法、常用的密钥和证书封装管理功能及SSL协议,并提供丰富的应用程序供测试或其它目的使用。 SSL是SecureSocketsLayer(安全套接层协议)的缩写,可以在Internet上提供秘密性传输。网景Netscape公司在推出第一个Web浏览器的同时,提出了SSL协议标准。其目标是保证两个应用间通信的保密性和可靠性,可在服务器端和用户端同时实现支持。已经成为Internet上保密通讯的工业标准。
2023-08-02 01:37:051

OpenSSL之内存用法

用户在使用内存时,容易犯的错误就是内存泄露。当用户调用内存分配和释放函数时,查找内存泄露比较麻烦。OpenSSL提供了内置的内存分配/释放函数。如果用户完全调用OpenSSL的内存分配和释放函数,可以方便的找到内存泄露点。OpenSSL分配内存时,在其内部维护一个内存分配哈希表,用于存放已经分配但未释放的内存信息。当用户申请内存分配时,在哈希表中添加此项信息,内存释放时删除该信息。当用户通过OpenSSL函数查找内存泄露点时,只需查询该哈希表即可。用户通过OpenSSL回调函数还能处理那些泄露的内存。 本文假设你已经安装好了OpenSSL,并且持有一份1.1.1的源码。 内存相关的头文件为crypto.h、源文件在crypto目录中,文件名模式为mem*.c。 这个结构定义了内存块的分配信息。主要字段含义: addr —— 分配的内存地址。 num —— 分配的内存大小。 file —— 分配内存的文件名。 file —— 分配内存的行号。 threadid —— 分配内存的线程ID。 在1.1.1中,大多数的数据结构已经不再向使用者开放,从封装的角度来看,这是更合理的。如果你在头文件中找不到结构定义,不妨去源码中搜一搜。 int CRYPTO_set_mem_functions( void ( m) (size_t, const char *, int), void ( r) (void *, size_t, const char , int), void ( f) (void *, const char , int)); 成功返回1,失败返回0。 void CRYPTO_get_mem_functions( void ( m) (size_t, const char , int), void ( r) (void , size_t, const char , int), void ( f) (void *, const char *, int)); 这两个函数用于设置和读取与内存分配和释放相关的三个函数,这三个函数默认分别为: static void ( malloc_impl)(size_t, const char *, int) = CRYPTO_malloc; static void ( realloc_impl)(void *, size_t, const char , int) = CRYPTO_realloc; static void ( free_impl)(void *, const char *, int) = CRYPTO_free; 这两个函数只允许在内存分配前即初使化时调用。 int CRYPTO_set_mem_debug(int flag); 设置是否开启内存调试。取值1或0,1表示打开。 成功返回1,失败返回0。 只允许在内存分配前即初使化时调用。 void *CRYPTO_malloc(size_t num, const char *file, int line); void *CRYPTO_zalloc(size_t num, const char *file, int line); void *CRYPTO_realloc(void *addr, size_t num, const char *file, int line); CRYPTO_free(void *ptr, const char *file, int line); 这几个函数用于分配和释放内存。 是否记录内存与CRYPTO_set_mem_debug()的开关有关。 int CRYPTO_mem_ctrl(int mode); 这个函数用于设置是否开启内存记录模式,参数取值为: # define CRYPTO_MEM_CHECK_OFF 0x0 # define CRYPTO_MEM_CHECK_ON 0x1 返回旧模式。 注:我没有在头文件中看到像老版函数CRYPTO_is_mem_check_on()一样可以查询当前开关状态的用法,但是通过查看源码,发现可以对CRYPTO_mem_ctrl()传递一个不存在的类型(比如-1)使其返回当前状态。 int CRYPTO_mem_leaks_cb(int (*cb) (const char *str, size_t len, void *u), void *u); 遍历记录的内存,用于打印内存泄露信息。 返回是否有内存汇露。分别取值1和0。 int CRYPTO_mem_leaks(BIO *bio); 打印内存泄露信息,输出到BIO中。 返回是否有内存汇露。分别取值1和0。 int CRYPTO_mem_leaks_fp(FILE *); CRYPTO_mem_leaks()的FILE版本。 由于OpenSSL内部涉及地数据结构众多,如果采用原始的内存操作函数,因为涉及到文件名和行号会比较麻烦。因此,OpenSSL定义了一组宏进行包装,方便使用者进行调用。定义如下: 下面这个例子演示了使用OpenSSl内存分配API进行操作。同时还用到了placement new()的用法,演示如何在openssl的内存分配串上创建c++对象。 如果在编译过程中出现下面这个错误: testmem.cpp:40:42: 错误:‘CRYPTO_mem_leaks_cb"在此作用域中尚未声明 CRYPTO_mem_leaks_cb(memleak_cb, "aaa"); 解决办法是开启debug调试编译,命令如下: ./config --prefix=/usr/local/openssl enable-crypto-mdebug enable-crypto-mdebug-backtrace 输出: old switch:0 @SNode::SNode name:[abc] age:[18] @SNode::~SNode name:[abc] age:[0] leak info:[[02:21:40] 1 file=testmem.cpp, line=46, thread=140607514695488, number=36, address=0x204f090 ] ##> ./testmem() [0x4044e3] ##> ./testmem(CRYPTO_malloc+0xa3) [0x4035e3] ##> ./testmem() [0x40329c] ##> /lib64/libc.so.6(__libc_start_main+0xf5) [0x7fe1bbb77555] ##> ./testmem() [0x4030f3] leak info:[36 bytes leaked in 1 chunks ]
2023-08-02 01:37:121

linux-openssl命令行

title: linux-openssl date: 2020-09-16 11:02:15 categories: {% note info %} OpenSSL是一个健壮的、商业级的、功能齐全的开源工具包,用于传输层安全(TLS)协议,以前称为安全套接字层(Secure Sockets Layer, SSL)协议。协议实现基于全强度通用密码库,也可以单独使用。 openssl是一个功能丰富且自包含的开源安全工具箱。它提供的主要功能有:SSL协议实现(包括SSLv2、SSLv3和TLSv1)、大量软算法(对称/非对称/摘要)、大数运算、非对称算法密钥生成、ASN.1编解码库、证书请求(PKCS10)编解码、数字证书编解码、CRL编解码、OCSP协议、数字证书验证、PKCS7标准实现和PKCS12个人数字证书格式实现等功能。 <span style="color:red;">项目地址</span> <span style="color:red;">官方网址</span> <span style="color:red;">手册</span> {% endnote %} {% tabs configtab, 1 %} 对称算法使用一个密钥。给定一个明文和一个密钥,加密产生密文,其长度和明文大致相同。解密时,使用读密钥与加密密钥相同。 ECBCBCCFBOFB 摘要算法是一种能产生特殊输出格式的算法,这种算法的特点是:无论用户输入什么长度的原始数据,经过计算后输出的密文都是固定长度的,这种算法的原理是根据一定的运算规则对原数据进行某种形式的提取,这种提取就是摘要,被摘要的数据内容与原数据有密切联系,只要原数据稍有改变,输出的“摘要”便完全不同,因此,基于这种原理的算法便能对数据完整性提供较为健全的保障。但是,由于输出的密文是提取原数据经过处理的定长值,所以它已经不能还原为原数据,即消息摘要算法是不可逆的,理论上无法通过反向运算取得原数据内容,因此它通常只能被用来做数据完整性验证。 如今常用的“消息摘要”算法经历了多年验证发展而保留下来的算法已经不多,这其中包括MD2、MD4、MD5、SHA、SHA-1/256/383/512等。 常用的摘要算法主要有MD5和SHA1。MD5的输出结果为16字节,sha1的输出结果为20字节。 在公钥密码系统中,加密和解密使用的是不同的密钥,这两个密钥之间存在着相互依存关系:即用其中任一个密钥加密的信息只能用另一个密钥进行解密。这使得通信双方无需事先交换密钥就可进行保密通信。其中加密密钥和算法是对外公开的,人人都可以通过这个密钥加密文件然后发给收信者,这个加密密钥又称为公钥;而收信者收到加密文件后,它可以使用他的解密密钥解密,这个密钥是由他自己私人掌管的,并不需要分发,因此又成称为私钥,这就解决了密钥分发的问题。 主要的公钥算法有:RSA、DSA、DH和ECC。 Openssl中大量用到了回调函数。回调函数一般定义在数据结构中,是一个函数指针。通过回调函数,客户可以自行编写函数,让openssl函数来调用它,即用户调用openssl提供的函数,openssl函数再回调用户提供的函数。这样方便了用户对openssl函数操作的控制。在openssl实现函数中,它一般会实现一个默认的函数来进行处理,如果用户不设置回调函数,则采用它默认的函数。 {% endtabs %}
2023-08-02 01:37:311

openssl不是内部或外部命令,也不是可运行的程序和批处理文件.该怎么解决?

编译了吗?
2023-08-02 01:37:495

MacOS下使用OpenSSL(LibreSSL)

OpenSSL 是一个安全套接字层密码库,囊括主要的密码算法、常用的密钥和证书封装管理功能及SSL协议,并提供丰富的应用程序供测试或其它目的使用。 自OpenSSL爆出“心脏失血”漏洞后,苹果已将原有的 OpenSSL 替换为 LibreSSL。 将长度不固定的消息(Message)作为输入参数,运行特定的Hash函数,生成固定长度的输出,这个输出就是Hash,也称为这个消息的消息摘要(Message Digest) 常用的单向哈希算法有: md5, sha1, sha256, sha512等。 MD5算法为128位,SHA-1为160位,SHA-256为256位。 加密的消息摘要HMAC(Keyed Hash Message Authentication Code) 上面提到的常规Hash算法,如MD5、SHA,只有一个输入参数:消息。 如果输入参数有两个,一个是消息(Message),另一个是秘钥(Key),将会生成一个加密的消息摘要HMAC。 为了增强HMAC的安全性,只要升级加密Hash算法就可以指数级地增加破解难度。例如HMAC-MD6, HMAC-SHA-3。 曾经有一次面试,面试官问到密码学、哈希函数、避免碰撞相关的问题。 由于哈希函数是将所有不定长的消息转换成定长的消息,所以消息容量一定变小了,也有有发生碰撞的可能。这时可以通过多个哈希函数交叉验证来进一步降低发生的可能性。 常用参数: -aes-128-cbc, -aes-128-cfb, -bf-cbc等。 其中密码算法:bf, cast, des, aes, rs2等。 加密模式:cbc, ecb, cfb, ofb等。 加密算法(cipher),加密模式(encryption mode),填充(padding),初始向量(IV) 上面提到的给消息加解密除了需要加密算法aes/des等之外,还需要加密模式ecb/cbc等。 对称加密通常有四种模式(ECB、CBC、CFB、OFB)
2023-08-02 01:39:141

如何安装openssl 生成证书

(1)Openssl生成公私钥使用Openssl是为了生成公钥和私钥对,用于外部商户系统和xxx系统之间报文的安全性验证。如果使用者不需要生成公私钥,而是直接对报文进行处理,则参考第四部分,计算摘要及签名值。1. 安装openssl步骤直接点击exe文件。出现需要安装vs2008插件的,直接忽略。 2. 在安装过程中找到OpenSSL相应的安装目录,进入bin目录下找到openssl.exe可执行文件,点击运行。然后分别按顺序输入如下命令:a. genrsa –out private-rsa.key 1024说明:该命令是生成一个没有加密的私钥 genrsa 生成私钥文件,私钥存储在private-rsa.key中,长度为1024。out后面指定输出文件名。 private-rsa.key 为生成的私钥文件,但该文件必须经过处理得到私钥。b. req –new –x509 –key private-rsa.key –days 750 –outpublic-rsa.cer说明:根据private-rsa.key生成证书public-rsa.cer -new 表示新的请求 -509 表示输出的证书结构 750表示证书有效天数 -out public-rsa.cer -out后面表示公钥证书,用于验证数字签名,此公钥证书或者公钥需要提前发送给需要验证本单位或部门数据的接收方。c. pkcs12 –export –name test-alias –in public-rsa.cer–inkey private-rsa.key –out 99bill-rsa.pfx说明:生成PKCS12 格式Keystore 密码前后输入要一致,这个密码在用Keystore生成公私钥过程中会用到。 Public-rsa.cer, private-rsa.key是之前生成的。附1:下述代码是从99bill-rsa.pfx中获取私钥的Java版本代码。因为private-rsa.key中生成的私钥无法直接使用,必须进行一定的处理。代码有几个注意点:文件流初始化路径需要根据自己的实际路径来填写。密码是在第二节中c步骤中的密码,本实例输入的是suning。KeyStorekeyStore = KeyStore.getInstance("PKCS12");FileInputStreamfileInputStream = newFileInputStream("D:/OpenSSL/bin/99bill-rsa.pfx");char[]nPassword = "suning".toCharArray();StringkeyAlias = null;keyStore.load(fileInputStream,nPassword);fileInputStream.close();System.out.println("keystoretype=" + keyStore.getType());Enumeration<String>enumeration = keyStore.aliases();if(enumeration.hasMoreElements()){keyAlias = (String) enumeration.nextElement();System.out.println("alias=[" + keyAlias +"]");}System.out.println("iskey entry=" + keyStore.isKeyEntry(keyAlias));PrivateKeyprikey = (PrivateKey) keyStore.getKey(keyAlias, nPassword);//私钥转成字符串StringprivateStr = Base64.encodeBase64String(prikey.getEncoded()).trim();//生成公钥字符串,还可以通过cer证书生成Certificatecert = keyStore.getCertificate(keyAlias); PublicKeypubkey = cert.getPublicKey();StringpublicStr = Base64.encodeBase64String(pubKey.getEncoded()).trim();注意:1. 所用类的说明:Base64:import org.apache.commons.net.util.Base64;Certificate:import java.security.cert.Certificate;2. 在openssl生成公私钥过程中,用户输入了密码。本例中密码为suning。 1. 摘要及生成方法摘要的生成过程(digest方法全部实现了下述3个过程):1. 根据key对传来的map数据排序;2. 生成a1=b1&a2=b2&a3=b3形式的字符串,排除某些字符串Key值;3. 调用digest方法进行md5编码;以上三步均通过Digest.digest()方法实现:String digest = Digest.digest(Map<String,String> map, String... keys);传递的http报文体body内容如a1=b1&a2=b2&a3=b3形式的字符串,提取出需要加签的字符串并转成map形式。execludeKes是要排除的字段,是一个字符串数组。计算摘要这一步很关键,因为选取的字段要求发送方和接收方必须一致,即发送方对哪些字段计算摘要,那么同样地接收方也必须对相同的字段计算摘要,否则会报6601的错误。 说明:a. Map是存储了计算摘要的字段 b. keys表示排除的字段,不能用于计算摘要的字段,如signature,signAlgorithm2. 公钥证书及字符串转换方法转换的目的:便于存储。(商户直接提供公钥证书也可以,但是对于向验签系统提供公钥字符串的商户,需要用下述代码把公钥转成字符串)1. 公钥/私钥字符串转成公钥/私钥,主要是把字符串转成公钥PublicKeyX509EncodedKeySpec pubKeySpec = newX509EncodedKeySpec(Base64.decodeBase64(strPubKey)); KeyFactorykeyFactory = KeyFactory.getInstance(RSA); PublicKeypubKey = keyFactory.generatePublic(pubKeySpec);2. 公钥或私钥转成Base64字符串:StringpublicStr = Base64.encodeBase64String(pubKey.getEncoded()).trim();3. 公私钥验证方法验证目的:公私钥生成之后,需要验证是否匹配。(之前许多商户生成公私钥混乱,无法确定公私钥是否匹配就添加到验签系统中)。此代码由用户自己用junit验证运行。验证公私钥生成是否正确,如果result为true,则说明公私钥生成正确;否则生成的公私钥有问题,不能使用。String prik1 ="";String pubb ="";String data ="wkk";String digest =Digest.digest(data);PrivateKey privateKey =RSAUtil.getPrivateKey(prik1);String sign =RSAUtil.sign(digest, privateKey);boolean result =RSAUtil.vertiy(digest, sign, RSAUtil.getPublicKey(pubb));System.out.println(result);
2023-08-02 01:39:211

OpenSSL的编译和使用

个人博客地址: https://blog.yookingh.cn 该文章地址: https://blog.yookingh.cn/dev/201215-openssl.html 从NDK r19开始,由于gcc兼容clang的编译方式有问题,该版本已经移除了相关gcc文件,所以用老方法交叉编译Openssl的时候,会提示找不到gcc文件。 参考: https://blog.csdn.net/zoujin6649 build-android-single.sh 脚本文件及注释如下 执行脚本 修改脚本为 循环编译 ,编译所有需要的文件 build-android-all.sh 脚本文件内容如下 执行脚本方法同上,如为第一次执行(即没有Makefile文件),仍需要执行 ./config 循环编译无需执行 make clean 参考: https://blog.csdn.net/iamadk Python 脚本内容 创建编译执行脚本 执行编译脚本同r15,第一次需要执行 ./config 生成Makefile,第二次或以上需要清除make记录即 make clean ,接下来依旧是创建 循环编译 脚本
2023-08-02 01:39:291

怎么看openssl版本

openssl支持ecdsa吗,服务器的openssl版本是0.9.8e,我包含头文件#include <openssl/ecdsa.hopenssl支持ecdsa吗,服务器的openssl版本是0.9.8e,我包含头文件#include <openssl/ecdsa.h>,编译器报错,没有这个文件。这个命令是安装还是设置啊?我看看怎么象设置呢?这个软件不要先安装的吗?直接就能用吗?是不是要先安装的啊如果是要先安装的话,那可能是缺少zlib的库文件吧我没有装个这个软件,不过我怎么看你的问题都象是没有安装软件啊答案补充:我看了这个网址了,估计是lz你没有安装全zlib的库文件,你可以试试先安装zlib的库文件我又发现一个问题,lz你用的是RH9.0吗?如果不是的话,那可能是会出错的,因为不同版本的linux安装环境也是不同的
2023-08-02 01:39:373

OpenSSL之ASN1用法

ASN.1 – Abstract Syntax Notation dot one,抽象记法1,在大部分的书写场合会简写为ASN1。它描述了一种对数据进行表示、编码、传输和解码的数据格式。它提供了一整套正规的格式用于描述对象的结构,而不管语言上如何执行及这些数据的具体指代,也不用去管到底是什么样的应用程序。 ASN1有很多实现版本,OpenSSL主要采用DER格式。 本文假设你已经安装好了OpenSSL,并且持有一份1.1.1的源码。 ASN1相关的头文件为asn1.h、asn1t.h、源文件在crypto/asn1目录中。 这个结构负责管理ANS1大多数数据类型的内存组织方式,字段含义: length —— 管理的数据长度。 type —— 管理的数据类型。 data —— 数据指针。 flags —— 标志位,跟具体数据类型有关。 管理的数据类型: 主要数据类型的取值: 其它一些类型的定义: 在OpenSSL的实现中,每个数据类型都有一个ITEM结构,它负责定义这个数据类型的编解码规则。 相关字段含义如下: itype —— 定义ITEM自身的类型,取值: utype —— 定义管理的数据类型,取值前面有说明,例如V_ASN1_INTEGER。 templates —— 数据处理方法模板数组指针。 tcount —— 模板数组的个数。 funcs —— 回调方法指针。 size —— 负责数据结构的大小。 sname —— 指向数据结构的名称。 前面讲到,对每个数据类型来说,OpenSSL需要一个对应的ITEM结构,下面这几个宏为每个数据类型声明ITEM结构,同时也声明了相应的助记函数。如下: 拿 DECLARE_ASN1_FUNCTIONS(ASN1_INTEGER) 来说,宏定义展开形式为: 还有几个宏负责为数据类型实现相应的助记函数。如下: 拿 IMPLEMENT_ASN1_ITEM(ASN1_INTEGER) 来说,其展开形式为: 可以看到,展开形式所实现的助记函数实际上是对ASN1内部几个函数的封装调用,对提供上层数据类型与内部类型的转换,其中ASN1_VALUE是类型上下转换的纽带,它是个万能指针: typedef struct ASN1_VALUE_st ASN1_VALUE; 在asn1.h中,对基本数据类型声明了助记函数: 可是我暂时还没有找到对基本数据类型助记函数的宏实现。 OpenSSL的ASN1编码处理依赖ASN1_ITEM对象,对基本类型来说,OpenSSL本身已经做了声明和初使化,所以可以直接以相关函数中使用。然而对于自定义结构体,需要开发者来定义ASN1_ITEM对象和规则,有一些宏可以提供帮助,摘录部分如下: 在ASN1_ITEM结构中,ASN1_TEMPLATE的结构定义如下: 主要字段含义: offset —— 字段在父结构中的偏移。 field_name —— 字段名称。 item —— 指向字段对应结构类型的ASN1_ITEM对象。 举例定义如下的自定义结构: 将宏展开,为: ASN1_VALUE *ASN1_item_new(const ASN1_ITEM *it); void ASN1_item_free(ASN1_VALUE *val, const ASN1_ITEM *it); 根据ITEM对象创建和释放对应的数据类型。 ASN1_VALUE *ASN1_item_d2i(ASN1_VALUE **val, const unsigned char **in, long len, const ASN1_ITEM *it); 根据ITEM对象将DER编码转换为二进制结构。 成功返回有效指针,成功返回NULL。 如果val为NULL,将内部分配内存,但必须由外部使用者释放。 其内部实现为: 可以看到内部做了为val传入NULL的兼容性处理。 int ASN1_item_i2d(ASN1_VALUE *val, unsigned char **out, const ASN1_ITEM *it); 根据ITEM对象将二进制结构转换为DER编码。 成功返回DER编码长度,失败返回负数。 如果*out为NULL,将内部分配内存,但内存必须由外部使用者释放。若**out为NULL,将仅返回长度,这用于试探长度的场景。 其内部实现为: 可以看到内部做了为out和*out传入NULL的兼容性处理。在out传入NULL的情况下,无法接收缓冲区,只能返回长度。 void *ASN1_item_d2i_bio(const ASN1_ITEM *it, BIO *in, void *x); 根据ITEM对象将DER编码转换为二进制结构,输入的DER编码来源于BIO对象。 成功返回有效指针,成功返回NULL。 事实上,本函数是对ASN1_item_d2i()的封装调用。 其内部实现为: void *ASN1_item_d2i_fp(const ASN1_ITEM *it, FILE *in, void *x); ASN1_item_d2i_bio()的FILE版本。 ASN1_item_d2i_bio()和ASN1_item_d2i_fp() 这两个函数关于输出参数x的类型定义是不恰当的,后面讲的 ASN1_d2i_bio()和ASN1_d2i_bio() 有修复这个问题。 int ASN1_item_i2d_bio(const ASN1_ITEM *it, BIO *out, void *x); 根据ITEM对象将二进制结构转换为DER编码,输出到BIO对象中。 成功返回DER编码长度,失败返回负数。 如果*out为NULL,将内部分配内存,但内存必须由外部使用者释放。事实上,本函数是对ASN1_item_i2d()的封装调用。 其内部实现为: int ASN1_item_i2d_fp(const ASN1_ITEM *it, FILE *out, void *x); ASN1_item_i2d_bio()的FILE版本。 其实上,以上函数由于直接需要ASN1_ITEM做为参数,很少在程序中直接使用,而是由DECLARE_ASN1_FUNCTIONS宏声明的变体,或者下面介绍的函数代替。 void *ASN1_d2i_bio(void *(*xnew) (void), d2i_of_void *d2i, BIO *in, void **x); 从BIO对象读取DER编码数据,转换为对应的二进制结构,具体的转换依赖d2i函数指针。 成功返回有效指针,失改返回NULL。 其内部实现为: void *ASN1_d2i_fp(void *(*xnew) (void), d2i_of_void *d2i, FILE *in, void **x); ASN1_d2i_bio()的FILE版本。 int ASN1_i2d_bio(i2d_of_void *i2d, BIO *out, unsigned char *x); 将二进制结构转换为DER编码,输出到BIO中,具体的转换依赖i2d函数指针。 成功返回1,失败返回0。 其内部实现为: int ASN1_i2d_fp(i2d_of_void *i2d, FILE *out, void *x); ASN1_i2d_bio() 的FILE版本。 上面d2i_of_void 和 i2d_of_void 函数的签名为: 通常为数据类型的转换助记函数。 int ASN1_INTEGER_set(ASN1_INTEGER *a, long v); 将v值设置到a中。成功返回1,失败返回0。 long ASN1_INTEGER_get(const ASN1_INTEGER *a); 获取a中存储的整数值。失败返回-1。 int ASN1_ENUMERATED_set(ASN1_ENUMERATED *a, long v); 将v值设置到a中。成功返回1,失败返回0。 long ASN1_ENUMERATED_get(const ASN1_ENUMERATED *a); 获取a中存储的枚举值。失败返回-1。 int ASN1_STRING_set(ASN1_STRING *str, const void *data, int len); 将data和len指向的串值设置到str中。成功返回1,失败返回0。 unsigned char *ASN1_STRING_data(ASN1_STRING *x); 获取x的字符串首指针。成功返回有效指针,失败返回NULL。 int ASN1_STRING_length(const ASN1_STRING *x); 获取x的字符串长度。 int i2a_ASN1_INTEGER(BIO *bp, const ASN1_INTEGER *a); 将ASN1_INTEGER转换为ASC码,输出到bp中。成功返回1,失败返回0。 int a2i_ASN1_INTEGER(BIO *bp, ASN1_INTEGER *bs, char *buf, int size); 将bp中的ASC码转换为ASN1_INTEGER,buf存放BIO的ASC码。成功返回1,失败返回0。 int i2a_ASN1_ENUMERATED(BIO *bp, const ASN1_ENUMERATED *a); 将ASN1_ENUMERATED转换为ASC码,输出到bp中。成功返回1,失败返回0。 int a2i_ASN1_ENUMERATED(BIO *bp, ASN1_ENUMERATED *bs, char *buf, int size); 将bp中的ASC码转换为ASN1_ENUMERATED,buf存放BIO的ASC码。成功返回1,失败返回0。 int i2a_ASN1_STRING(BIO *bp, const ASN1_STRING *a, int type); 将a中的字符串转换为ASC码输出到bp中,type不起作用。返回转换的ASC字符串长度。 int a2i_ASN1_STRING(BIO *bp, ASN1_STRING *bs, char *buf, int size); 将bp中的ASC码转换为ASN1_STRING,buf存放BIO的ASC码。成功返回1,失败返回0。 ASN1_OBJECT *ASN1_OBJECT_new(void); 分配OID对象。 void ASN1_OBJECT_free(ASN1_OBJECT *a); 释放OID对象。 OID的编码规为:第一个八位组采用公式:first_arc* 40+second_arc。如果一个数大于127,就采用多个8位表示,最高位用1表示后续还有octet,用0表示后续没有。成功返回OID编码的字节数。 int a2d_ASN1_OBJECT(unsigned char *out, int olen, const char *buf, int num); 计算由ASC字符串指定的OID的DER编码。返回编码的字节数。所果事先需要知道编码的长度来分配内存,可以设置out为NULL,olen为0,获取编码字节长度,根据该长度再去分配内存。 ASN1_OBJECT *d2i_ASN1_OBJECT(ASN1_OBJECT **a, const unsigned char **pp, long length); 将DER编码转换为OID对象。成功返回有效指针。 int i2d_ASN1_OBJECT(const ASN1_OBJECT *a, unsigned char **pp); 将OID对象换转为DER编码。返回DER编码的长度。 int i2a_ASN1_OBJECT(BIO *bp, const ASN1_OBJECT *a); 将DER编码转换为ASC字符串,结果输出到bp中。返回ASC字符串长度。 下面这个例子测试了很多函数的用法,请自行放开注释并测试。
2023-08-02 01:40:341

OpenSSL 是什么意思,做什么用的?

open的意思为开启 ssl是一种加密协议 ,在一起就是使用ssl加密协议,一般常见与邮箱设置
2023-08-02 01:40:564

使用openssl命令从.p12文件中提取证书和私钥。

" > openssl pkcs12 -in PATH_TO_YOUR_P12 -nocerts -out key.pem -nodes " "$> openssl rsa -in key.pem -out key.pem" .pem 是 base64 编码的,直接文本打开即可看到证书及密钥
2023-08-02 01:41:121

求助,windows 2003 服务器 如何安装openssl

您好!安装SSL证书主要将SSL证书配置到服务器环境。安装教程:网页链接目前全球服务器环境主要分为4个类型:Apache、IIS、Nginx、Tomcat
2023-08-02 01:41:202

如何使用openssl生成RSA公钥和私钥对 / 蓝讯

  在Linux环境下,可安装OPENSSL工具包(以ubuntu为例,执行sudo apt-get install openssl)。  在Windows环境下,打开OPENSSL安装目录bin文件下面的openssl.exe。在Linux环境下,直接在终端中运行openssl。  1)生成RSA私钥:  genrsa -out rsa_private_key.pem 1024  该命令会生成1024位的私钥,生成成功的界面如下:  如何使用openssl生成RSA公钥和私钥对  此时我们就可以在当前路径下看到rsa_private_key.pem文件了。  2)把RSA私钥转换成PKCS8格式  输入命令pkcs8 -topk8 -inform PEM -in rsa_private_key.pem -outform PEM –nocrypt,并回车  得到生成功的结果,这个结果就是PKCS8格式的私钥,如下图:  如何使用openssl生成RSA公钥和私钥对  3) 生成RSA公钥  输入命令rsa -in rsa_private_key.pem -pubout -out rsa_public_key.pem,并回车,  得到生成成功的结果,如下图:  如何使用openssl生成RSA公钥和私钥对  此时,我们可以看到一个文件名为rsa_public_key.pem的文件,打开它,可以看到-----BEGIN PUBLIC KEY-----开头,  -----END PUBLIC KEY-----结尾的没有换行的字符串,这个就是公钥。
2023-08-02 01:41:271

安装OpenSSL出错,求大神

使用VS2005下的Visual Studio 2005 Command Prompt进入控制台模式(这个模式会自动设置各种环境变量)、解压缩openssl的包,进入openssl的目录、perl configure VC-WIN32尽量在这个目录下执行该命令,否则找不到Configure文件,或者指定完整的Configure文件路径。、msdo_ms在解压目录下执行msdo_ms命令、nmake -f ms tdll.mak编译后在openssl解压目录下执行,完成编译后。输出的文件在out32dll里面,包括应用程序的可执行文件、lib文件和dll文件注意:在运行第五步时,cl编译器会抱怨说.cryptodesenc_read.c文件的read是The POSIX name for this item is deprecated(不被推荐的),建议使用_read。呵呵,我可不想将OpenSSL中的所有的read函数修改为_read。再看cl的错误代码 error C2220,于是上MSDN上查找:warning treated as error - no object file generated/WX tells the compiler to treat all warnings as errors. Since an error occurred, no object or executable file was generated.是由于设置了/WX选项,将所有的警告都作为错误对待,所以。。。于是打开OpenSSL目录下的MS目录下的ntdll.mak文件,将CFLAG的/WX选项去掉,存盘。
2023-08-02 01:41:541

openssl 生成ssl证书 能不能用

openssl生成的ssl证书一般只适合用来测试或学习,属于自签名SSL证书。给正规网站安装SSL证书建议去权威的CA机构申请SSL证书。
2023-08-02 01:42:023

如何在Windows下编译OpenSSL

笔者按照一定的步骤成功了编译了OpenSSL库,步骤如下:1)在微软网站下载并安装VS Studio,笔者写博客之时的最新版本是2013,连接如下2)从下载并安装ActivePerl。3)从下载并安装Nasm汇编器。4)从下载并安装OpenSSL的最新Release包。笔者写博客之时,最新的OpenSSL包是:4459777 Feb 11 16:34:23 2013 openssl-1.0.1e.tar.gz (MD5) (SHA1) (PGP sign) [LATEST]这里需要强调的是,读者未必需要完全按照笔者的步骤编译OpenSSL库,这里的部分次序是可以互换的。在完成所有上述5步后,我们就可以解压缩OpenSSL包,在对它进行修改便可以编译了。在解压缩后,所有的源代码放在openssl- 1.0.1e目录下,在此目录下,有两个文件INSTALL.W32, INSTALL.W64需要被关注。打开其中的任何一个文件,你会看到如何编译OpenSSL的各个步骤。这里,笔者将会再啰嗦一下。1)打开VS Studio命令行工具,如图1所示。若编译64位OpenSSL库,请打开Visual Studio x64 Win64 Command Prompt,反之亦然。图12)配置编译文件及安装目录;编译Win32:perl Configure VC-WIN32 --prefix=c:someopenssldir编译Win64:perl Configure VC-WIN64A“c:someopenssldir”目录可以改成任何你希望的安装目录3)搭建编译环境:msdo_nasmmsdo_ms对于64位编译,将msdo_ms替换成msdo_win64a4)编译OpenSSLnmake -f ms tdll.mak5)安装编译生成的库到“c:someopenssldir”nmake -f ms tdll.mak install执行后搞定了吗?若没有,是不是遗忘的中间的某个步骤?
2023-08-02 01:42:101

win10怎么运行openssl

  1、安装Perl(我安装在C盘,同时我的openssl也解压在C盘)  使用命令行工具,进入C:Perl64eg路径下, 执行“perl example.pl”,若显示“Hello from ActivePerl!”,则说明Perl安装成功。    2、设置环境变量  打开我的电脑->属性->高级系统设置->环境变量,找到Path系统变量,点击编辑,添加E:VS 2013VCin;C:Perl64in;c:windowssystem32,其中E:VS 2013VCin是我的VS2013的安装路径,根据情况自己修改。C:Perl64in是Perl的安装路径,根据情况自己修改。    3、用管理员身份打开Visual Studio的开发人员命令提示,并进入openssl的目录(我的放在C盘根目录)    4、执行Configure命令(配置编译参数)  5、运行msdo_ms命令    6、运行nmake -f ms tdll.mak命令进行编译生成OpenSSL动态库  此时会编译大概两分钟左右,耐心等待。   7、测试  使用命令nmake -f ms tdll.mak test,若成功,会出现结果:    8、可能使用的命令  测试OpenSSL动态库:nmake -f ms tdll.mak test  测试OpenSSL静态库:nmake -f ms t.mak test  安装OpenSSL动态库:nmake -f ms tdll.mak install  安装OpenSSL静态库:nmake -f ms t.mak install  清除上次OpenSSL动态库的编译,以便重新编译:nmake -f ms tdll.mak clean  清除上次OpenSSL静态库的编译,以便重新编译:nmake -f ms t.mak clean  9、总结(使用方法)  当建立工程需要使用到openssl库时,在包含目录中添加openssl安装目录的include目录, 在库目录中添加out32dll目录。  或者将OpenSSL下的include文件夹、lib文件、dll文件拷出,使用的时候包含进去就行了。  
2023-08-02 01:42:191

如何在编译OPENSSL时剔除不需要的部分

如何在Windows下编译OpenSSL (VS2010使用VC10的cl编译器)1、安装ActivePerl//初始化的时候,需要用到perl解释器2、使用VS2010下的Visual Studio 2010 Command Prompt进入控制台模式(这个模式会自动设置各种环境变量)3、解压缩openssl的包,进入openssl的目录4、perl configure VC-WIN32尽量在这个目录下执行该命令,否则找不到Configure文件,或者指定完整的Configure文件路径。5、msdo_ms.bat在解压目录下执行msdo_ms.bat命令6、nmake -f ms tdll.mak7、nmake -f ms t.mak编译后在openssl解压目录下执行,完成编译后。输出的文件在out32dll (6), out32 (7)里面,包括应用程序的可执行文件、lib文件和dll文件注意:在运行第五步时,cl编译器会抱怨说.cryptodesenc_read.c文件的read是The POSIX name for this item is deprecated(不被推荐的),建议使用_read。呵呵,我可不想将OpenSSL中的所有的read函数修改为_read。再看cl的错误代码error C2220,于是上MSDN上查找:warning treated as error - no object file generated/WX tells the compiler to treat all warnings as errors. Since an error occurred, no object or executable file was generated.是由于设置了/WX选项,将所有的警告都作为错误对待,所以。。。于是打开OpenSSL目录下的MS目录下的ntdll.mak文件,将CFLAG的/WX选项去掉,存盘。。。继续执行nmake -f ms tdll.mak=================================一、编译并安装OpenSSL1、按照标准步骤从源代码编译安装OpenSSL 在编译OpenSSL前,需要正确安装Perl,因为在编译OpenSSL时需要使用到该程序。 下载最新版本的Perl然后安装之。 下载最新版本的OpenSSL 然后将源码解压缩到某个目录(如 C:openssl-0.9.8j)中。 进入openssl源码目录。 cd c:openssl-1.0.1e 以下为参照该目录下的文件INSTALL.W32的执行过程: 运行configure: perl Configure VC-WIN32 创建Makefile文件: msdo_ms.bat 编译动态库: nmake -f ms tdll.mak 编译静态库: nmake -f ms t.mak 测试动态库: nmake -f ms tdll.mak test 测试静态库: nmake -f ms t.mak test 安装动态库: nmake -f ms tdll.mak install 安装静态库: nmake -f ms t.mak install 清除上次动态库的编译,以便重新编译: nmake -f ms tdll.mak clean 清除上次静态库的编译,以便重新编译: nmake -f ms t.mak clean2、如果嫌麻烦,不想编译,可以直接用别人做好的windows OpenSSL 安装包(我用的是0.9.8j版), 可以下载 OpenSSL for Windows,直接安装。P.S. OpenSSL for Windows 的源代码有一些数据类型和VC6的编译器不兼容,我发现的不兼容的数据类型如下:在OpenSSL安装目录的下的include/bn.h文件中,将 #define BN_ULLONG unsigned long long #define BN_ULONG unsigned long long #define BN_LONG long long 分别修改为: #define BN_ULLONG ULONGLONG #define BN_ULONG ULONGLONG #define BN_LONG LONGLONG 否则,会出现编译错误。二、使用OpenSSL 在VC中配置使用以上的函数库: 点击菜单:Tools -> Options,弹出对话框"Options",在该对话框中选择"Directories"标签。 在"Show directories for:"的"Include files"选项中新增目录"C:opensslinclude"; "Library files"选择中新增目录"C:openssllib"。 然后在需要链接OpenSSL函数库的工程中加入如下两句: #pragma comment(lib, "ssleay32.lib") #pragma comment(lib, "libeay32.lib") 其作用是将OpenSSL所需的库导入工程中。三、问题 我在链接OpenSSL的静态函数库时遇到类似以下的问题: Linking... msvcrt.lib(MSVCRT.dll) : error LNK2005: _strchr already defined in libcmtd.lib(strchr.obj) ... 这是由于OpenSSL的静态函数库使用的是了VC的多线程DLL的Release版本,而我的程序使用了多线程静态链接的Release版本。 调整OpenSSL的静态函数库使用的库函数版本即可,调整过程如下: 编辑文件 ms t.mak,将该文件第19行 "CFLAG= /MD /Ox /O2 /Ob2 /W3 /WX /Gs0 /GF /Gy /nologo -DOPENSSL_SYSNAME_WIN32 -DWIN32_LEAN_AND_MEAN -DL_ENDIAN -DDSO_WIN32 -D_CRT_SECURE_NO_DEPRECATE -D_CRT_NONSTDC_NO_DEPRECATE /Fdout32 -DOPENSSL_NO_CAMELLIA -DOPENSSL_NO_SEED -DOPENSSL_NO_RC5 -DOPENSSL_NO_MDC2 -DOPENSSL_NO_TLSEXT -DOPENSSL_NO_KRB5 -DOPENSSL_NO_DYNAMIC_ENGINE" 中的"/MD"修改为"/MT"。然后重新编译安装OpenSSL即可。四、附录:在VC中对C/C++ 运行时库不同版本编译指令说明 《在VC中对C/C++ 运行时库不同版本编译指令说明》一文中详细介绍了连接不同版本库的编译指令如下: C Runtime Library: /MD MSVCRT.LIB 多线程DLL的Release版本 /MDd MSVCRTD.LIB 多线程DLL的Debug版本 /MT LIBCMT.LIB 多线程静态链接的Release版本 /MTd LIBCMTD.LIB 多线程静态链接的Debug版本 /clr MSVCMRT.LIB 托管代码和非托管代码混合 /clr:pure MSVCURT.LIB 纯托管代码 C++ Standard Library: /MD MSVCPRT.LIB 多线程DLL的Release版本 /MDd MSVCPRTD.LIB 多线程DLL的Debug版本 /MT LIBCPMT.LIB 多线程静态链接的Release版本 /MTd LIBCPMTD.LIB 多线程静态链接的Debug版本===============================================一 配置编译参数 配置编译参数是进行OpenSSL编译的第一步,这一步可以确定系统的环境,使用什么编译器,默认安装路径以及其他一些选项.步骤如下:1.安装perl:下载ActivePerl-5.8.8.822-MSWin32-x86-280952.msi,然后点击msi文件进行安装!2..配置编译参数:下载openssl-1.0.1e.tar.gz,解压.vc:首先在C:Program FilesMicrosoft Visual Studio .NET 2010VC10in目录下执行vcvars32.bat,然后在解压后的openssl-1.0.1e目录,执行命令配置编译参数:perl Configure VC-WIN32 bc:在解压后的openssl-0.9.8g目录下执行:perl Configure BC-32二 生成批处理文件 在使用configure脚本配置好的编译参数后,就可以使用批处理命令来生成编译脚本.生成编译脚本根据采用编译器的不同通常使用不同的批处理文件.就目前来说,使用vc编译的时候有三种选择:do_ms,do_masm和do_nasm来创建一系列编译脚本文件,即.mak脚本.步骤如下:vc:在openssl-1.0.1e目录下,执行命令来批处理文件:do_ms,do_masm和do_nasmbc:1.下载nsm09839.zip微软汇编编译器,解压,拷贝到c:/windows目录下,修改名称为nasmw.exe;2.在openssl-1.0.1e目录下,执行命令来批处理文件:msdo_nasm三 代码编译vc:完成上面步骤后,可以看到两个关键脚本文件:nt.mak和ntdll.mak.如果我们需要编译后的OpenSSL库是支持动态DLL形式的,那么应该使用ntddll.mak文件进行编译,这样编译完成我们会得到四个与OpenSSL的API库有关文件:ssleay32.lib,libeay32.lib,ssleay32.dll和libeay32.dll.执行的编译命令形式如下:nmake -f ms tdll.mak如果不希望以动态库的形式使用OpenSSL,那么可以使用nt.mak文件进行编译.这样编译后使用OpenSSL的时候,回直接将代码链接进我们的程序里面.执行命令如下:nmake -f ms t.makbc:执行命令来完成代码编译:make -f mscb.mak四 ELSE1) 测试动态库: nmake -f ms tdll.mak test 测试静态库: nmake -f ms t.mak test 安装动态库: nmake -f ms tdll.mak install 安装静态库: nmake -f ms t.mak install 清除上次动态库的编译,以便重新编译: nmake -f ms tdll.mak clean 清除上次静态库的编译,以便重新编译: nmake -f ms t.mak clean2) 使用OpenSSL 在VC中配置使用以上的函数库: 点击菜单:Tools -> Options,弹出对话框"Options",在该对话框中选择"Directories"标签。 在"Show directories for:"的"Include files"选项中新增目录"C:opensslinclude";"Library files"选择中新增目录"C:openssllib"。 然后在需要链接OpenSSL函数库的工程中编译时加入"libeay32.lib"就可以了。
2023-08-02 01:42:271

php如何安装openssl扩展

php安装openssl扩展的方法:首先在PHP安装包中找到curl扩展目录;然后将config0.m4文件重命名;接着运行phpize;最后编译安装,并设置PHP配置文件php.ini即可。推荐:《PHP视频教程》 关于opensslOpenSSL是一个安全套接字层密码库,囊括主要的密码算法、常用的密钥和证书封装管理功能及SSL协议,并提供丰富的应用程序供测试或其它目的使用。安装openssl扩展linux系统篇1.CentOS系统php安装包目录:/data/php5.6.14/PHP安装路径:/usr/local/php/(下面步骤中的具体路径设置,大家根据自己的实际情况设置即可。)在PHP安装包中找到curl扩展目录cd /data/php5.6.14/ext/openssl/config0.m4文件重命名mv config0.m4 config.m4运行phpize/usr/local/php/bin/phpize编译安装:./configure --with-openssl --with-php-config=/usr/local/php/bin/php-configmake && make install这时候openssl.so就已经在/usr/local/php/lib/php/extensions/no-debug-non-zts-20131226/目录下生成了设置PHP配置文件php.ini,添加下面一行extension=openssl.so最后重启服务,使用phpinfo()查看PHP-openssl扩展是否安装成功。2.Ubuntu系统执行下面命令:sudo apt-get install opensslsudo apt-get install libcurl4-openssl-devsudo apt-get install libssl-dev最后重启服务即可。Windows系统篇1: 首先检查php.ini中;extension=php_openssl.dll是否存在, 如果存在的话去掉前面的注释符‘;", 如果不存在这行,那么添加extension=php_openssl.dll。2: 讲php文件夹下的: php_openssl.dll, ssleay32.dll, libeay32.dll 3个文件拷贝到 WINDOWSsystem32 文件夹下。注意:如果没有 php_openssl.dll ,去网上下载一个,下载下来有很多个php_openssl,找到你相应php版本下面的php_openssl。3: 重启服务即可
2023-08-02 01:43:481

openssl 证书 及ssh密匙

公钥和私钥都可以用来加密数据,相反用另一个解开。 公钥加密数据,然后私钥解密的情况被称为 加密解密。 私钥加密数据,公钥解密一般被称为 签名和验证签名。 RSA/DSA 一般的公钥不会用明文传输给别人的,正常情况下都会生成一个文件,这个文件就是公钥文件,然后这个文件可以交给其他人用于加密,但是传输过程中如果有人恶意破坏,将你的公钥换成了他的公钥,然后得到公钥的一方加密数据,不是他就可以用他自己的密钥解密看到数据了吗,为了解决这个问题,需要一个公证方来做这个事,任何人都可以找它来确认公钥是谁发的.这就是CA,CA确认公钥的原理也很简单,它将它自己的公钥发布给所有人,然后一个想要发布自己公钥的人可以将自己的公钥和一些身份信息发给CA,CA用自己的密钥进行加密,这里也可以称为签名.然后这个包含了你的公钥和你的信息的文件就可以称为证书文件了.这样一来所有得到一些公钥文件的人,通过CA的公钥解密了文件,如果正常解密那么机密后里面的信息一定是真的,因为加密方只可能是CA,其他人没它的密钥啊.这样你解开公钥文件,看看里面的信息就知道这个是不是那个你需要用来加密的公钥了. 密钥文件的格式用OpenSSL生成的就只有PEM和DER两种格式, PEM的是将密钥用base64编码表示出来的,直接打开你能看到一串的英文字母 DER格式是二进制的密钥文件 参考: 网址 不区分环境,使用以下命令生成新的ssh key: 选择生成文件以及key密码之后,会生成两个文件,其中已 pub 为后缀的为共钥 SSH默认位置为: Windows命令提示符: Windows / GNU / Linux / macOS / PowerShell上的Git Bash: 参考: gitlab.com
2023-08-02 01:43:571

openssl 中 engine 怎样实现

为一个基于密码学的安全开发包,OpenSSL提供的功能相当强大和全面,囊括了主要的密码算法、常用的密钥和证书封装管理功能以及SSL协议,并提供了丰富的应用程序供测试或其它目的使用。1.对称加密算法OpenSSL一共提供了8种对称加密算法,其中7种是分组加密算法,仅有的一种流加密算法是RC4。这7种分组加密算法分别是AES、DES、Blowfish、CAST、IDEA、RC2、RC5,都支持电子密码本模式(ECB)、加密分组链接模式(CBC)、加密反馈模式(CFB)和输出反馈模式(OFB)四种常用的分组密码加密模式。其中,AES使用的加密反馈模式(CFB)和输出反馈模式(OFB)分组长度是128位,其它算法使用的则是64位。事实上,DES算法里面不仅仅是常用的DES算法,还支持三个密钥和两个密钥3DES算法。2.非对称加密算法OpenSSL一共实现了4种非对称加密算法,包括DH算法、RSA算法、DSA算法和椭圆曲线算法(EC)。DH算法一般用户密钥交换。RSA算法既可以用于密钥交换,也可以用于数字签名,当然,如果你能够忍受其缓慢的速度,那么也可以用于数据加密。DSA算法则一般只用于数字签名。3.信息摘要算法OpenSSL实现了5种信息摘要算法,分别是MD2、MD5、MDC2、SHA(SHA1)和RIPEMD。SHA算法事实上包括了SHA和SHA1两种信息摘要算法,此外,OpenSSL还实现了DSS标准中规定的两种信息摘要算法DSS和DSS1。4.密钥和证书管理密钥和证书管理是PKI的一个重要组成部分,OpenSSL为之提供了丰富的功能,支持多种标准。首先,OpenSSL实现了ASN.1的证书和密钥相关标准,提供了对证书、公钥、私钥、证书请求以及CRL等数据对象的DER、PEM和BASE64的编解码功能。OpenSSL提供了产生各种公开密钥对和对称密钥的方法、函数和应用程序,同时提供了对公钥和私钥的DER编解码功能。并实现了私钥的PKCS#12和PKCS#8的编解码功能。OpenSSL在标准中提供了对私钥的加密保护功能,使得密钥可以安全地进行存储和分发。在此基础上,OpenSSL实现了对证书的X.509标准编解码、PKCS#12格式的编解码以及PKCS#7的编解码功能。并提供了一种文本数据库,支持证书的管理功能,包括证书密钥产生、请求产生、证书签发、吊销和验证等功能。事实上,OpenSSL提供的CA应用程序就是一个小型的证书管理中心(CA),实现了证书签发的整个流程和证书管理的大部分机制。5.SSL和TLS协议OpenSSL实现了SSL协议的SSLv2和SSLv3,支持了其中绝大部分算法协议。OpenSSL也实现了TLSv1.0,TLS是SSLv3的标准化版,虽然区别不大,但毕竟有很多细节不尽相同。虽然已经有众多的软件实现了OpenSSL的功能,但是OpenSSL里面实现的SSL协议能够让我们对SSL协议有一个更加清楚的认识,因为至少存在两点:一是OpenSSL实现的SSL协议是开放源代码的,我们可以追究SSL协议实现的每一个细节;二是OpenSSL实现的SSL协议是纯粹的SSL协议,没有跟其它协议(如HTTP)协议结合在一起,澄清了SSL协议的本来面目。
2023-08-02 01:44:071

怎么去除开机过程中openSSL

使用VS2005下的Visual Studio 2005 Command Prompt进入控制台模式(这个模式会自动设置各种环境变量)、解压缩openssl的包,进入openssl的目录、perl configure VC-WIN32尽量在这个目录下执行该命令,否则找不到Configure文件,或者指定完整的Configure文件路径。、msdo_ms在解压目录下执行msdo_ms命令、nmake -f ms tdll.mak编译后在openssl解压目录下执行,完成编译后。输出的文件在out32dll里面,包括应用程序的可执行文件、lib文件和dll文件注意:在运行第五步时,cl编译器会抱怨说.cryptodesenc_read.c文件的read是The POSIX name for this item is deprecated(不被推荐的),建议使用_read。呵呵,我可不想将OpenSSL中的所有的read函数修改为_read。再看cl的错误代码 error C2220,于是上MSDN上查找:warning treated as error - no object file generated/WX tells the compiler to treat all warnings as errors. Since an error occurred, no object or executable file was generated.是由于设置了/WX选项,将所有的警告都作为错误对待,所以。。。于是打开OpenSSL目录下的MS目录下的ntdll.mak文件,将CFLAG的/WX选项去掉,存盘。
2023-08-02 01:44:141

求问怎么编译OpenSSL,得到libssl.a 和libcrypto.a,跪求

如何在Windows下编译OpenSSL (VS2010使用VC10的cl编译器)1、安装ActivePerl//初始化的时候,需要用到perl解释器2、使用VS2010下的Visual Studio 2010 Command Prompt进入控制台模式(这个模式会自动设置各种环境变量)3、解压缩openssl的包,进入openssl的目录4、perl configure VC-WIN32尽量在这个目录下执行该命令,否则找不到Configure文件,或者指定完整的Configure文件路径。5、msdo_ms.bat在解压目录下执行msdo_ms.bat命令6、nmake -f ms tdll.mak7、nmake -f ms t.mak编译后在openssl解压目录下执行,完成编译后。输出的文件在out32dll (6), out32 (7)里面,包括应用程序的可执行文件、lib文件和dll文件注意:在运行第五步时,cl编译器会抱怨说.cryptodesenc_read.c文件的read是The POSIX name for this item is deprecated(不被推荐的),建议使用_read。呵呵,我可不想将OpenSSL中的所有的read函数修改为_read。再看cl的错误代码error C2220,于是上MSDN上查找:warning treated as error - no object file generated/WX tells the compiler to treat all warnings as errors. Since an error occurred, no object or executable file was generated.是由于设置了/WX选项,将所有的警告都作为错误对待,所以。。。于是打开OpenSSL目录下的MS目录下的ntdll.mak文件,将CFLAG的/WX选项去掉,存盘。。。继续执行nmake -f ms tdll.mak=================================一、编译并安装OpenSSL1、按照标准步骤从源代码编译安装OpenSSL 在编译OpenSSL前,需要正确安装Perl,因为在编译OpenSSL时需要使用到该程序。 下载最新版本的Perl然后安装之。 下载最新版本的OpenSSL 然后将源码解压缩到某个目录(如 C:openssl-0.9.8j)中。 进入openssl源码目录。 cd c:openssl-1.0.1e 以下为参照该目录下的文件INSTALL.W32的执行过程: 运行configure: perl Configure VC-WIN32 创建Makefile文件: msdo_ms.bat 编译动态库: nmake -f ms tdll.mak 编译静态库: nmake -f ms t.mak 测试动态库: nmake -f ms tdll.mak test 测试静态库: nmake -f ms t.mak test 安装动态库: nmake -f ms tdll.mak install 安装静态库: nmake -f ms t.mak install 清除上次动态库的编译,以便重新编译: nmake -f ms tdll.mak clean 清除上次静态库的编译,以便重新编译: nmake -f ms t.mak clean2、如果嫌麻烦,不想编译,可以直接用别人做好的windows OpenSSL 安装包(我用的是0.9.8j版), 可以下载 OpenSSL for Windows,直接安装。P.S. OpenSSL for Windows 的源代码有一些数据类型和VC6的编译器不兼容,我发现的不兼容的数据类型如下:在OpenSSL安装目录的下的include/bn.h文件中,将 #define BN_ULLONG unsigned long long #define BN_ULONG unsigned long long #define BN_LONG long long 分别修改为: #define BN_ULLONG ULONGLONG #define BN_ULONG ULONGLONG #define BN_LONG LONGLONG 否则,会出现编译错误。二、使用OpenSSL 在VC中配置使用以上的函数库: 点击菜单:Tools -> Options,弹出对话框"Options",在该对话框中选择"Directories"标签。 在"Show directories for:"的"Include files"选项中新增目录"C:opensslinclude"; "Library files"选择中新增目录"C:openssllib"。 然后在需要链接OpenSSL函数库的工程中加入如下两句: #pragma comment(lib, "ssleay32.lib") #pragma comment(lib, "libeay32.lib") 其作用是将OpenSSL所需的库导入工程中。三、问题 我在链接OpenSSL的静态函数库时遇到类似以下的问题: Linking... msvcrt.lib(MSVCRT.dll) : error LNK2005: _strchr already defined in libcmtd.lib(strchr.obj) ... 这是由于OpenSSL的静态函数库使用的是了VC的多线程DLL的Release版本,而我的程序使用了多线程静态链接的Release版本。 调整OpenSSL的静态函数库使用的库函数版本即可,调整过程如下: 编辑文件 ms t.mak,将该文件第19行 "CFLAG= /MD /Ox /O2 /Ob2 /W3 /WX /Gs0 /GF /Gy /nologo -DOPENSSL_SYSNAME_WIN32 -DWIN32_LEAN_AND_MEAN -DL_ENDIAN -DDSO_WIN32 -D_CRT_SECURE_NO_DEPRECATE -D_CRT_NONSTDC_NO_DEPRECATE /Fdout32 -DOPENSSL_NO_CAMELLIA -DOPENSSL_NO_SEED -DOPENSSL_NO_RC5 -DOPENSSL_NO_MDC2 -DOPENSSL_NO_TLSEXT -DOPENSSL_NO_KRB5 -DOPENSSL_NO_DYNAMIC_ENGINE" 中的"/MD"修改为"/MT"。然后重新编译安装OpenSSL即可。四、附录:在VC中对C/C++ 运行时库不同版本编译指令说明 《在VC中对C/C++ 运行时库不同版本编译指令说明》一文中详细介绍了连接不同版本库的编译指令如下: C Runtime Library: /MD MSVCRT.LIB 多线程DLL的Release版本 /MDd MSVCRTD.LIB 多线程DLL的Debug版本 /MT LIBCMT.LIB 多线程静态链接的Release版本 /MTd LIBCMTD.LIB 多线程静态链接的Debug版本 /clr MSVCMRT.LIB 托管代码和非托管代码混合 /clr:pure MSVCURT.LIB 纯托管代码 C++ Standard Library: /MD MSVCPRT.LIB 多线程DLL的Release版本 /MDd MSVCPRTD.LIB 多线程DLL的Debug版本 /MT LIBCPMT.LIB 多线程静态链接的Release版本 /MTd LIBCPMTD.LIB 多线程静态链接的Debug版本===============================================一 配置编译参数 配置编译参数是进行OpenSSL编译的第一步,这一步可以确定系统的环境,使用什么编译器,默认安装路径以及其他一些选项.步骤如下:1.安装perl:下载ActivePerl-5.8.8.822-MSWin32-x86-280952.msi,然后点击msi文件进行安装!2..配置编译参数:下载openssl-1.0.1e.tar.gz,解压.vc:首先在C:Program FilesMicrosoft Visual Studio .NET 2010VC10in目录下执行vcvars32.bat,然后在解压后的openssl-1.0.1e目录,执行命令配置编译参数:perl Configure VC-WIN32 bc:在解压后的openssl-0.9.8g目录下执行:perl Configure BC-32二 生成批处理文件 在使用configure脚本配置好的编译参数后,就可以使用批处理命令来生成编译脚本.生成编译脚本根据采用编译器的不同通常使用不同的批处理文件.就目前来说,使用vc编译的时候有三种选择:do_ms,do_masm和do_nasm来创建一系列编译脚本文件,即.mak脚本.步骤如下:vc:在openssl-1.0.1e目录下,执行命令来批处理文件:do_ms,do_masm和do_nasmbc:1.下载nsm09839.zip微软汇编编译器,解压,拷贝到c:/windows目录下,修改名称为nasmw.exe;2.在openssl-1.0.1e目录下,执行命令来批处理文件:msdo_nasm三 代码编译vc:完成上面步骤后,可以看到两个关键脚本文件:nt.mak和ntdll.mak.如果我们需要编译后的OpenSSL库是支持动态DLL形式的,那么应该使用ntddll.mak文件进行编译,这样编译完成我们会得到四个与OpenSSL的API库有关文件:ssleay32.lib,libeay32.lib,ssleay32.dll和libeay32.dll.执行的编译命令形式如下:nmake -f ms tdll.mak如果不希望以动态库的形式使用OpenSSL,那么可以使用nt.mak文件进行编译.这样编译后使用OpenSSL的时候,回直接将代码链接进我们的程序里面.执行命令如下:nmake -f ms t.makbc:执行命令来完成代码编译:make -f mscb.mak四 ELSE1) 测试动态库: nmake -f ms tdll.mak test 测试静态库: nmake -f ms t.mak test 安装动态库: nmake -f ms tdll.mak install 安装静态库: nmake -f ms t.mak install 清除上次动态库的编译,以便重新编译: nmake -f ms tdll.mak clean 清除上次静态库的编译,以便重新编译: nmake -f ms t.mak clean2) 使用OpenSSL 在VC中配置使用以上的函数库: 点击菜单:Tools -> Options,弹出对话框"Options",在该对话框中选择"Directories"标签。 在"Show directories for:"的"Include files"选项中新增目录"C:opensslinclude";"Library files"选择中新增目录"C:openssllib"。 然后在需要链接OpenSSL函数库的工程中编译时加入"libeay32.lib"就可以了。
2023-08-02 01:44:221

使用openssl 创建pkcs12 keystore 为什么会出错

(1)Openssl生成公私钥使用Openssl是为了生成公钥和私钥对,用于外部商户系统和xxx系统之间报文的安全性验证。如果使用者不需要生成公私钥,而是直接对报文进行处理,则参考第四部分,计算摘要及签名值。1. 安装openssl步骤直接点击exe文件。出现需要安装vs2008插件的,直接忽略。 2. 在安装过程中找到OpenSSL相应的安装目录,进入bin目录下找到openssl.exe可执行文件,点击运行。然后分别按顺序输入如下命令:a. genrsa –out private-rsa.key 1024说明:该命令是生成一个没有加密的私钥 genrsa 生成私钥文件,私钥存储在private-rsa.key中,长度为1024。out后面指定输出文件名。 private-rsa.key 为生成的私钥文件,但该文件必须经过处理得到私钥。b. req –new –x509 –key private-rsa.key –days 750 –outpublic-rsa.cer说明:根据private-rsa.key生成证书public-rsa.cer -new 表示新的请求 -509 表示输出的证书结构 750表示证书有效天数 -out public-rsa.cer -out后面表示公钥证书,用于验证数字签名,此公钥证书或者公钥需要提前发送给需要验证本单位或部门数据的接收方。c. pkcs12 –export –name test-alias –in public-rsa.cer–inkey private-rsa.key –out 99bill-rsa.pfx说明:生成PKCS12 格式Keystore 密码前后输入要一致,这个密码在用Keystore生成公私钥过程中会用到。 Public-rsa.cer, private-rsa.key是之前生成的。附1:下述代码是从99bill-rsa.pfx中获取私钥的Java版本代码。因为private-rsa.key中生成的私钥无法直接使用,必须进行一定的处理。代码有几个注意点:文件流初始化路径需要根据自己的实际路径来填写。密码是在第二节中c步骤中的密码,本实例输入的是suning。KeyStorekeyStore = KeyStore.getInstance("PKCS12");FileInputStreamfileInputStream = newFileInputStream("D:/OpenSSL/bin/99bill-rsa.pfx");char[]nPassword = "suning".toCharArray();StringkeyAlias = null;keyStore.load(fileInputStream,nPassword);fileInputStream.close();System.out.println("keystoretype=" + keyStore.getType());Enumeration<String>enumeration = keyStore.aliases();if(enumeration.hasMoreElements()){keyAlias = (String) enumeration.nextElement();System.out.println("alias=[" + keyAlias +"]");}System.out.println("iskey entry=" + keyStore.isKeyEntry(keyAlias));PrivateKeyprikey = (PrivateKey) keyStore.getKey(keyAlias, nPassword);//私钥转成字符串StringprivateStr = Base64.encodeBase64String(prikey.getEncoded()).trim();//生成公钥字符串,还可以通过cer证书生成Certificatecert = keyStore.getCertificate(keyAlias); PublicKeypubkey = cert.getPublicKey();StringpublicStr = Base64.encodeBase64String(pubKey.getEncoded()).trim();注意:1. 所用类的说明:Base64:import org.apache.commons.net.util.Base64;Certificate:import java.security.cert.Certificate;2. 在openssl生成公私钥过程中,用户输入了密码。本例中密码为suning。 1. 摘要及生成方法摘要的生成过程(digest方法全部实现了下述3个过程):1. 根据key对传来的map数据排序;2. 生成a1=b1&a2=b2&a3=b3形式的字符串,排除某些字符串Key值;3. 调用digest方法进行md5编码;以上三步均通过Digest.digest()方法实现:String digest = Digest.digest(Map<String,String> map, String... keys);传递的http报文体body内容如a1=b1&a2=b2&a3=b3形式的字符串,提取出需要加签的字符串并转成map形式。execludeKes是要排除的字段,是一个字符串数组。计算摘要这一步很关键,因为选取的字段要求发送方和接收方必须一致,即发送方对哪些字段计算摘要,那么同样地接收方也必须对相同的字段计算摘要,否则会报6601的错误。 说明:a. Map是存储了计算摘要的字段 b. keys表示排除的字段,不能用于计算摘要的字段,如signature,signAlgorithm2. 公钥证书及字符串转换方法转换的目的:便于存储。(商户直接提供公钥证书也可以,但是对于向验签系统提供公钥字符串的商户,需要用下述代码把公钥转成字符串)1. 公钥/私钥字符串转成公钥/私钥,主要是把字符串转成公钥PublicKeyX509EncodedKeySpec pubKeySpec = newX509EncodedKeySpec(Base64.decodeBase64(strPubKey)); KeyFactorykeyFactory = KeyFactory.getInstance(RSA); PublicKeypubKey = keyFactory.generatePublic(pubKeySpec);2. 公钥或私钥转成Base64字符串:StringpublicStr = Base64.encodeBase64String(pubKey.getEncoded()).trim();3. 公私钥验证方法验证目的:公私钥生成之后,需要验证是否匹配。(之前许多商户生成公私钥混乱,无法确定公私钥是否匹配就添加到验签系统中)。此代码由用户自己用junit验证运行。验证公私钥生成是否正确,如果result为true,则说明公私钥生成正确;否则生成的公私钥有问题,不能使用。String prik1 ="";String pubb ="";String data ="wkk";String digest =Digest.digest(data);PrivateKey privateKey =RSAUtil.getPrivateKey(prik1);String sign =RSAUtil.sign(digest, privateKey);boolean result =RSAUtil.vertiy(digest, sign, RSAUtil.getPublicKey(pubb));System.out.println(result);
2023-08-02 01:44:291

openssl rsa怎么通过私钥生成公钥短

在ubuntu上要使用openssl的话需要先进行安装,命令如下:sudo apt-get install openssl安装完成就可以使用openssl了。首先需要进入openssl的交互界面,在命令行了输入openssl即可;1)生成RSA私钥:genrsa -out rsa_private_key.pem 1024该命令会生成1024位的私钥,生成成功的界面如下:此时我们就可以在当前路径下看到rsa_private_key.pem文件了。2)把RSA私钥转换成PKCS8格式输入命令pkcs8 -topk8 -inform PEM -in rsa_private_key.pem -outform PEM –nocrypt,并回车得到生成功的结果,这个结果就是PKCS8格式的私钥,如下图:3) 生成RSA公钥输入命令rsa -in rsa_private_key.pem -pubout -out rsa_public_key.pem,并回车,得到生成成功的结果,如下图:此时,我们可以看到一个文件名为rsa_public_key.pem的文件,打开它,可以看到-----BEGIN PUBLIC KEY-----开头,-----END PUBLIC KEY-----结尾的没有换行的字符串,这个就是公钥。
2023-08-02 01:44:371

如何安装openssl

其实第一步应该先通过vs2008 command prompt进入cmd这个界面,只有这样,才不会编译的时候出现cl找不的错误。
2023-08-02 01:45:032

如何使用OPENSSL中的AES算法加密文件

使用VS2005下的Visual Studio 2005 Command Prompt进入控制台模式(这个模式会自动设置各种环境变量)、解压缩openssl的包,进入openssl的目录、perl configure VC-WIN32尽量在这个目录下执行该命令,否则找不到Configure文件,或者指定完整的Configure文件路径。、msdo_ms在解压目录下执行msdo_ms命令、nmake -f ms tdll.mak编译后在openssl解压目录下执行,完成编译后。输出的文件在out32dll里面,包括应用程序的可执行文件、lib文件和dll文件注意:在运行第五步时,cl编译器会抱怨说.cryptodesenc_read.c文件的read是The POSIX name for this item is deprecated(不被推荐的),建议使用_read。呵呵,我可不想将OpenSSL中的所有的read函数修改为_read。再看cl的错误代码 error C2220,于是上MSDN上查找:warning treated as error - no object file generated/WX tells the compiler to treat all warnings as errors. Since an error occurred, no object or executable file was generated.是由于设置了/WX选项,将所有的警告都作为错误对待,所以。。。于是打开OpenSSL目录下的MS目录下的ntdll.mak文件,将CFLAG的/WX选项去掉,存盘。
2023-08-02 01:45:101

openssl怎样创建个人证书

一:生成CA证书目前不使用第三方权威机构的CA来认证,自己充当CA的角色。 网上下载一个openssl软件1. 创建私钥 :C:/OpenSSL/bin>openssl genrsa -out ca/ca-key.pem 1024 2.创建证书请求 :C:/OpenSSL/bin>openssl req -new -out ca/ca-req.csr -key ca/ca-key.pem -----Country Name (2 letter code) [AU]:cnState or Province Name (full name) [Some-State]:zhejiangLocality Name (eg, city) []:hangzhouOrganization Name (eg, company) [Internet Widgits Pty Ltd]:skyvisionOrganizational Unit Name (eg, section) []:testCommon Name (eg, YOUR name) []:rootEmail Address []:sky3.自签署证书 :C:/OpenSSL/bin>openssl x509 -req -in ca/ca-req.csr -out ca/ca-cert.pem -signkey ca/ca-key.pem -days 3650 4.将证书导出成浏览器支持的.p12格式 : (不需要可以省略)C:/OpenSSL/bin>openssl pkcs12 -export -clcerts -in ca/ca-cert.pem -inkey ca/ca-key.pem -out ca/ca.p12 密码:changeit 二.生成server证书。 1.创建私钥 :C:/OpenSSL/bin>openssl genrsa -out server/server-key.pem 1024 2.创建证书请求 :C:/OpenSSL/bin>openssl req -new -out server/server-req.csr -key server/server-key.pem -----Country Name (2 letter code) [AU]:cnState or Province Name (full name) [Some-State]:zhejiangLocality Name (eg, city) []:hangzhouOrganization Name (eg, company) [Internet Widgits Pty Ltd]:skyvisionOrganizational Unit Name (eg, section) []:testCommon Name (eg, YOUR name) []:192.168.1.246 注释:一定要写服务器所在的ip地址Email Address []:sky3.自签署证书 :C:/OpenSSL/bin>openssl x509 -req -in server/server-req.csr -out server/server-cert.pem -signkey server/server-key.pem -CA ca/ca-cert.pem -CAkey ca/ca-key.pem -CAcreateserial -days 3650 4.将证书导出成浏览器支持的.p12格式 :C:/OpenSSL/bin>openssl pkcs12 -export -clcerts -in server/server-cert.pem -inkey server/server-key.pem -out server/server.p12 密码:changeit三.生成client证书。 1.创建私钥 :C:/OpenSSL/bin>openssl genrsa -out client/client-key.pem 1024 2009-7-17 22:32 回复 yakeqin1位粉丝2楼2.创建证书请求 :C:/OpenSSL/bin>openssl req -new -out client/client-req.csr -key client/client-key.pem-----Country Name (2 letter code) [AU]:cnState or Province Name (full name) [Some-State]:zhejiangLocality Name (eg, city) []:hangzhouOrganization Name (eg, company) [Internet Widgits Pty Ltd]:skyvisionOrganizational Unit Name (eg, section) []:testCommon Name (eg, YOUR name) []:skyEmail Address []:sky 注释:就是登入中心的用户(本来用户名应该是Common Name,但是中山公安的不知道为什么使用的Email Address,其他版本没有测试)Please enter the following "extra" attributesto be sent with your certificate requestA challenge password []:123456An optional company name []:tsing 3.自签署证书 :C:/OpenSSL/bin>openssl x509 -req -in client/client-req.csr -out client/client-cert.pem -signkey client/client-key.pem -CA ca/ca-cert.pem -CAkey ca/ca-key.pem -CAcreateserial -days 3650 4.将证书导出成浏览器支持的.p12格式 :C:/OpenSSL/bin>openssl pkcs12 -export -clcerts -in client/client-cert.pem -inkey client/client-key.pem -out client/client.p12 密码:changeit四.根据ca证书生成jks文件 C:/Java/jdk1.5.0_09/bin > keytool -keystore C:/openssl/bin/jks/truststore.jks -keypass 222222 -storepass 222222 -alias ca -import -trustcacerts -file C:/openssl/bin/ca/ca-cert.pem 五.配置tomcat ssl修改conf/server.xml。tomcat6中多了SSLEnabled="true"属性。keystorefile, truststorefile设置为你正确的相关路径 xml 代码tomcat 5.5的配置:<Connector port="8443" maxHttpHeaderSize="8192"maxThreads="150" minSpareThreads="25" maxSpareThreads="75"enableLookups="false" disableUploadTimeout="true"acceptCount="100" scheme="https" secure="true"clientAuth="true" sslProtocol="TLS"keystoreFile="server.p12" keystorePass="changeit" keystoreType="PKCS12"truststoreFile="truststore.jks" truststorePass="222222" truststoreType="JKS" /> tomcat6.0的配置:<Connector port="8443" protocol="HTTP/1.1" SSLEnabled="true"maxThreads="150" scheme="https" secure="true"clientAuth="true" sslProtocol="TLS"keystoreFile="server.p12" keystorePass="changeit" keystoreType="PKCS12"truststoreFile="truststore.jks" truststorePass="222222" truststoreType="JKS"/>六.导入证书将ca.p12,client.p12分别导入到IE中去(打开IE->;Internet选项->内容->证书)。 ca.p12导入至受信任的根证书颁发机构,client.p12导入至个人七.验证ssl配置是否正确访问你的应用http://ip:8443/,如果配置正确的话会出现请求你数字证书的对话框。
2023-08-02 01:45:441

如何使用openssl生成证书

Step 1. Create key (password protected)openssl genrsa -out prvtkey.pem 1024/2038 (with out password protected) openssl genrsa -des3 -out prvtkey.pem 1024/2048 (password protected)这个命令会生成一个1024/2048位的密钥。Step 2. Create certification requestopenssl req -new -key prvtkey.pem -out cert.csropenssl req -new -nodes -key prvtkey.pem -out cert.csr这个命令将会生成一个证书请求,当然,用到了前面生成的密钥prvtkey.pem文件这里将生成一个新的文件cert.csr,即一个证书请求文件,你可以拿着这个文件去数字证书颁发机构(即CA)申请一个数字证书。CA会给你一个新的文件cacert.pem,那才是你的数字证书。Step 3: Send certificate request to Certification Authority (CA)如果是自己做测试,那么证书的申请机构和颁发机构都是自己。就可以用下面这个命令来生成证书:openssl req -new -x509 -key prvtkey.pem -out cacert.pem -days 1095这个命令将用上面生成的密钥privkey.pem生成一个数字证书cacert.pemcacert.pem 生成过程见“OpenSSL建立自己的CA”有了privkey.pem和cacert.pem文件后就可以在自己的程序中使用了,比如做一个加密通讯的服务器-------------OpenSSL建立自己的CA(1) 环境准备首先,需要准备一个目录放置CA文件,包括颁发的证书和CRL(Certificate Revoke List)。这里我们选择目录 /var/MyCA。然后我们在/var/MyCA下建立两个目录,certs用来保存我们的CA颁发的所有的证书的副本;private用来保存CA证书的私钥匙。除了生成钥匙,在我们的CA体系中还需要创建三个文件。第一个文件用来跟踪最后一次颁发的证书的序列号,我们把它命名为serial,初始化为01。第二个文件是一个排序数据库,用来跟踪已经颁发的证书。我们把它命名为index.txt,文件内容为空。$ mkdir /var/MyCA$ cd /var/MyCA$ mkdir certs private$ chmod g-rwx,o-rwx private$ echo "01" > serial$ touch index.txt第三个文件是OpenSSL的配置文件,创建起来要棘手点。示例如下:$ touch openssl.cnf文件内容如下:[ ca ]default_ca = myca[ myca ]dir = /var/MyCAcertificate = $dir/cacert.pemdatabase = $dir/index.txtnew_certs_dir = $dir/certsprivate_key = $dir/private/cakey.pemserial = $dir/serialdefault_crl_days= 7default_days = 365default_md = md5policy = myca_policyx509_extensions = certificate_extensions[ myca_policy ]commonName = suppliedstateOrProvinceName = suppliedcountryName = suppliedemailAddress = suppliedorganizationName= suppliedorganizationalUnitName = optional[ certificate_extensions ]basicConstraints= CA:false我们需要告诉OpenSSL配置文件的路径,有两种方法可以达成目的:通过config命令选项;通过环境变量OPENSSL_CONF。这里我们选择环境变量的方式。$ OPENSSL_CONF=/var/MyCA/openssl.cnf"$ export OPENSSL_CONF(2) 生成根证书 (Root Certificate)我们需要一个证书来为自己颁发的证书签名,这个证书可从其他CA获取,或者是自签名的根证书。这里我们生成一个自签名的根证书。首先我们需要往配置文件里面添加一些信息,如下所示,节名和命令行工具的命令req一样。我们把所有必要的信息都写进配置,而不是在命令行输入,这是唯一指定X.509v3扩展的方式,也能让我们对如何创建根证书有个清晰的把握。[ req ]default_bits = 2048default_keyfile = /var/MyCA/private/cakey.pemdefault_md = md5prompt = nodistinguished_name = root_ca_distinguished_namex509_extensions = root_ca_extensions[ root_ca_distinguished_name ]commonName = My Test CAstateOrProvinceName = HZcountryName = CNemailAddress = test@cert.com organizationName = Root Certification Authority[ root_ca_extensions ]basicConstraints = CA:true万事俱备,我们可以生成根证书了。注意设置好环境变量OPENSSL_CONF。$ openssl req -x509 -newkey rsa -out cacert.pem -outform PEM -days 356注:“-days 356“控制有效期限为365天,默认为30天。验证一下我们生成的文件。$ openssl x509 -in cacert.pem -text -noout(3) 给客户颁发证书在给客户颁发证书之前,需要客户提供证书的基本信息。我们另外开启一个终端窗口,使用默认的OpenSSL配置文件(不要让之前的OPENSSL_CONF干扰我们,那个配置是专门用来生成根证书的)。命令和我们生成根证书的类似,都是req,不过需要提供一些额外的信息。如下:$ openssl req -newkey rsa:1024 -keyout testkey.pem -keyform PEM -out testreq.pem -outform PEM有两次提示要口令,第一次的口令用来加密私钥匙testkey.pem,第二次口令一般被OpenSSL忽略。结果生成两个文件:testkey.pem,私钥匙;testreq.pem,请求信息,其中包括公钥匙。我们来看看testreq.pem都有哪些信息?$ openssl req -in testreq.pem -text -noout现在,我们可以把testreq.pem提交给我们的CA生成证书了。为了方便起见,我们假定testreq.pem在//var/MyCA/private/中。$ openssl ca -in testreq.pem有三次提示,一次是问你CA的私钥匙密码,两次是确认,输出的结果就是为客户颁发的证书。可以通过batch选项取消命令提示,可通过notext选项取消证书的输出显示。此外,还可以一次给多个客户颁发证书,方法是用 infiles选项替换in选项,不过这个选项必须放在最后,因为此后的任何字符均被处理为文件名称列表。生成的证书放在certs目录,同时index.txt和serial的内容都发生了改变。publicdoubleside=10.0;//去掉static
2023-08-02 01:45:531

openssl-win32里面bin下面没有openssl.exe怎么回事该怎么用

使用VS2005下的Visual Studio 2005 Command Prompt进入控制台模式(这个模式会自动设置各种环境变量)、解压缩openssl的包,进入openssl的目录、perl configure VC-WIN32尽量在这个目录下执行该命令,否则找不到Configure文件,或者指定完整的Configure文件路径。、msdo_ms在解压目录下执行msdo_ms命令、nmake -f ms tdll.mak编译后在openssl解压目录下执行,完成编译后。输出的文件在out32dll里面,包括应用程序的可执行文件、lib文件和dll文件注意:在运行第五步时,cl编译器会抱怨说.cryptodesenc_read.c文件的read是The POSIX name for this item is deprecated(不被推荐的),建议使用_read。呵呵,我可不想将OpenSSL中的所有的read函数修改为_read。再看cl的错误代码 error C2220,于是上MSDN上查找:warning treated as error - no object file generated/WX tells the compiler to treat all warnings as errors. Since an error occurred, no object or executable file was generated.是由于设置了/WX选项,将所有的警告都作为错误对待,所以。。。于是打开OpenSSL目录下的MS目录下的ntdll.mak文件,将CFLAG的/WX选项去掉,存盘。
2023-08-02 01:46:001

win10怎么运行openssl

1、安装Perl(我安装在C盘,同时我的openssl也解压在C盘)使用命令行工具,进入C:Perl64eg路径下, 执行“perl example.pl”,若显示“Hello from ActivePerl!”,则说明Perl安装成功。2、设置环境变量打开我的电脑->属性->高级系统设置->环境变量,找到Path系统变量,点击编辑,添加E:VS 2013VCin;C:Perl64in;c:windowssystem32,其中E:VS 2013VCin是我的VS2013的安装路径,根据情况自己修改。C:Perl64in是Perl的安装路径,根据情况自己修改。3、用管理员身份打开Visual Studio的开发人员命令提示,并进入openssl的目录(我的放在C盘根目录)4、执行Configure命令(配置编译参数)5、运行msdo_ms命令6、运行nmake -f ms tdll.mak命令进行编译生成OpenSSL动态库此时会编译大概两分钟左右,耐心等待。7、测试使用命令nmake -f ms tdll.mak test,若成功,会出现结果:8、可能使用的命令测试OpenSSL动态库:nmake -f ms tdll.mak test测试OpenSSL静态库:nmake -f ms t.mak test安装OpenSSL动态库:nmake -f ms tdll.mak install安装OpenSSL静态库:nmake -f ms t.mak install清除上次OpenSSL动态库的编译,以便重新编译:nmake -f ms tdll.mak clean清除上次OpenSSL静态库的编译,以便重新编译:nmake -f ms t.mak clean9、总结(使用方法)当建立工程需要使用到openssl库时,在包含目录中添加openssl安装目录的include目录, 在库目录中添加out32dll目录。或者将OpenSSL下的include文件夹、lib文件、dll文件拷出,使用的时候包含进去就行了。
2023-08-02 01:46:101

如何windows10下安装openssl

安装环境:Windows10专业版+VS2013工具:ActivePerl-5.22.1.2201-MSWin32-x64-299574.msi,下载地址:http://www.activestate.com/ openssl-1.0.1r.tar,下载地址:http://www.openssl.org/1、安装Perl(我安装在C盘,同时我的openssl也解压在C盘) 使用命令行工具,进入C:Perl64eg路径下, 执行“perl example.pl”,若显示“Hello from ActivePerl!”,则说明Perl安装成功。2、设置环境变量 打开我的电脑->属性->高级系统设置->环境变量,找到Path系统变量,点击编辑,添加E:VS 2013VCin;C:Perl64in;c:windowssystem32,其中E:VS 2013VCin是我的VS2013的安装路径,根据情况自己修改。C:Perl64in是Perl的安装路径,根据情况自己修改。
2023-08-02 01:46:261

openssl怎么编译成动态库

1、静态编译./Configure linux-elf-arm -DB_ENDIAN linux:"armeb-linux-gcc -mbig-endian" --prefix=$(pwd)/OpenSSLa、 将openssl-0.9.8d/crypto/bio/bss_file.c中以下代码注释掉//#ifndef _FILE_OFFSET_BITS//#define _FILE_OFFSET_BITS 64//#endif#endif b、 报错没有timeb.h时,在报错的.c文件中#undef TIMEBc、 去掉openssl顶层Makefile中“build_all:”后面的 build_app build_test (我们要的只是两个静态库libcrypto.a和libssl.a),并去掉”DIRS=”后面的app和tests。 make && make install2、动态库1.config: #config no-asm --prefix=../OpenSSL2.改Makefile 1) CC= gcc 改成 CC = armeb-linux-gcc; 2) 删除 CFLAG= 中的 “-march=pentium”; 3) AR=ar $(ARFLAGS) r 改为 AR=armeb-linux-ar $(ARFLAGS) r; 4) ARD=ar $(ARFLAGS) d 改为 ARD=armeb-linux-ar $(ARFLAGS) d; 5)RANLIB= /usr/bin/ranlib 改为 RANLIB= armeb-linux-ranlib;3.编译 #make #make install
2023-08-02 01:46:482

如何查看windows服务器端和客户端openssl版本

一、准备工作1.windows2003添加组件添加IIS:勾选“应用程序服务器”,然后双击进入下图,勾选“IIS”和“ASP.NET”添加证书系统:勾选“证书服务”添加组件的时候要求填写的就按照操作填上就行了,然后下一步,直到完成。2.把openssl(执行版,有的叫编译后版)解压到d:下,当然哪个盘都可以。二、获取IIS证书请求架设好IIS网站后,在【目录安全性】选项卡中点击【服务器证书】按钮,【下一步】,【新建证书】,【现在准备证书请求--下一步】,输入【名称】,输入【单位】和【部门】,输入【公用名称】,选择【国家】并输入【省】和【市县】并【下一步】,【下一步】,【下一步】,【完成】,IIS的证书请求已经获取,就是C:certreq.txt。这里请牢记输入的信息。三、开始操作openssl(cmd –> d:openssl-0.9.7out32dll 下执行下面的操作,注意openssl.cnf文件,后面命令都是用它编译的)1.生成自签名根证书openssl req -x509 -newkey rsa:1024 -keyout cakey.pem -out cacert.pem -days 3650 -config d:openssl-0.9.7appsopenssl.cnf PEM pass phrase:根证书密码,当然很重要! Country Name: CN //两个字母的国家代号 State or Province Name: guang dong //省份名称 Locality Name: guang zhou //城市名称 Organization Name: sunrising //公司名称 Organizational Unit Name: home //部门名称 Common Name: besunny //你的姓名(要是生成服务器端的证书一定要输入域名或者ip地址) Email Address: Email地址2.把cakey.pem 拷贝到demoCAprivate, 把cacert.pem拷贝到out32dlldemoCAcopy cakey.pem demoCAprivate copy cacert.pem demoCA提醒:这时候,已经有cakey.pem:ca的私钥文件,cacert.pem:ca的自签名根证书,certreq.txt:IIS的证书请求文件,三个文件。3.用CA证书cacert.pem为IIS请求certreq.txt签发证书server.pem openssl ca -in certreq.txt -out server.pem -config d:openssl-0.9.7appsopenssl.cnf4.把server.pem转换成x509格式 openssl x509 -in server.pem -out server.cer提醒:这时候,你又得到了两个文件,一个是server.pem,一个是server.cer。现在把bin下的server.cer复制到c:下。5.将生成的证书server.cer导入到IIS打开IIS,在【默认网站】上单击右键【属性】,在【目录安全性】选项卡中点击【服务器证书】按钮,【下一步】,选择【处理挂起的请求并安装证书】并【下一步】,正常情况下,您已经看到了文本框中就是c:server.cer,如果不是,自己点【浏览】按钮去找并【下一步】,【下一步】,【完成】。回到【目录安全性】选项卡在【安全通信】栏目中单击【编辑】按钮,勾上【要求安全通道(SSL)】,勾上【要求128位加密】,选择【要求客户端证书】,点击【确定】按钮。6.生成客户端证书 openssl req -newkey rsa:1024 -keyout clikey.pem -out clireq.pem -days 365 -config d:openssl-0.9.7appsopenssl.cnf证书信息自己填写,有些内容要与根证书一致。7.CA签发客户端证书 openssl ca -in clireq.pem -out client.crt -config d:openssl-0.9.7appsopenssl.cnf8.将客户端证书转换为pk12格式 openssl pkcs12 -export -clcerts -in client.crt -inkey clikey.pem -out client.p12 -config d:openssl-0.9.7appsopenssl.cnf9.安装信任的根证书把cacert.pem改名为cacert.cer,双击cacert.cer文件,打开证书信息窗口,单击【安装证书】按钮,【下一步】。提醒,下面是最关键的:选择【将所有的证书放入下列存储区】,点击【浏览】按钮[url=file:///C:/Documents][/url] 选择【受信任的根证书颁发机构】,勾选【物理存储区】,选择【受信任的根证书颁发机构】,点【本地计算机】,并点击【确定】,【下一步】,【完成】,【是】,根证书安装完毕!勾选【物理存储区”,选择“受信任的根证书颁发机构”,点“本地计算机”,然后点“确定”。[url=file:///C:/Documents][/url] “clent.crt”的安装也是上面相同的步骤。10.安装客户端证书找到client.p12文件拷贝到本地计算机,然后双击,【下一步】,【下一步】,输入客户端证书的密码并【下一步】,【下一步】,【完成】,【确定】。到此,客户端的证书也已经安完毕。提醒:最好把cacert.cer文件作为受新人的根证书安装到本地。我架设的是提供给内网使用的,所以Common Name直接是内网IP,当然可以是域名,如果导入cacert.cer后,本地计算机就识别https://你的地址是可信任网站,直接由服务器就识别客户端的证书,然后就可以登陆了。如果没有导入cacert.cer根证书,会提示下面的:点“是”继续就可以了。然后还会弹出选择客户端数字证书的提示框。
2023-08-02 01:47:051

如何正确使用Nodejs 的 c++ module 链接到 OpenSSL

事情的起因是这样的, 因为某些原因, 最近在写 Nodejs 的 c++ module, 然后在js这边调用。 网络通信自然离不开ssl, 于是需要链接到Openssl的库。我们本来的期望是,需要用户安装有Openssl的运行库, 然后我们的c++ module 动态链接到Openssl的so库上来运行。起初一切看起来还不错,直到我们发现这个openssl的函数不能工作:PKCS7_sign()PKCS7_sign ( )我们发现:如果我们的 c++ 模块与Openssl库动态链接的话, 编译都没问题. 但是运行会出现: PKCS7_sign 符号无法找到的错误.如果我们的 c++ 模块与Openssl库静态链接的话, 编译也没问题, 但是运行时,调用这个函数的地方没有效果, 这个函数返回值是 0. 按照文档表示出现错误, 但是用 Openssl的函数 ERR_get_error 获取错误码也是0. 表示没有错误码.在linux上是这样, 那在Mac上呢? 用Mac试了一下, 发现Mac没有问题. 于是,想到这可能是Nodejs的一个bug. 然后就去 Nodejs 给它报了一个bug: [https://github.com/joyent/node/issues/8026][1]同时, google上搜索了 nodejs linking to openssl 类似的关键字.找到这样几篇文章:https://github.com/TooTallNate/node-gyp/wiki/Linking-to-OpenSSLhttps://github.com/joyent/node/issues/3915http://serverfault.com/questions/338092/how-can-i-build-node-js-using-static-libssl-and-crypto-librarieshttps://github.com/robhawkes/node-extension/issues/1通过搜索, 我们发现, 原来Nodejs自己也使用了Openssl 库, 推测nodejs自己的crypto模块也是使用Openssl lib实现的. 这点从Nodejs的源码中就能发现, 它包含了最新的Openssl的全部源码.其中写上面第一篇文章: https://github.com/TooTallNate/node-gyp/wiki/Linking-to-OpenSSL 的那个帅哥是Nodejs的开发人员.基本结论:Nodejs 自己使用了Openssl在Nodejs 0.6之前, Nodejs是动态链接到 Openssl 库的. 而之后的版本都是静态链接的.这时发现 Node 那边已经回复我的bug了: https://github.com/joyent/node/issues/8026Node 解释的原因:Node 自己编译之后, 把自己没用到的符号清除, 所以我们在运行时就找不到符号了. 于是他们把这bug 修掉了. 保留了全部符号. 这导致 Node 的体积大了 400k.
2023-08-02 01:47:121

如何处理OpenSSL的SSL

你读了OpenSSL的文档 ssl_read 和 ssl_get_error 了吗?ssl_read:如果基础生物阻塞, SSL_read()将只返回,一旦 读操作已完成或 发生错误,除了当 重新谈判发生,其中 区分可能发生SSL_ERROR_WANT_READ. 这种行为可以被控制 的的SSL_MODE_AUTO_RETRY标志 SSL_CTX_set_mode(3)调用.如果底层BIO是非阻塞的, SSL_read()也将返回当 底层的生物不能满足 SSL_read的需要()以继续 操作.在这种情况下的呼叫 SSL_get_error(3)的返回值 SSL_read的()将产生 SSL_ERROR_WANT_READ或 SSL_ERROR_WANT_WRITE.如在任何时间 重新谈判是可能的,调用 SSL_read()也可引起写 操作!调用进程然后 必须服用后重复调用 适当的行动,以满足 SSL_read的需要().动作 依赖于底层生物上.何时 使用非阻塞套接字,什么都没有 是必须要做的,但select()可以 用于检查所需 条件.ssl_get_error:SSL_ERROR_WANT_READ,SSL_ERROR_WANT_WRITE该操作没有完成;该 同样的TLS / SSL的I / O功能应该是 以后再次调用.如果,届时, 底层的生物有数据可供 读数(如果结果代码是 SSL_ERROR_WANT_READ)或允许写入 数据(SSL_ERROR_WANT_WRITE),然后一些 TLS / SSL协议的进展将采取 的地方,即,至少一部分的TLS / SSL的 记录将被读取或写入.注 该重试可能会再次导致 SSL_ERROR_WANT_READ或SSL_ERROR_WANT_WRITE 条件.没有固定的上限 对于迭代的次数,可能 是必要的,直到变成进度 在应用协议层面可见.对于插座的BIOS(例如,当SSL_set_fd() 用),在select()或poll() 底层套接字可以用来找到 出来的时候,TLS / SSL的I / O功能 应该重试.警告:任何TLS / SSL的I / O功能可 导致任何SSL_ERROR_WANT_READ的 和SSL_ERROR_WANT_WRITE.特别地, SSL_read()或SSL_peek()可能要 写数据和SSL_write()可能要 读取数据.这主要是因为 可能发生在任何的TLS / SSL握手 该协议(由发起时的时间 在客户端或服务器); SSL_read(),SSL_peek()和SSL_write() 将处理任何未决的握手.OpenSSL的是作为一个状态机.SSL_ERROR_WANT_READ意味着更多的入站数据,并SSL_ERROR_WANT_WRITE意味着更多的出站数据,是必要的,以便使正向连接上的进步.如果你得到SSL_ERROR_WANT_WRITE上ssl_read()操作,你需要发送出站数据,或者至少等待套接字成为可写的.如果你得到SSL_ERROR_WANT_READ上ssl_write()操作,你需要阅读的入站数据.你应该订阅 OpenSSL mailing lists .这个问题被问了很多.
2023-08-02 01:47:221

openssl 生成ssl证书 能不能用

自己生成的,无法使用不会被浏览器信任,需要淘宝Gworg获取SSL证书才可以信任。
2023-08-02 01:47:333

怎么看openssl版本

1、打开openss,输入命令:yum -y install redhat-lsb。2、安装成功后执行lsb_release命令。3、直接执行lsb_release命令输出LSB Version信息,等价于lsb_release -v。4、查看发布的版本号,输入命令:lsb_release -r。5、查看版本描述信息,输入命令:lsb_release -d。6、显示所有LSB相关的信息,输入命令:lsb_release -a。7、查看lsb_release支持的所有参数,输入命令:lsb_release -h。
2023-08-02 01:47:401

如何在Windows下编译OpenSSL

如何在Windows下编译OpenSSL (VS2010使用VC10的cl编译器)1、安装ActivePerl//初始化的时候,需要用到perl解释器2、使用VS2010下的Visual Studio 2010 Command Prompt进入控制台模式(这个模式会自动设置各种环境变量)3、解压缩openssl的包,进入openssl的目录4、perl configure VC-WIN32尽量在这个目录下执行该命令,否则找不到Configure文件,或者指定完整的Configure文件路径。5、msdo_ms.bat在解压目录下执行msdo_ms.bat命令6、nmake -f ms tdll.mak7、nmake -f ms t.mak编译后在openssl解压目录下执行,完成编译后。输出的文件在out32dll (6), out32 (7)里面,包括应用程序的可执行文件、lib文件和dll文件注意:在运行第五步时,cl编译器会抱怨说.cryptodesenc_read.c文件的read是The POSIX name for this item is deprecated(不被推荐的),建议使用_read。呵呵,我可不想将OpenSSL中的所有的read函数修改为_read。再看cl的错误代码error C2220,于是上MSDN上查找:warning treated as error - no object file generated/WX tells the compiler to treat all warnings as errors. Since an error occurred, no object or executable file was generated.是由于设置了/WX选项,将所有的警告都作为错误对待,所以。。。于是打开OpenSSL目录下的MS目录下的ntdll.mak文件,将CFLAG的/WX选项去掉,存盘。。。继续执行nmake -f ms tdll.mak=================================一、编译并安装OpenSSL1、按照标准步骤从源代码编译安装OpenSSL 在编译OpenSSL前,需要正确安装Perl,因为在编译OpenSSL时需要使用到该程序。 下载最新版本的Perl然后安装之。 下载最新版本的OpenSSL 然后将源码解压缩到某个目录(如 C:openssl-0.9.8j)中。 进入openssl源码目录。 cd c:openssl-1.0.1e 以下为参照该目录下的文件INSTALL.W32的执行过程: 运行configure: perl Configure VC-WIN32 创建Makefile文件: msdo_ms.bat 编译动态库: nmake -f ms tdll.mak 编译静态库: nmake -f ms t.mak 测试动态库: nmake -f ms tdll.mak test 测试静态库: nmake -f ms t.mak test 安装动态库: nmake -f ms tdll.mak install 安装静态库: nmake -f ms t.mak install 清除上次动态库的编译,以便重新编译: nmake -f ms tdll.mak clean 清除上次静态库的编译,以便重新编译: nmake -f ms t.mak clean2、如果嫌麻烦,不想编译,可以直接用别人做好的windows OpenSSL 安装包(我用的是0.9.8j版), 可以下载 OpenSSL for Windows,直接安装。P.S. OpenSSL for Windows 的源代码有一些数据类型和VC6的编译器不兼容,我发现的不兼容的数据类型如下:在OpenSSL安装目录的下的include/bn.h文件中,将 #define BN_ULLONG unsigned long long #define BN_ULONG unsigned long long #define BN_LONG long long 分别修改为: #define BN_ULLONG ULONGLONG #define BN_ULONG ULONGLONG #define BN_LONG LONGLONG 否则,会出现编译错误。二、使用OpenSSL 在VC中配置使用以上的函数库: 点击菜单:Tools -> Options,弹出对话框"Options",在该对话框中选择"Directories"标签。 在"Show directories for:"的"Include files"选项中新增目录"C:opensslinclude"; "Library files"选择中新增目录"C:openssllib"。 然后在需要链接OpenSSL函数库的工程中加入如下两句: #pragma comment(lib, "ssleay32.lib") #pragma comment(lib, "libeay32.lib") 其作用是将OpenSSL所需的库导入工程中。三、问题 我在链接OpenSSL的静态函数库时遇到类似以下的问题: Linking... msvcrt.lib(MSVCRT.dll) : error LNK2005: _strchr already defined in libcmtd.lib(strchr.obj) ... 这是由于OpenSSL的静态函数库使用的是了VC的多线程DLL的Release版本,而我的程序使用了多线程静态链接的Release版本。 调整OpenSSL的静态函数库使用的库函数版本即可,调整过程如下: 编辑文件 ms t.mak,将该文件第19行 "CFLAG= /MD /Ox /O2 /Ob2 /W3 /WX /Gs0 /GF /Gy /nologo -DOPENSSL_SYSNAME_WIN32 -DWIN32_LEAN_AND_MEAN -DL_ENDIAN -DDSO_WIN32 -D_CRT_SECURE_NO_DEPRECATE -D_CRT_NONSTDC_NO_DEPRECATE /Fdout32 -DOPENSSL_NO_CAMELLIA -DOPENSSL_NO_SEED -DOPENSSL_NO_RC5 -DOPENSSL_NO_MDC2 -DOPENSSL_NO_TLSEXT -DOPENSSL_NO_KRB5 -DOPENSSL_NO_DYNAMIC_ENGINE" 中的"/MD"修改为"/MT"。然后重新编译安装OpenSSL即可。四、附录:在VC中对C/C++ 运行时库不同版本编译指令说明 《在VC中对C/C++ 运行时库不同版本编译指令说明》一文中详细介绍了连接不同版本库的编译指令如下: C Runtime Library: /MD MSVCRT.LIB 多线程DLL的Release版本 /MDd MSVCRTD.LIB 多线程DLL的Debug版本 /MT LIBCMT.LIB 多线程静态链接的Release版本 /MTd LIBCMTD.LIB 多线程静态链接的Debug版本 /clr MSVCMRT.LIB 托管代码和非托管代码混合 /clr:pure MSVCURT.LIB 纯托管代码 C++ Standard Library: /MD MSVCPRT.LIB 多线程DLL的Release版本 /MDd MSVCPRTD.LIB 多线程DLL的Debug版本 /MT LIBCPMT.LIB 多线程静态链接的Release版本 /MTd LIBCPMTD.LIB 多线程静态链接的Debug版本===============================================一 配置编译参数 配置编译参数是进行OpenSSL编译的第一步,这一步可以确定系统的环境,使用什么编译器,默认安装路径以及其他一些选项.步骤如下:1.安装perl:下载ActivePerl-5.8.8.822-MSWin32-x86-280952.msi,然后点击msi文件进行安装!2..配置编译参数:下载openssl-1.0.1e.tar.gz,解压.vc:首先在C:Program FilesMicrosoft Visual Studio .NET 2010VC10in目录下执行vcvars32.bat,然后在解压后的openssl-1.0.1e目录,执行命令配置编译参数:perl Configure VC-WIN32 bc:在解压后的openssl-0.9.8g目录下执行:perl Configure BC-32二 生成批处理文件 在使用configure脚本配置好的编译参数后,就可以使用批处理命令来生成编译脚本.生成编译脚本根据采用编译器的不同通常使用不同的批处理文件.就目前来说,使用vc编译的时候有三种选择:do_ms,do_masm和do_nasm来创建一系列编译脚本文件,即.mak脚本.步骤如下:vc:在openssl-1.0.1e目录下,执行命令来批处理文件:do_ms,do_masm和do_nasmbc:1.下载nsm09839.zip微软汇编编译器,解压,拷贝到c:/windows目录下,修改名称为nasmw.exe;2.在openssl-1.0.1e目录下,执行命令来批处理文件:msdo_nasm三 代码编译vc:完成上面步骤后,可以看到两个关键脚本文件:nt.mak和ntdll.mak.如果我们需要编译后的OpenSSL库是支持动态DLL形式的,那么应该使用ntddll.mak文件进行编译,这样编译完成我们会得到四个与OpenSSL的API库有关文件:ssleay32.lib,libeay32.lib,ssleay32.dll和libeay32.dll.执行的编译命令形式如下:nmake -f ms tdll.mak如果不希望以动态库的形式使用OpenSSL,那么可以使用nt.mak文件进行编译.这样编译后使用OpenSSL的时候,回直接将代码链接进我们的程序里面.执行命令如下:nmake -f ms t.makbc:执行命令来完成代码编译:make -f mscb.mak四 ELSE1) 测试动态库: nmake -f ms tdll.mak test 测试静态库: nmake -f ms t.mak test 安装动态库: nmake -f ms tdll.mak install 安装静态库: nmake -f ms t.mak install 清除上次动态库的编译,以便重新编译: nmake -f ms tdll.mak clean 清除上次静态库的编译,以便重新编译: nmake -f ms t.mak clean2) 使用OpenSSL 在VC中配置使用以上的函数库: 点击菜单:Tools -> Options,弹出对话框"Options",在该对话框中选择"Directories"标签。 在"Show directories for:"的"Include files"选项中新增目录"C:opensslinclude";"Library files"选择中新增目录"C:openssllib"。 然后在需要链接OpenSSL函数库的工程中编译时加入"libeay32.lib"就可以了。
2023-08-02 01:48:361

openssl有什么方法可以优化加解密

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788#include<stdio.h>#include<stdlib.h>#include<string.h>#include<openssl/rsa.h>#include<openssl/engine.h>int main(int argc, char* argv[]){printf("openssl_test begin ");RSA* rsa=NULL;char originstr[]="hello "; //这是我们需要加密的原始数据//allocate RSA structure,首先需要申请一个RSA结构题用于存放生成的公私钥,这里rsa就是这个结构体的指针rsa = RSA_new();if(rsa==NULL){printf("RSA_new failed "); return -1;}//generate RSA keysBIGNUM* exponent;exponent = BN_new(); //生成RSA公私钥之前需要选择一个奇数(odd number)来用于生成公私钥if(exponent ==NULL){printf("BN_new failed "); goto FAIL1;}if(0==BN_set_word(exponent,65537)) //这里选择奇数65537{printf("BN_set_word failed "); goto FAIL1;}//这里modulus的长度选择4096,小于1024的modulus长度都是不安全的,容易被破解if(0==RSA_generate_key_ex(rsa,4096,exponent,NULL)) {printf("RSA_generate_key_ex failed "); goto FAIL; }char* cipherstr = NULL;//分配一段空间用于存储加密后的数据,这个空间的大小由RSA_size函数根据rsa算出cipherstr = malloc(RSA_size(rsa)); if(cipherstr==NULL){printf("malloc cipherstr buf failed ");goto FAIL1;}//下面是实际的加密过程,最后一个参数padding type,有以下几种。 /*RSA_PKCS1_PADDINGPKCS #1 v1.5 padding. This currently is the most widely used mode.RSA_PKCS1_OAEP_PADDINGEME-OAEP as defined in PKCS #1 v2.0 with SHA-1, MGF1 and an empty encoding parameter. This mode is recommended for all new applications.RSA_SSLV23_PADDINGPKCS #1 v1.5 padding with an SSL-specific modification that denotes that the server is SSL3 capable.RSA_NO_PADDINGRaw RSA encryption. This mode should only be used to implement cryptographically sound padding modes in the application code. Encrypting user data directly with RSA is insecure.*/ //这里首先用公钥进行加密,选择了RSA_PKCS1_PADDINGif(RSA_size(rsa)!=RSA_public_encrypt(strlen(originstr)+1,originstr,cipherstr,rsa,RSA_PKCS1_PADDING)){printf("encryption failure ");goto FAIL2;}printf("the original string is %s ",originstr);printf("the encrypted string is %s ",cipherstr);//Now, let"s decrypt the string with private key//下面来用私钥解密,首先需要一个buffer用于存储解密后的数据,这个buffer的长度要足够(小于RSA_size(rsa))//这里分配一个长度为250的字符数组,应该是够用的。char decrypted_str[250];int decrypted_len;if(-1=(decrypted_len=RSA_private_decrypt(256,cipherstr,decrypted_str,rsa,RSA_PKCS1_PADDING))){printf("decryption failure ");goto FAIL2;}printf("decrypted string length is %d,decryped_str is %s ",decrypted_len,decrypted_str);FAIL2:free(cipherstr);FAIL1:BN_free(exponent);FAIL:RSA_free(rsa);return 0;}以上是源代码,下面使用下面的编译命令在源码所在路径下生成可执行文件 gcc *.c -o openssl_test -lcrypto -ldl -L/usr/local/ssl/lib -I/usr/local/ssl/include其中,-lcrypto和-ldl是必须的,前者是OpenSSL中的加密算法库,后者是用于成功加载动态库。
2023-08-02 01:48:441

openssl 证书操作,输入扩展项的OID, 返回扩展项中的值

使用VS2005下的Visual Studio 2005 Command Prompt进入控制台模式(这个模式会自动设置各种环境变量)、解压缩openssl的包,进入openssl的目录、perl configure VC-WIN32尽量在这个目录下执行该命令,否则找不到Configure文件,或者指定完整的Configure文件路径。、msdo_ms在解压目录下执行msdo_ms命令、nmake -f ms tdll.mak编译后在openssl解压目录下执行,完成编译后。输出的文件在out32dll里面,包括应用程序的可执行文件、lib文件和dll文件注意:在运行第五步时,cl编译器会抱怨说.cryptodesenc_read.c文件的read是The POSIX name for this item is deprecated(不被推荐的),建议使用_read。呵呵,我可不想将OpenSSL中的所有的read函数修改为_read。再看cl的错误代码 error C2220,于是上MSDN上查找:warning treated as error - no object file generated/WX tells the compiler to treat all warnings as errors. Since an error occurred, no object or executable file was generated.是由于设置了/WX选项,将所有的警告都作为错误对待,所以。。。于是打开OpenSSL目录下的MS目录下的ntdll.mak文件,将CFLAG的/WX选项去掉,存盘。
2023-08-02 01:49:041

如何查看openssl 加密算法

使用VS2005下的Visual Studio 2005 Command Prompt进入控制台模式(这个模式会自动设置各种环境变量)、解压缩openssl的包,进入openssl的目录、perl configure VC-WIN32尽量在这个目录下执行该命令,否则找不到Configure文件,或者指定完整的Configure文件路径。、msdo_ms在解压目录下执行msdo_ms命令、nmake -f ms tdll.mak编译后在openssl解压目录下执行,完成编译后。输出的文件在out32dll里面,包括应用程序的可执行文件、lib文件和dll文件注意:在运行第五步时,cl编译器会抱怨说.cryptodesenc_read.c文件的read是The POSIX name for this item is deprecated(不被推荐的),建议使用_read。呵呵,我可不想将OpenSSL中的所有的read函数修改为_read。再看cl的错误代码 error C2220,于是上MSDN上查找:warning treated as error - no object file generated/WX tells the compiler to treat all warnings as errors. Since an error occurred, no object or executable file was generated.是由于设置了/WX选项,将所有的警告都作为错误对待,所以。。。于是打开OpenSSL目录下的MS目录下的ntdll.mak文件,将CFLAG的/WX选项去掉,存盘。
2023-08-02 01:49:171

codeblocks里面怎么用openssl

:1、打开Codeblocks软件。 2、点击新建按钮,选择File...。 3、选择C/C++source,点击Go。 4、点击Next。 5、根据需求选择C或C++,此处以C为例。 6、点击路径选择按钮并设置文件名,确认后点击Finish按钮。
2023-08-02 01:49:391