导航:首页 > 证书转让 > openssl签名证书

openssl签名证书

发布时间:2021-09-14 12:31:38

Ⅰ 用openssl验证证书和私钥是否有效

证书与私钥是否有效验证,可以在线验证:网页链接

SSL证书签发与续费办理:网页链接

Ⅱ 如何使用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 request

openssl req -new -key prvtkey.pem -out cert.csr

openssl 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.pem

cacert.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/MyCA
certificate = $dir/cacert.pem
database = $dir/index.txt
new_certs_dir = $dir/certs
private_key = $dir/private/cakey.pem
serial = $dir/serial

default_crl_days= 7
default_days = 365
default_md = md5

policy = myca_policy
x509_extensions = certificate_extensions

[ myca_policy ]
commonName = supplied
stateOrProvinceName = supplied
countryName = supplied
emailAddress = supplied
organizationName= supplied
organizationalUnitName = 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 = 2048
default_keyfile = /var/MyCA/private/cakey.pem
default_md = md5
prompt = no
distinguished_name = root_ca_distinguished_name
x509_extensions = root_ca_extensions
[ root_ca_distinguished_name ]
commonName = My Test CA
stateOrProvinceName = HZ
countryName = CN
emailAddress = [email protected]
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的内容都发生了改变。

Ⅲ 用openssl生成的ssl证书和付费的有什么区别

用openssl生成的SSL证书即自签名证书,存在安全隐患,而且不受浏览器信任。最好从正规第三方证书颁发机构去申请,还不用自己弄代码那么复杂,GDCA可以申请各类型SSL证书,免费付费的都有,看你需要。

Ⅳ 什么是自签名SSL证书

自己生成的SSL证书,不是CA机构颁发的SSL证书,称之为自签名证书。

解释原因:回

  1. 受信任的SSL证书:会答被浏览器信任认可,安全加密服务与安全扫描相关CA配套服务。
  2. 自签署的SSL证书:不会被浏览器信任,数据被泄漏级劫持安全漏洞安全风险较高。

自签名主要风险:

  1. 浏览器的地址栏会提示风险不安全网站。

  2. 小程序或APP无法应用与支持。

  3. 无法实现信用与接口交易行为。

  4. 网页会被劫持,被强制插入广告或跳转到其它网页。

  5. 用户数据明文传输,隐私信息被中间劫持。

  6. 极容易被劫持和钓鱼攻击。

自签名安全隐患:

  1. 自签证书最容易受到SSL中间人攻击

  2. 自签证书支持不安全的SSL通信重新协商机制

  3. 自签证书支持非常不安全的SSL V2.0协议

  4. 自签证书没有可访问的吊销列表

  5. 自签证书使用不安全的1024位非对称密钥对

  6. 自签证书证书有效期太长

  7. 自签证书普遍存在严重的安全漏洞,极易受到攻击

解决方法:Gworg申请可信SSL证书。

Ⅳ linux怎么用openssl生成自签名证书

这个证书中的签名与这个私钥是对应关系,证书中的公钥和私钥也是匹配的,可以通过证书中的公钥对证书进行验签

Ⅵ openssl 自签名证书怎麽配置到windows server 2008 r2 tomcat服务器上

用php的openssl_x509_parse函数解析用户证书user.cer和根证书server.cer ,在比较用户证书与根证书的颁发机构等信息,如果是相同的则说明用户证书是根证书颁发,即为合法证书,反之则不合法

Ⅶ keytool和openssl的区别

在数字证书使用过程中,会遇到签发证书问题,一般来说,有3个解决方法:
1.交由受信任的第三方证书颁发机构签名;
2.自签名;
3.自制CA证书并用其签名。
对于上线运营的网站来说,第一个方案是首选,因为只有这样浏览器才不会报警。过去买证书很贵,现在倒是有免费的了,比如IE和Firefox都支持的StartSSL。
不同的证书颁发机构对于证书生成多少都会有自己的要求,所以本文主要讨论后两种方案。
下面用OpenSSL生成CA签名的证书,用Keytool生成CSR(Certificate Signing Request)。

一、准备
1)在工作目录下新建目录 demoCA、demoCA/private、demoCA/newcerts
2) 在demoCA建立一个空文件 index.txt
3) 在demoCA建立一个文本文件 serial, 没有扩展名,内容是一个合法的16进制数字,例如 0000
4) 配置环境变量PATH,加入%JAVA_HOME%/bin,本文用的JavaSDK1.6

二、生成CA的自签名证书
openssl req -new -x509 -keyout ca.key -out ca.cer -days 3650 -config openssl.cnf
req命令表示创建证书,new参数表示创建私钥而不是从已存在的文件中读取,nodes参数表示不加密私钥。如果不添加nodes参数,以后每次使用私钥时都必须输入密码(如Apache每次重启)
openssl.cnf在openssl压缩包的share目录下

输入证书信息时,Country Name填入CN,Common Name输入单位名称,即最后显示的颁发者
三、生成server端证书
这步使用的是JDK的keytool工具
1) 生成KeyPair生成密钥对
keytool -genkeypair -alias server -validity 365 -keyalg RSA -keysize 1024 -keypass 123456 -storepass 123456 -keystore server.keystore
输入common name时,要和服务器的域名保持一致。
2) 生成证书签名请求
keytool -certreq -alias server -sigalg MD5withRSA -file server.csr -keypass 123456 -storepass 123456 -keystore server.keystore

四、使用OpennSSL签发证书
openssl ca -in server.csr -out server.cer -cert ca.cer -keyfile ca.key -notext -config openssl.cnf
其中-notext表示不要把证书文件的明文内容输出到文件中去,否则在后面用keytool导入到keystore时会出错。
在签名时,如果报“The stateOrProvinceName field needed to be the same in the CA certificate”,是因为在openssl.cfg中的policy_match里面的前三个都选了match,修改成
stateOrProvinceName = optional
organizationName = optional
就可以了

五、导回签发后的证书
1) 导入信任的CA根证书到keystore
keytool -importcert -v -trustcacerts -alias ca_root -file ca.cer -storepass 123456 -keystore server.keystore
2) 把CA签名后的server端证书导入keystore
keytool -importcert -v -alias server -file server.cer -storepass 123456 -keystore server.keystore
3) 查看server端证书
keytool -list -v -keystore server.keystore
可以看到tomcat_server的证书链长度是2
报failed to update database
TXT_DB error number 2
错误时
产生的原因是:
This thing happens when certificates share common data. You cannot have two certificates that look otherwise the same.

方法一:
修改demoCA下 index.txt.attr,将
unique_subject = yes 改为
unique_subject = no

方法二:
删除demoCA下的index.txt,并再touch下
rm index.txt
touch index.txt

方法三:
将 common name设置成不同的

单独生成私钥
openssl genrsa -des3 -out class1.key

生成请求文件
openssl req -new -days 365 -key class1.key -out class1.csr -config openssl.cnf

如果运行签发的证书再做为CA,那么在ca签名时加上
-extensions v3_ca

Ⅷ openssl证书生成工具如何生成证书链

2. 生成Root CA私钥与证书: .1 先生成RootCA私钥--》使用私钥生成CSR--》生成自签名根证书。用来给二级CA证书签名。 3. 生成二级CA 私钥与证书:(假如有两个二级CA, 分别负责管理服务器端和客户端证书) 3.1 先生成ServerCA私钥--》使用私钥生成CSR--》使用根证书签名生成二级证书。用来给服务器证书签名。 3.2 先生成ClientCA私钥--》使用私钥生成CSR--》使用根证书签名生成二级证书。用来给客户端证书签名。 4. 生成服务器端与客户端的私钥与证书: 4.1 先生成ServerA私钥--》使用私钥生成CSR--》使用ServerCA证书签名生成三级证书。 4.2 先生成ClientA私钥--》使用私钥生成CSR--》使用ClientCA证书签名生成三级证书。 4.3 先生成ClientB私钥--》使用私钥生成CSR--》使用ClientCA证书签名生成三级证书 。。。。可以生成N个客户端证书证书结构:RootCA||-------ServerCA| || |--------ServerA||-------ClientCA||--------ClientA||--------ClientB||--------...| 5. 导出RootCA的根证书、服务器端和客户端的私钥和证书。 导出时都使用pem格式。 RootCA.pem-------根证书(PEM ) ServerA.pem------服务器端证书(PEM with Certificate chain) ClientA.pem------客户端证书(PEM with Certificate chain) ClientB.pem------客户端证书(PEM with Certificate chain) ServerAKey.pem------服务器端私钥(PEM ) ClientAKey.pem------客户端私钥(PEM ) ClientBKey.pem------客户端私钥(PEM ) 6.下面是最重要的一步:生成需要使用的JKS文件。keytool工具不能导入私钥,需要利用到weblogic 提供的一个工具,需要把weblogic.jar加到CLASSPATH。 6.1 生成服务器和客户端的信任证书库: keytool -import -alias rootca -file RootCA.pem -keystore trust.jks 6.2 生成服务器端身份密钥库: java utils.ImportPrivateKey -keystore servera.jks -storepass 123456 -storetype JKS -keypass 123456 -alias servera -certfile ServerA.pem -keyfile ServerAKey.pem 6.3 生成客户端身份密钥库: java utils.ImportPrivateKey -keystore clienta.jks -storepass 123456 -storetype JKS -keypass 123456 -alias clienta -certfile ClientA.pem -keyfile ClientAKey.pem ...生成其他客户端身份密钥库 7. keytool -list -v -keystore clienta.jks (servera.jks) 可以查看其中的证书链关系。

Ⅸ linux下使用openssl检测PE文件数字签名的证书是否有效

第一个坑: 有效期
windows在判断证书是否有效时不检测证书的有效期, 即使该证书超过有效期好几年了, 只要没有被吊销, 微软仍然认为它是有效的. 但在 openssl 提供的 X509_verify_cert 函数会验证证书的有效期, 因此需要注释掉验证有效期的那部分代码并重新编译 openssl...
OK, 从 openssl 官网 上下载最新的版本, 好吧, 现在还是刚刚修复 Heartbleed 漏洞的 1.0.1g 版本...
下载, 解压, 看下 INSTALL 文档, 先试试可以编译不:
./config
make

运气不错, 不用安装什么依赖直接编译成功. 将代码根目录产生的 libcrypto.a 添加到项目中测试下, OK, 可以使用, 下面开始折腾了~
在 crypto/x509/x509_vfy.c 的 153 行找到 X509_verify_cert 函数(在线查看), 局部变量 ok 缓存每一步验证是否通过, 它依次调用了:
check_issued
check_chain_extensions
check_name_constraints
check_trust
check_revocation
internal_verify
check_policy

其中 internal_verify (在线查看)验证了证书的有效期, 进入这个函数, 在 1654 行找到这个代码:
ok = check_cert_time(ctx, xs);
if (!ok)
goto end;

看看 check_cert_time 函数, 确认是检查 notBefore 和 notAfter, 因此将上面三行代码注释掉, 验证证书时就不会检测有效期了.
然后就是重新编译 openssl, 将 libcrypto.a 集成到项目里了~
第二个坑: unhandled critical extension
搜索了下, 在 openssl 官网上找到这个:
-ignore_critical
Normally if an unhandled critical extension is present which is not supported by OpenSSL the certificate is rejected (as required by RFC5280). If this option is set critical extensions are ignored.

原来是当openssl遇到证书中有它不支持的 未处理的关键扩展(unhandled critical extension ?) 时, 它会拒绝加载该证书.
再搜索下 -ignore_critical, 在 verify.c 中找到如下代码片段:
else if (strcmp(*argv,"-ignore_critical") == 0)
vflags |= X509_V_FLAG_IGNORE_CRITICAL;

然后再使用 X509_STORE_set_flags 函数设置标志位:
X509_STORE *ctx;
...
X509_STORE_set_flags(ctx, vflags);

即可.
第三个坑: certificate signature failure
这个坑填不上了, openssl 说:
7 X509_V_ERR_CERT_SIGNATURE_FAILURE: certificate signature failure
the signature of the certificate is invalid.

在windows下导出证书文件, 直接用 openssl 验证, 在加载证书就会出错, PEM_read_bio_X509 返回为空....
第四个坑: A certificate was explicitly revoked by its issuer.
A certificate was explicitly revoked by its issuer. 是 Sysinternals 提供的工具sigcheck.exe 的检测结果, 把文件拎出来一看, 证书真的被撤销了...
OK, 只好根据证书上的 CRL Distribution Point(CRL 分发点) 提供的 URL 下载 撤销证书列表 文件, 然后在调用 X509_verify_cert 验证证书链之前, 设置填充被撤销的证书列表:
X509_CRL *d2i_X509_CRL_fp(FILE *fp, X509_CRL **crl); // 读取被撤销的证书列表

STACK_OF(X509_CRL) *sk_X509_CRL_new_null();
#define sk_X509_CRL_push(st, val) SKM_sk_push(X509_CRL, (st), (val)); // sk_X509_CRL_push(STACK_OF(X509_CRL) *crls, X509_CRL *crl);

void X509_STORE_CTX_set0_crls(X509_STORE_CTX *c, STACK_OF(X509_CRL) *sk); // 设置被撤销的证书列表

同时, 也要设置检查被撤销证书列表的标志位 X509_V_FLAG_CRL_CHECK, 然后再调用X509_verify_cert 验证证书链即可.
填了第四个坑后又引起了第五个坑(如何获取撤销证书列表)和第六个坑(设置检测撤销证书列表的标识位后, 如果该证书没有撤销证书列表则直接报错)...
第五个坑: 获取撤销证书列表文件
证书上的 CRL Distribution Point(CRL 分发点) 属于扩展属性, 在 PKCS #7: Cryptographic Message Syntax V1.5 上没有相关介绍.
在 StackOverflow 上找到这个问答 Openssl - How to check if a certificate is revoked or not, 其中第二个回答说 CRL 是在 RFC 5280 中定义的, 除了证书中附带被撤销的证书列表以外还有使用 OCSP 协议的, 即使证书撤销列表也分为使用 URL分发点和 LDAP DNs(???)提供的, 目前先考虑使用 URL 作为 CRL分发点 的情况吧.
然而 openssl 没有提供直接获取 CRL 分发点 URL 的API, 那个回答说 Apache 的 mod_ssl 模块有本地 CRL 和 OCSP 检测的实现代码, 但没有说明哪里有检测使用 URL 作为 CRL分发点 的实现方法.
然后又在 frank4dd.com上找到这个代码 certextensions.c, 他给出了一个如何使用 openssl 从 X.509v3 版本的证书文件中提取扩展内容的示例程序, 太感谢 Frank4DD 这位仁兄了~~~
到这里后, 可以直接使用他的示例程序, 根据关键字 Full Name 和 URI 定位 CRL 分发点 的 URL, 也可以看看 openssl 是如何提取这个 URL 的, 然后自己实现一个接口.
如果自作孽使用第二种方法的话, 就编译个 debug 版的 openssl 库, 然后调试跟进X509V3_EXT_print 函数, 一步一步的向下走, 直到走到 GENERAL_NAME_print 函数, 这里就是终点了...然后就知道了 CRL 分发点 的 URL 的编号为 6, 也就是 GEN_URI, 直接取结果吧.
第六个坑: CRL有效期
在windows环境下每次查看PE文件的数字签名时, windows 都会从 CRL分发点 下载吊销证书列表做验证,一般来说, 每个 CRL的有效期是非常短的,大概只有5~20 天的有效期吧, 然而我们不可能像 windows 一样每次查看数字签名时就从CRL分发点下载最新的吊销列表.
另外, windows 遇到过期的 CRL 时不会产生证书链无效的结果, 但 openssl 在遇到过期的 CRL 时就会导致证书链验证失败, 因此在加载和验证 CRL 时, 要忽略 CRL 的有效期.
分析 openssl 源代码, X509_verify_cert 调用 check_revocation , 之后调用 check_cert , 然后再调用 check_crl , 在这个函数里有检测 CRL 有效期的代码:
if (!(ctx->current_crl_score & CRL_SCORE_TIME))
{
ok = check_crl_time(ctx, crl, 1);
if (!ok)
goto err;
}

将其注释掉即可忽略检测 CRL 有效期.
第七个坑: CRL 列表为空导致 openssl 认为没有加载 CRL

9 初始化顺序
10 证书名: key_id

Ⅹ 如何用 openssl 生成RSA双密匙;签名证书;加密文件邮件

openssl 的功能:
* 生成RSA,DSA双密匙(还可以再给他们签名)
* 生成X509 证书
* 计算印章(MD5,SHA,,RIPEMD160)用于加密大文件
*加密,解密 (算法有 DES, IDEA,RC2 , RC4, Blowfish...)
*SSL 服务器端/客户端测试
* 处理签名或加密了的邮件

阅读全文

与openssl签名证书相关的资料

热点内容
普通护照的期限 浏览:766
发明文言文 浏览:523
国培线下专题研修成果 浏览:577
马鞍山苏丛勇 浏览:109
人民的名义侵权问题 浏览:53
全椒到马鞍山汽车时刻表 浏览:899
logo可用字体版权 浏览:861
马鞍山中豪 浏览:929
tefl证书在哪里考 浏览:564
小陆离与成果 浏览:654
迷你世界冒险转化创造 浏览:680
2014纳税申报期限 浏览:274
lol2016猴年限定皮肤 浏览:48
陕西房地产估价师证书领取地点 浏览:140
证书小知识 浏览:431
马鞍山何兵 浏览:376
设计创作版权合作合同范本 浏览:482
省知识产权局侯社教 浏览:51
道闸3C证书 浏览:820
土地使用权期满地上建筑物 浏览:455