当前网络安全事故不断,如何提升系统安全性是一个系统上线之前必须考虑的重点DFx特性之一。在提升系统安全性的方法中,

给每个端口(通道)加上SSL协议是最通用和有效的一种。

使用SSL就必须要有证书,在互联网世界里,有专门的组织机构给各个公司、组织、团体颁发证书,并保证其证书的有效性

(通过颁发吊销列表使其实效)。这个颁发证书的机构我们称为CA。

不过找CA申请颁发证书是需要费用的。而在一些分布式系统中,内部节点之间通信通道需要SSL加密和认证,这种场景下,

每个内部节点都去CA结构申请颁发一个证书没有必要,也费钱。

所以,搭建一个CA是非常有必要的。当前很多开源软件也都有自己的CA,典型的如
Puppet:Puppet 的 Agent 在启动时候,

会请求 Puppet CA 颁发一个证书,只有 CA 颁发证书给 Agent 之后,Agent 才可以连接到 Puppet Master 。

OpenSSL是目前最流行的SSL开源实现,这里介绍如何使用OpenSSL搭建一个CA服务。

思路

搭建CA服务分为2个阶段。
1. 准备CA证书,包括CA根证书(信任证书),CA的私钥
2. 使用CA证书颁发证书

0.准备 openssl.conf 配置环境

这个配置文件定义了证书生成的一些属性,Internet上很多相关的介绍。笔者参考的是这个 http://www.phildev.net/ssl/opensslconf.html 。
下面是我们要用到的 openssl.conf 文件:

#http://www.phildev.net/ssl/opensslconf.html

[ ca ]

default_ca = CA_default

[CA_default]

dir = .

certs = $dir/certsdb

new_certs_dir = $certs

database = $dir/index.txt

certificate = $dir/ca_cert.pem

private_key = $dir/ca_key.pem

serial = $dir/serial

#crldir = $dir/crl

#crlnumber = $dir/crlnumber

#crl = $crldir/crl.pem

RANDFILE = $dir/private/.rand

x509_extensions = usr_cert

#copy_extensions = copy

name_opt = ca_default

cert_opt = ca_default

default_days = 365

#default_crl_days= 30

default_md = sha256

preserve = no

policy = policy_match

[ policy_match ]

countryName = match

stateOrProvinceName = match

localityName = supplied

organizationName = match

organizationalUnitName = optional

commonName = supplied

emailAddress = optional

[ policy_anything ]

countryName = optional

stateOrProvinceName = optional

localityName = optional

organizationName = optional

organizationalUnitName = optional

commonName = supplied

emailAddress = optional

[ req ]

default_bits = 4096

default_keyfile = privkey.pem

distinguished_name = req_distinguished_name

attributes = req_attributes

x509_extensions = v3_ca

req_extensions = v3_req

string_mask = nombstr

[ req_distinguished_name ]

C = CN

ST = GuangDong

L = ShenZhen

O = UProject

OU = Yunweipai

CN = www.yunweipai.com

emailAddress = web@yunweipai.com

[ req_attributes ]

[ usr_cert ]

basicConstraints = CA:false

subjectKeyIdentifier = hash

authorityKeyIdentifier = keyid,issuer

[ v3_req ]

subjectAltName = email:move

[ v3_ca ]

subjectKeyIdentifier=hash

authorityKeyIdentifier=keyid:always,issuer:always

basicConstraints = CA:true

上面的 openssl.conf 配置,需要在服务器上准备好如下目录和文件:

  1. mkdir certsdb
  2. touch index.txt
  3. touch index.txt.attr
  4. echo 01 > serial

1. 准备CA证书

1.创建CA的私钥

创建一个长度为4096 bits的私钥,以AES128算法加密,加密密钥为 Yunweipai@123

mao@ubuntu:/home/yunweipai/openssl_ca$ openssl genrsa -aes128 -passout pass:Yunweipai@123 4096 > ca_key.pem

Generating RSA private key, 4096 bit long modulus

.................................................................................................................++

.........++

e is 65537 (0x10001)

2.创建CA的证书请求

指定证书的 subject

mao@ubuntu:/home/yunweipai/openssl_ca$ openssl req -new -key ca_key.pem -passin pass:Yunweipai@123 -config openssl.conf -subj "/C=CN/ST=GuangDong/L=ShenZhen/O=UProject/OU=UProject/CN=UProject-CA" -batch -out ca_csr.pem

3.自颁发证书 

mao@ubuntu:/home/yunweipai/openssl_ca$ openssl ca -config openssl.conf -create_serial -out ca_cert.cer -days 365 -keyfile ca_key.pem -key Yunweipai@123 -selfsign -in ca_csr.pem

Using configuration from openssl.conf

Check that the request matches the signature

Signature ok

Certificate Details:

Serial Number: 1 (0x1)

Validity

Not Before: Apr 29 16:15:58 2015 GMT

Not After : Apr 28 16:15:58 2016 GMT

Subject:

countryName = CN

stateOrProvinceName = GuangDong

localityName = ShenZhen

organizationName = UProject

organizationalUnitName = UProject

commonName = UProject-CA

X509v3 extensions:

X509v3 Basic Constraints:

CA:FALSE

X509v3 Subject Key Identifier:

DD:A7:68:BD:02:D3:D1:9C:15:5A:37:C2:FD:8F:16:13:D6:FB:08:9D

X509v3 Authority Key Identifier:

keyid:DD:A7:68:BD:02:D3:D1:9C:15:5A:37:C2:FD:8F:16:13:D6:FB:08:9D

Certificate is to be certified until Apr 28 16:15:58 2016 GMT (365 days)

Sign the certificate? [y/n]:y

1 out of 1 certificate requests certified, commit? [y/n]y

Write out database with 1 new entries

Data Base Updated

2. 使用CA证书颁发证书

1.创建申请者的私钥

创建一个长度为4096 bits的私钥,以AES128算法加密,加密密钥为 Yunweipai@123

mao@ubuntu:/home/yunweipai/user_certs$ openssl genrsa -aes128 -passout pass:Yunweipai@123 -out web_key.pem

Generating RSA private key, 2048 bit long modulus

......................................................+++

...............................................+++

e is 65537 (0x10001)

2.创建申请者的证书颁发请求

指定 subject,这里的 subject 与 CA 的 subject 不能相同

mao@ubuntu:/home/yunweipai/user_certs$ openssl req -new -key web_key.pem -passin pass:Yunweipai@123 -config /home/yunweipai/openssl_ca/openssl.conf -subj "/C=CN/ST=GuangDong/L=ShenZhen/O=UProject/OU=Yunweipai/CN=www.yunweipai.com" -batch -out web_csr.pem

3.申请颁发证书

在实际生产环境中,一般 CA 服务器都独立部署,因为申请颁发证书的过程是申请者将证书请求(CSR)发送给CA服务器,CA服务器接收到了之后,通过下面命令颁发证书,然后将证书返回给申请者

mao@ubuntu:/home/yunweipai/openssl_ca$ openssl ca -days 365 -config openssl.conf -keyfile ca_key.pem -key Yunweipai@123 -cert ca_cert.cer -in /home/yunweipai/user_certs/web_csr.pem -out web.cer

Using configuration from openssl.conf

Check that the request matches the signature

Signature ok

Certificate Details:

Serial Number: 2 (0x2)

Validity

Not Before: Apr 29 16:25:16 2015 GMT

Not After : Apr 28 16:25:16 2016 GMT

Subject:

countryName = CN

stateOrProvinceName = GuangDong

localityName = ShenZhen

organizationName = UProject

organizationalUnitName = Yunweipai

commonName = www.yunweipai.com

X509v3 extensions:

X509v3 Basic Constraints:

CA:FALSE

X509v3 Subject Key Identifier:

9D:A4:E9:7B:5F:74:3C:60:4D:E8:6B:54:2A:F0:68:36:58:9B:F7:85

X509v3 Authority Key Identifier:

keyid:DD:A7:68:BD:02:D3:D1:9C:15:5A:37:C2:FD:8F:16:13:D6:FB:08:9D

Certificate is to be certified until Apr 28 16:25:16 2016 GMT (365 days)

Sign the certificate? [y/n]:y

1 out of 1 certificate requests certified, commit? [y/n]y

Write out database with 1 new entries

Data Base Updated

好了,证书终于颁发完了,通过这个命令,可以验证web.cer是由ca_cert.cer颁发的:

mao@ubuntu:/home/yunweipai/openssl_ca$ openssl verify -CAfile ca_cert.cer web.cer

web.cer: OK

  1. 一般找CA申请证书,通常是给对外部(用户)提供服务的端口使用。比如我们访问淘宝网站,主域名对应端口(80)上使用的证书,就是从CA申请的。CA申请到的证书,一般浏览器都可以信任,不会弹出站点不可信的错误信息。这就是Money的力量:)
  2. serial 纪录证书的序列号,这个值一定要是2位或以前的值,如果只是 1 是不行的。
  3. CA只能自己给自己颁发证书,因为自己是根,没有其他人能给CA颁发证书。

搭建自己的CA服务 - OpenSSL CA 实战的更多相关文章

  1. 9.openssl ca

    用于签名证书请求.生成CRL.维护一个记录已颁发证书和这些证书状态的数据库. 证书请求私用CA的私钥签名之后就是证书. [root@xuexi tmp]# man ca SYNOPSIS openss ...

  2. Linux 之加密类型,CA,Openssl,Openssh

    TCP/IP:安全 A------->B 机密性:明文传输(ftp,http,smtp,telnet),被窃听 完整性:消息被篡改 身份验证:你访问的主机就是你真实要访问的那台,而不是钓鱼网站 ...

  3. openssl CA 自签证书,阿里云配置tomcat https

    <一,openssl CA自签发证书> 1,生成私钥 openssl genrsa 1024 > private.key;

  4. openssl ca(签署和自建CA)

    用于签署证书请求.生成吊销列表CRL以及维护已颁发证书列表和这些证书状态的数据库.因为一般人无需管理crl,所以本文只介绍openssl ca关于证书管理方面的功能. 证书请求文件使用CA的私钥签署之 ...

  5. Openssl ca命令

    一.简介 ca命令能够签发证书请求文件以及生成CRL列表 二.语法 openssl ca [-verbose] [-config filename] [-name section] [-gencrl] ...

  6. (13) openssl ca(签署和自建CA)

    用于签署证书请求.生成吊销列表CRL以及维护已颁发证书列表和这些证书状态的数据库.因为一般人无需管理crl,所以本文只介绍openssl ca关于证书管理方面的功能. 证书请求文件使用CA的私钥签署之 ...

  7. 搭建自己的ngrok服务(国内直接可用http://qydev.com/#)

    ngrok 服务可以分配给你一个域名让你本地的web项目提供给外网访问, 特别适合向别人展示你本机的web demo 以及调试一些远程的API (比如微信公众号,企业号的开发) ngrok的官方服务可 ...

  8. HTTPD服务 openssl的https服务机制

    环境: 环境: httpd服务器:10.140.165.169 CA服务器:10.140.165.93 CA服务器配置: 1.安装openssl [root@cnhzdhcp16593 ~]# yum ...

  9. 自建 ca 及使用 ca 颁发证书

    创建CA: 一.安装openssl [root@localhost ~]# yum install -y openssl 二.创建CA的相关文件及目录 mkdir /opt/root_ca & ...

随机推荐

  1. Maven的下载和安装

    1. Maven作用: 管理项目和jar包 2. jdk环境要求: maven3.3+需要jdk1.7以上的版本 3. 下载地址: http://maven.apache.org/download.c ...

  2. NYOJ--1058--dfs--部分和问题

    /* Name: NYOJ--1058--部分和问题 Author: shen_渊 Date: 15/04/17 19:27 Description: 简单的DFS,以为马上过的,递归的i+1写错了, ...

  3. 优化hexo访问速度-将hexo部署到云主机VPS

    写在开始 一开始将自己hexo部署到github,结果发现打开页面速度有点慢,然后又将其同时部署到coding,实现双线路访问,国内解析记录到coding,国外解析到github,这样确实网站的速度能 ...

  4. Python爬虫从入门到放弃(二十三)之 Scrapy的中间件Downloader Middleware实现User-Agent随机切换

    总架构理解Middleware 通过scrapy官网最新的架构图来理解: 这个图较之前的图顺序更加清晰,从图中我们可以看出,在spiders和ENGINE提及ENGINE和DOWNLOADER之间都可 ...

  5. vue的一些坑(第一天)

    1:刚开始在创建项目的时候一直出现vue不是内部或外部命令 关于这个的解决方案网上给出的很多的解决方案是配置环境,这个我就不在赘述了: 但是我觉得那样太麻烦,就没用,只是重新 npm i vue-cl ...

  6. 让你快速了解并掌握如何进行iOS开发技能

    首先你要花点时间针对objective-c语言的学习:毕竟这个是iOS开发的基础(你也可以尝试用Swift,但此项目只是针对OC),编程套路其实都是差不多,多写多想多实践:关于环境的搭建就不在本文进行 ...

  7. Weex的原生开发

    weex概念与特性 最形象的理解就是类似react native. Weex几大特点: 1.帮助你构建原生应用 与 Web App.HTML5 App 或 hybrid App 不同,您可以使用 We ...

  8. Vue.js 计算属性的秘密

    计算属性是一个很邪门的东西,只要在它的函数里引用了 data 中的某个属性,当这个属性发生变化时,函数仿佛可以嗅探到这个变化,并自动重新执行. 上述代码会源源不断的打印出 b 的值.如果希望 a 依赖 ...

  9. JavaScript入门(二)

    一.JS中的运算符 1.算术运算(单目运算符) + 加.-减.*乘. /除. %取余.++自增运算符 .--自减运算符; >>>+:有两种作用,链接字符串/加法运算符.当+两边全为数 ...

  10. hibernate 根据数据库表反生成javaBean