版本:openssl-1.0.1e
/usr/local/nginx/demoCA/ # ca证书存放位置
/usr/local/nginx/conf/ssl/ #服务器证书存放位置
/home/samba/ca/ #存放要发布的证书
编译安装

1
2
3
4
5
6
tar zxvf openssl-1.0.1e.tar.gzcd openssl-1.0.1e
./confg --prefix=/usr/local/ssl shared zlib-dynamic enable-camelliamake && make installecho "/usr/local/ssl/lib/" >/etc/ld.so.conf.d/usr_local_ssl_lib.conf/sbin/ldconfig

CA 实现介绍
1.创建CA根中心用于签名
利用openssl的命令生成加密的CA根私钥( -keyout 指定),然后自己(-x509 参数)给自己签名,签名后的( -out 指定)文件即CA的公钥,用于验证CA私钥签名的证书

openssl req -new -x509 -passout pass:ca_password -newkey rsa:2048 -days 7305 -keyout /usr/local/nginx/demoCA/private/cakey.pem -config /usr/local/ssl/openssl.cnf -out /usr/local/nginx/demoCA/cacert.pem -subj '/C=CN/ST=ZHEJIANG/L=HANGZHOU/O=CAID/OU=CAID CA Center/CN=CAID ROOT CA/emailAddress=checaide@outlook.com'

2.创建用于服务器的CA证书
1)创建服务器私钥及给CA根请求其签名的csr文件

openssl req -new -passout pass:server_password -sha1 -newkey rsa:1024 -keyout /usr/local/nginx/demoCA/private/server.key -out /usr/local/nginx/demoCA/csr/client.csr -config /usr/local/ssl/openssl.cnf -subj '/C=CN/ST=ZHEJIANG/L=HANGZHOU/O=CAID/OU=CAID Web Services/CN=127.0.0.1/emailAddress=420400178@qq.com'

2)CA根用自己的私钥对.csr进行签名

openssl ca -passin pass:ca_password -days 3650 -config /usr/local/ssl/openssl.cnf -policy policy_match -extensions ssl_server -out /usr/local/nginx/demoCA/certs/server.pem -infiles /usr/local/nginx/demoCA/csr/client.csr

这样便生出服务器的私钥server.key,被CA私钥签名后的公钥server.pem ,CA根的公钥cacert.pem
在apache中设定SSL的配置指定参数就可以用CA对SSL连接进行验证
//* -subj 内参数可用于匹配验证连接PHP即可读取该信息 */

3.创建用于客户端的证书
1)同server-1

openssl req -new -passout pass:user_password -sha1 -newkey rsa:1024 -keyout /usr/local/nginx/demoCA/private/client_01001.key -out /usr/local/nginx/demoCA/csr/client.csr -config /usr/local/ssl/openssl.cnf -subj '/C=CN/ST=JIANGSU/L=CHANGZHOU/O=CAID/OU=CAID_01/CN=client_01001/emailAddress=CAID_2013@gmail.com'

2)同server-2,通过expect-shell脚本sgin.exp签名,免去交互

expect sgin.exp ca_password 365 policy_anything ssl_client client_01001

4.导出CA的公钥,客户端的私钥&被CA签名的公钥
1)导出CA的公钥

openssl x509 -in /usr/local/nginx/demoCA/cacert.pem -out /home/samba/ca/CA_Root.cer

2)导出客户端的私钥+被CA签名的公钥,文件被以pkcs12格式编码输出,import_password是客户端导入文件时的密码

openssl pkcs12 -passin pass:user_password -export -clcerts -in /usr/local/nginx/demoCA/certs/client_01001.pem -inkey /usr/local/nginx/demoCA/private/client_01001.key -passout pass:import_password -camellia256 -out /home/samba/ca/client_01001.pfx -name "luck_01001"

这样客户端拥有CA_Root.cer,client_01001.pfx。导入CA_Root.cer文件就可以验证CA签名的网站,导入client_01001.pfx文件网站就可以验证客户端身份

5.证书吊销
假设某客户端要取消其查看网站SSL保护的链接,则吊销他的证书即可
1)吊销已经签名的client_01001.pem

openssl ca -passin pass:ca_password -keyfile /usr/local/nginx/demoCA/private/cakey.pem -cert /usr/local/nginx/demoCA/cacert.pem -revoke /usr/local/nginx/demoCA/certs/client_01001.pem -config /usr/local/ssl/openssl.cnf

2)生成吊销证书列表crl.pem,用于服务器检测链接进入的证书是否可用

openssl ca -gencrl -keyfile /usr/local/nginx/demoCA/private/cakey.pem -cert /usr/local/nginx/demoCA/cacert.pem -out /usr/local/nginx/demoCA/crl.pem -config /usr/local/ssl/openssl.cnf -passin pass:ca_password

sgin.exp

#!/usr/bin/expectset passwd [lindex $argv 0]set days [lindex $argv 1]set policy [lindex $argv 2]set extension [lindex $argv 3]set name [lindex $argv 4]spawn /usr/local/ssl/bin/openssl ca -passin pass:$passwd -days $days -config /usr/local/ssl/openssl.cnf -policy $policy -extensions $extension -out /usr/local/nginx/demoCA/certs/$name.pem -infiles /usr/local/nginx/demoCA/csr/client.csr
expect {"y/n" { send "y\r";exp_continue }"y/n" { send "y\r" }}

ca-install.sh

#! /bin/bashrm -rf /usr/local/nginx/demoCA/ # ca证书存放位置rm -rf /usr/local/nginx/conf/ssl/ #服务器证书存放位置mkdir -p /home/samba/ca/ #存放要发布的证书mkdir -p /usr/local/nginx/conf/ssl/mkdir -p /usr/local/nginx/demoCA/{private,newcerts,crl,certs,csr,p12}touch /usr/local/nginx/demoCA/{serial,crlnumber,index.txt,private/.rand}#echo 0 > /usr/local/nginx/demoCA/index.txt echo 00 >/usr/local/nginx/demoCA/serialecho 00 >/usr/local/nginx/demoCA/crlnumber/usr/local/ssl/bin/openssl rand -out /usr/local/nginx/demoCA/private/.rand 1024#生成CA中心/usr/local/ssl/bin/openssl req -new -x509  -passout pass:ca_password -newkey rsa:2048 -keyout /usr/local/nginx/demoCA/private/cakey.pem -config /usr/local/ssl/openssl.cnf -out /usr/local/nginx/demoCA/cacert.pem -subj '/C=CN/ST=ZHEJIANG/L=HANGZHOU/O=CAID/OU=CAID CA Center/CN=CAID ROOT CA/emailAddress=checaide@outlook.com'#签名服务器相关/usr/local/ssl/bin/openssl req -new -passout pass:server_password -sha1 -newkey rsa:1024 -keyout /usr/local/nginx/demoCA/private/server.key -out /usr/local/nginx/demoCA/csr/client.csr -config /usr/local/ssl/openssl.cnf -subj '/C=CN/ST=ZHEJIANG/L=HANGZHOU/O=CAID/OU=CAID Web Services/CN=127.0.0.1/emailAddress=420400178@outlook.com'#使用sgin.exp脚本进行签名/usr/local/bin/expect sgin.exp ca_password 3650 policy_match ssl_server server#移动至web服务器下,去掉调用私钥时候的密码验证mv {/usr/local/nginx/demoCA/certs/server.pem,/usr/local/nginx/demoCA/private/server.key} /usr/local/nginx/conf/ssl//usr/local/ssl/bin/openssl rsa -passin pass:server_password </usr/local/nginx/conf/ssl/server.key >/usr/local/nginx/conf/ssl/serverkey.pem#签名客户端证书/usr/local/ssl/bin/openssl req -new -passout pass:user_password -sha1 -newkey rsa:1024 -keyout /usr/local/nginx/demoCA/private/client_01001.key -out /usr/local/nginx/demoCA/csr/client.csr -config /usr/local/ssl/openssl.cnf -subj '/C=CN/ST=JIANGSU/L=CHANGZHOU/O=CAID/OU=CAID_01/OU=CAID_GROUP1/CN=client_01001/emailAddress=CAIDer_2013@outlook.com'expect sgin.exp ca_password 365 policy_anything ssl_client client_01001#导出CA公钥/usr/local/ssl/bin/openssl x509 -in /usr/local/nginx/demoCA/cacert.pem -out /home/samba/ca/CA_Root.cer#导出客户端的私钥+被CA签名的公钥/usr/local/ssl/bin/openssl pkcs12 -passin pass:user_password -export -clcerts -in /usr/local/nginx/demoCA/certs/client_01001.pem -inkey /usr/local/nginx/demoCA/private/client_01001.key -passout pass:import_password -camellia256 -out /home/samba/ca/client_01001.pfx -name "good luck 01001" #=============#吊销客户端证书#/usr/local/ssl/bin/openssl ca -passin pass:ca_password -revoke /usr/local/nginx/demoCA/certs/client_01001.pem -config /usr/local/ssl/openssl.cnf/usr/local/ssl/bin/openssl ca -passin pass:ca_password -gencrl -config /usr/local/ssl/openssl.cnf -out /usr/local/nginx/demoCA/crl.pem#web服务器检测吊销列表ln -s /usr/local/nginx/demoCA/crl.pem /usr/local/nginx/conf/ssl/crl.pem

转载于:https://blog.51cto.com/caidui/1676038

openssl构建CA认证相关推荐

  1. OpenSSL与CA认证

    一.SSL/TLS SSL又被称之为安全的套接字层(Secure Socket Layer),一种安全的加密协议,是嵌套在应用层与传输层之间的一个半层.用户在浏览器中需要加密的时候输入https,则数 ...

  2. Openssl:构建CA的过程并实现web服务基于https访问的网络架构

    本文环境 RedHat 5.8 本博文主要内容:加密算法.CA介绍和配置等.web利用CA认证构建https安全传输 1.在互联网上数据额传输有两种:明文传输和加密传输.明文传输的协议有:ftp.ht ...

  3. Openssl搭建私有CA认证

    概述 CA英文全称Certification Authority,即数字证书认机构.从广义上来说,CA是负责发放和管理数字证书的权威机构,并作为用户数字认证中受信任的第三方,承担公钥体系(PKI)中公 ...

  4. 创建自己的CA机构 - openssl cert 双向认证

    为什么80%的码农都做不了架构师?>>>    1. 创建 openssl.cnf [ ca ] default_ca = subchen_ca[ subchen_ca ] cert ...

  5. 构建CA证书详解过程步骤

    目录 一.CA中心申请证书的过程 二.CA介绍 三.构建私有CA 1.环境: 2.检查安装openSSL 3.查看配置文件 4.根证书服务器目录 5.创建所需文件 6.创建密钥 7.生成自签名证书 8 ...

  6. CA认证原理以及实现(上)

    转载自:https://blog.csdn.net/lujiancs/article/details/38487235 原理基础 数字证书为发布公钥提供了一种简便的途径,其数字证书则成为加密算法以及公 ...

  7. CA认证原理以及实现(下)

    在上述的文章后了解到原理之后,我们这篇文章来进行CA的搭建. OPEN SSL 环境搭建 在基础原理中我们提到了两种认证服务,单项认证服务和双向认证服务,我们就以双向认证服务举例说明. OpenSSL ...

  8. openssl https 单向认证连接成功示例

    openssl https 单向认证连接成功示例 研究这个玩意也有几天的时间了,刚学C 因为不熟悉编译折腾了不少时间,终于弄通了,发个随笔给研究openssl https的同学一点提示吧. 环境: = ...

  9. LNMP与CA认证的童话故事

    在前面的一篇博客中,我已经介绍过,如何通过源码编译安装LAMP,见教你源码编译制作LAMP详细过程 ,这里就介绍下如何编译安装LNMP,以及如何在LNMP中添加ssl认证. LNMP,也叫做LEMP. ...

最新文章

  1. 百度短视频推荐系统的目标设计
  2. 数据库表初始化,删除所有数据后主键ID从1开始
  3. Android插件化开发之AMS与应用程序(客户端ActivityThread、Instrumentation、Activity)通信模型分析
  4. sata接口测试软件,如何查看电脑是否支持USB 3.0?Hwinfo32检测SATA端口的方法
  5. 同等学力计算机综合难吗,计算机在职研究生考试难度大吗?这种方式通过率高...
  6. Sentinel服务熔断只配置fallback_客户自定义限流处理_削峰填谷_流量控制_速率控制_服务熔断_服务降级---微服务升级_SpringCloud Alibaba工作笔记0050
  7. 地图比例尺与空间分辨率之间的关系_地图比例尺与分辨率
  8. 【编译原理】 CS143 斯坦福大学公开课 专栏总揽
  9. K-S检验两样本分布是否相同
  10. 中国甜味剂粉市场趋势报告、技术动态创新及市场预测
  11. 明明白白lua的协程(coroutine)
  12. 服务器麒麟系统是arm还是x64,麒麟arm环境安装ceph
  13. Win11预览体验计划显示Your PC does not meet the minimum hardware requirements...的解决方案
  14. 能力不够,你就态度好点
  15. 一句代码让电脑定时重启,关机,取消关机
  16. 如何编辑二维码内容并批量生成
  17. 全程电子商务崛起山东
  18. 15 | 浮点数和定点数(上):怎么用有限的Bit表示尽可能多的信息?
  19. 交换机端口的PVID
  20. typemonkey怎么安装?typemonkey怎么用?ae脚本typemonkey教程

热门文章

  1. C++基础教程,基本的输入输出
  2. “使用 iNalyzer 分析应用程序的类结构”
  3. 《Web性能实践日志》一1.5 浏览器的发展
  4. Java | 原来 try 还可以这样用啊?!
  5. OSG 实现跟随节点的相机(转)
  6. keepalived+lvs实现高可用的负载均衡
  7. 【机器学习】Octave矩阵,向量的表示与基本操作
  8. 中断占用CPU的时间分析
  9. solr中facet及facet.pivot理解
  10. 安装paramiko的方法