primekey证书服务器,使用 OpenSSL 制作 ECDH 密钥交换证书
前言
对于 ECDH,Wikipedia 如下描述:
Elliptic curve Diffie–Hellman (ECDH) is an anonymous key agreement protocol that allows two parties, each having an elliptic curve public–private key pair, to establish a shared secret over an insecure channel.
ECDH 是基于 ECC(Elliptic Curve Cryptosystems,椭圆曲线密码体制)的 DH( Diffie-Hellman)密钥交换算法。交换双方可以在不共享任何秘密的情况下协商出一个密钥。与 Diffie-Hellman 相比 ECDH 具有 ECC 的高强度、短密钥长度、计算速度快等优点。
由于 ECDH 每次用一个固定的 DH key, 导致不能向前保密(forward secrecy),安全性会降低,所以一般都是用 ECDHE(ECDH 的 ephemeral version)或其他版本的 ECDH 算法。
本文只对 ECDH 进行介绍,只为测试。
环境说明
CentOS 7.2(CentOS_7_x86_64_1151)
OpenSSL 1.0.2e
安装 OpenSSL
1.查看本机安装的版本
#openssl version
OpenSSL 1.0.1e-fips 11 Feb 2013
2.OpenSSL 应在1.0.2以上,这里使用 1.0.2e,去官网下载,源码安装一下,请根据实际情况更改下载地址。
#cd /usr/src
#wget https://www.openssl.org/source/openssl-1.0.2e.tar.gz
#tar -zxf openssl-1.0.2e.tar.gz
3.编译安装 OpenSSL
#cdopenssl-1.0.2e
#./config
#make
#make test
#make install
4.如果旧版本还在,可以先备份,并修改一个
#mv /usr/bin/openssl /root/
#ln -s /usr/local/ssl/bin/openssl /usr/bin/openssl
5.查看版本
# openssl version
OpenSSL 1.0.2e 3 Dec 2015
制作CA证书
ECDH 密钥交换算法,不能自签名,所以制作证书,需要一个 CA 进行颁发。
CA 要给别人颁发证书,首先自己得有一个作为根证书,我们得在一切工作之前修改好 CA 的配置文件、序列号、索引等等。这些参数都是在 openssl.cnf 里面配置的。
#vi /etc/pki/tls/openssl.cnf
openssl.cnf 配置文件中主要关注 [CA_default] 和 [policy_match] 规则
......
[ CA_default ]
dir = /etc/pki/CA # Where everything is keptcerts = $dir/certs # Where the issued certs are keptcrl_dir = $dir/crl # Where the issued crl are keptdatabase = $dir/index.txt # database index file.
#unique_subject = no # Set to 'no' to allow creation of # several ctificates with same subject.new_certs_dir = $dir/newcerts # default place for new certs.
certificate = $dir/cacert.pem # The CA certificateserial = $dir/serial # The current serial numbercrlnumber = $dir/crlnumber # the current crl number # must be commented out to leave a V1 CRLcrl = $dir/crl.pem # The current CRLprivate_key = $dir/private/cakey.pem# The private keyRANDFILE = $dir/private/.rand # private random number file......
......
# For the CA policy[ policy_match ]
countryName = match
stateOrProvinceName = optional
organizationName = optional
organizationalUnitName = optional
commonName = supplied
emailAddress = optional
......
1.先初始化 index.txt 和 serial 文件
#cd /etc/pki/CA/
#touchindex.txt serial
#echo01 > serial
2.生成 CA 的私钥(private key)
#cd /etc/pki/CA/
#openssl genrsa -out private/cakey.pem 2048
3.生成 CA 的证书(certificate),使用 req 命令生成自签证书
#openssl req -new -x509 -key private/cakey.pem -out cacert.pem
会提示输入一些内容,请按提示输入即可。
制作 ECDH 密钥交换的证书
将根证书拷贝到 $HOME 目录,省去输入目录的麻烦,本文只为示例作用。
#cd /etc/pki/CA/private/
#cpcakey.pem ~
#cd /etc/pki/CA/
#cpcacert.pem ~
#cd ~
1.生成 private key 之前,先查看一下那种椭圆曲线可以使用
#openssl ecparam -list_curves
结果如下,OpenSSL 1.0.2e 支持很多。
......secp521r1 : NIST/SECG curve over a 521 bit prime field
prime192v1: NIST/X9.62/SECG curve over a 192 bit prime field
prime192v2: X9.62 curve over a 192 bit prime field
prime192v3: X9.62 curve over a 192 bit prime field
prime239v1: X9.62 curve over a 239 bit prime field
prime239v2: X9.62 curve over a 239 bit prime field
prime239v3: X9.62 curve over a 239 bit prime field
prime256v1: X9.62/SECG curve over a 256 bit prime field......
本例使用 prime256v1
2.生成 ECDH 的私钥(private key)
#openssl ecparam -out ecparam.pem -name prime256v1
#openssl genpkey -paramfile ecparam.pem -out ecdhkey.pem
3.生成 ECDH 的公钥(public key)
#openssl pkey -in ecdhkey.pem -pubout -out ecdhpubkey.pem
4.生成 CSR(Certificate Request)文件,CSR 是需要自签名的,不能使用 ECDH 算法,因为 ECDH 不是签名算法,本例使用RSA算法生成。
#openssl genrsa -out rsakey.pem 1024
#openssl req -new -key rsakey.pem -out ecdhrsacsr.pem
5.最后,使用 ECDH 的公钥和 RSA 的 CSR 制作 ECDH 证书,由于 ECDH 不是自签名算法,不能自签名生成。本例使用刚才制作的 CA 证书生成。
#openssl x509 -req -in ecdhrsacsr.pem -CAkey cakey.pem -CA cacert.pem -force_pubkey ecdhpubkey.pem -out ecdhcert.pem -CAcreateserial
本例后来使用的 RSA 算法生成的 CSR 文件,所以生成的 ecdhcert.pem 支持 ECDH_RSA 的密码套件。
目前生成的证书列表如下:
cakey.pem# CA private key(RSA算法的)
cacert.pem# CA certificate
ecparam.pem# EC Parameters
ecdhkey.pem# ECDH private key
ecdhpubkey.pem# ECDH public key
rsakey.pem# RSA private key(用于请求证书的)
ecdhrsacsr.pem# RSA 的 CSR文件
ecdhcert.pem# ECDH certificate(RSA算法的)
验证 ECDH
使用 OpenSSL 测试
1.服务端
#openssl s_server -cert ecdhcert.pem -key ecdhkey.pem -port 8888
2.客户端 (需要打开一个新的Terminal进行)
#cd ~
#vi test_ciphers
输入如下内容
#!/usr/bin/env bash
# OpenSSL requires the port number.
SERVER=127.0.0.1:8888
DELAY=1
ciphers=$(openssl ciphers 'ECDH:eNULL' | sed -e 's/:/ /g')
echoObtaining cipher list from $(openssl version).
forcipher in ${ciphers[@]}
doecho -n Testing $cipher...
result=$(echo -n | openssl s_client -cipher "$cipher" -connect $SERVER 2>&1)
if [[ "$result" =~ ":error:" ]] ; thenerror=$(echo -n $result | cut -d':' -f6)
echoNO \($error\)
else
if [[ "$result" =~ "Cipher is${cipher}" || "$result" =~ "Cipher :" ]] ; thenechoYES
elseechoUNKNOWN RESPONSE
echo $result
fi
fisleep $DELAY
done
此脚本会验证包含 ECDH 密钥交换算法的密码套件的支持程度,可以修改
ciphers=$(openssl ciphers 'ECDH:eNULL' | sed -e 's/:/ /g')
保存文件后,更改文件为可执行
#chmod +x test_ciphers
执行测试
#./test_ciphers
结果如下
Obtaining cipher list from OpenSSL 1.0.2e 3 Dec 2015.
Testing ECDHE-RSA-AES256-GCM-SHA384...NO (sslv3 alert handshake failure)
Testing ECDHE-ECDSA-AES256-GCM-SHA384...YES
Testing ECDHE-RSA-AES256-SHA384...NO (sslv3 alert handshake failure)
Testing ECDHE-ECDSA-AES256-SHA384...YES
Testing ECDHE-RSA-AES256-SHA...NO (sslv3 alert handshake failure)
Testing ECDHE-ECDSA-AES256-SHA...YES
Testing AECDH-AES256-SHA...NO (sslv3 alert handshake failure)
Testing ECDH-RSA-AES256-GCM-SHA384...YES
Testing ECDH-ECDSA-AES256-GCM-SHA384...NO (sslv3 alert handshake failure)
Testing ECDH-RSA-AES256-SHA384...YES
Testing ECDH-ECDSA-AES256-SHA384...NO (sslv3 alert handshake failure)
Testing ECDH-RSA-AES256-SHA...YES......
可以发现,包含 ECDH-RSA 的密码套件的,都是通过的。
参考资料
primekey证书服务器,使用 OpenSSL 制作 ECDH 密钥交换证书相关推荐
- 使用openssl制作https的证书
1.前言 现在的web应用对安全越来越重视了,很多应用必须采用https来传输数据.但是https必须要有证书,在开发和测试环境一般我们在没条件采用ca签发的可信证书的情况下,我们可以使用openss ...
- eap wifi 证书_用openssl为EAP-TLS生成证书(CA证书,服务器证书,用户证书)
我用的是openssl-1.0.2k. 脚本支持生成RSA,ECC证书. 运行时带参数指定类型. -->开始.按以下路径建立文件,脚本.ssl_create-cert-v0.4.7z ssl_c ...
- Ubuntu18.04 使用 openssl制作自签名证书
执行"openssl verison",判断系统是否已安装openssl,若没有安装,请使用apt安装openssl. 一.图解自签名过程 二.关于 CRT PEM KEY CST ...
- asn1 pem pfx格式证书_Linux使用openssl管理自签名证书保障网络安全
请关注本头条号,每天坚持更新原创干货技术文章. 如需学习视频,请在微信搜索公众号"智传网优"直接开始自助视频学习 1. 前言 本文主要介绍如何在Linux系统上使用OpenSSL命 ...
- https证书服务器怎么完成部署?
HTTPS是一种由http协议和SSL证书一同搭建的网络协议,也被称为https证书.部署了https证书服务器的网站也又更高的安全以及可信度.随着人们对于网络安全意识的提高,也使得https证书服务 ...
- Centos搭建简单的证书机构,CA证书服务器
CA认证: CA认证,即电子认证服务 [1] ,是指为电子签名相关各方提供真实性.可靠性验证的活动. 证书颁发机构(CA, Certificate Authority)即颁发数字证书的机构.是负责发 ...
- 安装win2008r2、域控、IIS、证书服务器、部署exchange2010
1/45 安装win2008r2.域控.IIS.证书服务器.部署exchange2010目的是最后完成exchange2010的部署,按照win2008r2---域控---IIS---证书服务器--- ...
- 使用证书保护网站--兼谈证书服务器吊销列表的使用
现在许多企业与个人,都拥有属于自己的网站,并且发布在Internet供朋友.合作伙伴或其他人所访问,但是,在许多情况下,某些发布到Internet的网站,只想让指定的用户或指定的人来访问,那么应该怎么 ...
- 证书服务器 过期,iis7服务器证书过期如何换新的以及证书服务器
随着计算机的普及,越来越多的人都在使用计算机来工作,随之而来的就是计算机中遇到的各种各样的问题,因为毕竟不是每个人都是学习计算机出身的,而且对计算机的了解也不是特别的透彻,比如说怎样请求证书?服务器证 ...
最新文章
- JavaScript中常见的错误,你犯了几个?
- Revit二次开发之“取得所选元素的族名称”
- maven Ubuntu14.04 安装
- angularjs 验证用户名是否重复
- iphone11边框喇手问题_iPhone12手感如何 直角边框真的会割手吗?
- Tensorflow API + OpenCV (Real Time Object Detection)
- Eclipse 中侧边栏、控制台、Server打不开怎么办?
- springboot框架搭建
- Keil开发环境安装教程
- 聚类及DBSCAN 聚类算法
- mysql堆溢出_MySQL错误1436:线程堆栈溢出,带有简单查询
- 华为存储发展史:从筚路蓝缕到星辰大海
- C语言数字图像处理---ZPHOTOENGINE算法库使用
- 基于TX2的全向四轮小车搭建(一)
- Python每日一记127文本型数字转化为数值型数字(eval函数)
- OCX控件的问题以及解决方法
- VS2015 kb2919355 解决方法汇总
- 未来智能互联汽车长啥样
- Linux下对TF卡进行分区
- 四位数码管显示多位数字计时