OpenSSL 及创建私有CA

OpenSSL 及创建私有CA

OpenSSL

OpenSSL,是一个开放源代码的软件库包,应用程序可以使用这个包来进行安全通信,避免窃听,同时确认另一端连接者的身份。这个包广泛被应用在互联网的网页服务器上。

接下来对openssl基本命令进行介绍
openssl 非常强大其子命令很多,这里只是对完成某些操作进行部分解释
openssl 的基本格式为
openssl enc -ciphername [-in filename] [-out filename] [-e] [-d] …

-ciphername :指定加密算法,例如:-base64

-in filename :指定要加密的文件,filename为该文件的文件名

-out filename :指定将加密后的数据保存到filename指定的文件中

-e :指定为加密过程,此为默认过程

-d :指定为解密过程
加密
openssl对称加密

enc命令
加密
openssl enc -e des3 -a salt -in testfile -out testfile.cipher
解密
openssl enc -d des3 -a salt –in testfile.cipher -out testfile
单项加密

dgst命令
openssl dgst -md5 testfile
生成用户密码

生成用户密码: passwd命令:
openssl passwd -1 -salt SALT(最多8位)
openssl passwd -1 –salt centos
生成随机数:
openssl rand -base64|-hex NUM
NUM: 表示字节数;-hex时,每个字符为十六进制,相当于4位二进制,出现的字符数为NUM*2
创建私有CA

什么是CA

一种数字证书,如果用户想得到一份属于自己的证书,他应先向 CA 提出申请。在 CA 判明申请者的身份后,便为他分配一个公钥,并且 CA 将该公钥与申请者的身份信息绑在一起,并为之签字后,便形成证书发给申请者。 如果一个用户想鉴别另一个证书的真伪,他就用 CA 的公钥对那个证书上的签字进行验证,一旦验证通过,该证书就被认为是有效的。证书实际是由证书签证机关(CA)签发的对用户的公钥的认证。 证书的内容包括:电子签证机关的信息、公钥用户信息、公钥、权威机构的签字和有效期等等。目前,证书的格式和验证方法普遍遵循X.509 国际标准。
在制作私有CA之前我们先来了解一下,与CA相关的配置文件,在/etc/pki/tls/下的openssl.cnf文件

我们来看一下,部分内容如下图:
openssl.cnf

#CA的默认设置
[ CA_default ]

dir = /etc/pki/CA # 默认工作目录
certs = $dir/certs #服务器证书存放位置
crl_dir = $dir/crl #证书吊销列表
database = $dir/index.txt #证书数据列表文件
#unique_subject = no # Set to ‘no’ to allow creation of
# several ctificates with same subject.
new_certs_dir = $dir/newcerts # 新证书存放位置

certificate = $dir/cacert.pem #CA自己的证书存放处
serial = $dir/serial #序列号(十六进制数)为下一个证书的生成编号
crlnumber = $dir/crlnumber #吊销列表的工作号
# must be commented out to leave a V1 CRL
crl = $dir/crl.pem #证书吊销列表文件
private_key = $dir/private/cakey.pem #CA私钥
RANDFILE = $dir/private/.rand # 随机数文件

x509_extensions = usr_cert #

default_days = 365 # how long to certify for 证书时间
default_crl_days= 30 # how long before next CRL 吊销列表的时间
default_md = default # use public key default MD 单相加密算法
preserve = no # keep passed DN ordering
我们来看一下/etc/pki/CA下的文件
[root@Centos6 /etc/pki/CA]#ls
certs crl newcerts private
对比配置文件,可以看到缺少index.txt serial文件,缺少的文件是需要我们自己创建出来的
CA policy (匹配的策略)是否需要相同 匹配策略

CApolicy
在配置的设定中,国家、省份及公司名称是必须要一致的,否则在创建CA时会提示不匹配错误,当然也可以指定为都不匹配
创建CA

1、创建所需要的文件

在上面提到过的缺少的文件需要创建
touch /etc/pki/CA/index.txt 生成证书索引数据库文件
echo 01 > /etc/pki/CA/serial 指定第一个颁发证书的序列号,以后不需重新指定
2、CA自签证书

那么谁会给CA本身颁发证书呢,CA本身就是最高的认证,这就需要自己给自己认证了
(1)、生成私钥
在配置文件中,已经定义了私钥的存放位置,以及名称,这里要注意与配置文件openssl.cnf当中的指定路径一致
cd /etc/pki/CA

执行命令,并设定生成的文件权限为600

[root@Centos6 /etc/pki/CA]#(umask 077; openssl genrsa -out /etc/pki/CA/private/cakey.pem -des 1024)

Generating RSA private key, 1024 bit long modulus
.++++++
…………………………++++++
e is 65537 (0x10001)
Enter pass phrase for /etc/pki/CA/private/cakey.pem:
Verifying – Enter pass phrase for /etc/pki/CA/private/cakey.pem:
(2)、生成自签名证书
生成自签名证书,需要自己给自己颁发,openssl有专门的命令选项x509可以使用
#执行命令后,填写信息表即可

[root@Centos6 /etc/pki/CA]#openssl req -new -x509 -key /etc/pki/CA/private/cakey.pem -days 7300 -out /etc/pki/CA/cacert.pem

Enter pass phrase for /etc/pki/CA/private/cakey.pem:
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) []: henan
Locality Name (eg, city) [Default City]: zhengzhou
Organization Name (eg, company) [Default Company Ltd]: magedu
Organizational Unit Name (eg, section) []: tech
Common Name (eg, your name or your server’s hostname) []: magedu.com
Email Address []:
注意:这里所填的国家、省份及公司名称要记得,接下来在提交申请证书时会用到

相关的命令参数
-req : requst 申请
-new : 生成新证书签署请求
-x509 : 专用于CA生成自签证书
-key : 生成请求时用到的私钥文件
-days n :证书的有效期限
-out /PATH/TO/SOMECERTFILE: 证书的保存路径
(3)、颁发证书
A、在需要使用证书的主机生成证书请求
#给web服务器生成私钥

[root@centos7 ~]#(umask 077; openssl genrsa -out /etc/pki/tls/private/test.key 1024)

Generating RSA private key, 1024 bit long modulus
……….++++++
……++++++
e is 65537 (0x10001)

#生成证书申请文件

[root@centos7 /etc/pki/tls]#openssl req -new -key /etc/pki/tls/private/test.key -days 365 -out /etc/pki/tls/test.csr

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) []:henan
Locality Name (eg, city) [Default City]:zhengzhou
Organization Name (eg, company) [Default Company Ltd]:magedu
Organizational Unit Name (eg, section) []:tech
Common Name (eg, your name or your server’s hostname) []:magedu.com
Email Address []:

(命令里的时间制定其实没什么意义,最终是要颁发者指定的)
以上申请证书的文件已经完成,可以提交了
B、向CA提交证书申请
[root@centos7 /etc/pki/tls]#scp test.csr 172.18.18.18:/etc/pki/CA

root@172.18.18.18’s password:
test.csr 100% 647 0.6KB/s 00:00
C、签署证书
[root@Centos6 /etc/pki/CA]#openssl ca -in /etc/pki/CA/test.csr -out /etc/pki/CA/certs/test.crt -days 3650

Using configuration from /etc/pki/tls/openssl.cnf
Enter pass phrase for /etc/pki/CA/private/cakey.pem:
Check that the request matches the signature
Signature ok

#申请证书的详细信息

Certificate Details:
Serial Number: 1 (0x1)
Validity
Not Before: Sep 10 09:41:12 2017 GMT
Not After : Sep 8 09:41:12 2027 GMT
Subject:
countryName = CN
stateOrProvinceName = henan
organizationName = magedu
organizationalUnitName = tech
commonName = magedu.com
X509v3 extensions:
X509v3 Basic Constraints:
CA:FALSE
Netscape Comment:
OpenSSL Generated Certificate
X509v3 Subject Key Identifier:
AC:FB:56:45:E0:A8:B5:EA:82:15:14:6E:9F:FB:18:F4:FB:78:67:FA
X509v3 Authority Key Identifier:
keyid:C1:37:D1:E8:53:EB:C9:02:0B:E9:71:1A:60:42:0F:33:C9:11:ED:7A

Certificate is to be certified until Sep 8 09:41:12 2027 GMT (3650 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
查看证书的信息及状态,可以执行以下命令
openssl x509 -in app.crt -noout -text|issuer|subject|dates

text代表全部信息
issuer代表颁发者
subject代表主题
dates代表有效期

openssl ca -status SERIAL
到此证书的签署就已经完成了,之后就可以颁发给申请者了
我们可以看一下完成一系列流程的CA目录
#CA的目录树
[root@Centos6 /etc/pki/CA]#tree

.
├── cacert.pem
├── certs
│ └── test.crt
├── crl
├── index.txt
├── index.txt.attr
├── index.txt.old
├── newcerts
│ └── 01.pem
├── private
│ └── cakey.pem
├── serial
└── serial.old
吊销证书

当证书过期或者不受信任时需要对签署的证书进行吊销,可以执行以下命令
(1)、吊销证书
[root@Centos6 /etc/pki/tls]#openssl ca -revoke /etc/pki/CA/newcerts/01.pem

Using configuration from /etc/pki/tls/openssl.cnf
Enter pass phrase for /etc/pki/CA/private/cakey.pem:
Revoking Certificate 01.
Data Base Updated
(2)、指定吊销证书的编号
echo 01 > /etc/pki/CA/crlnumber
注意:第一次更新吊销列表前,才需要执行,以后不需要了
(3)、更新证书吊销列表
[root@Centos6 /etc/pki/CA]#openssl ca -gencrl -out /etc/pki/CA/crl/crl.pem

Using configuration from /etc/pki/tls/openssl.cnf
Enter pass phrase for /etc/pki/CA/private/cakey.pem:

#查看更新后的crl文件

[root@Centos6 /etc/pki/CA]#openssl crl -in /etc/pki/CA/crl/crl.pem -noout -text
Certificate Revocation List (CRL):
Version 2 (0x1)
Signature Algorithm: sha1WithRSAEncryption
Issuer: /C=CN/ST=henan/L=zhengzhou/O=magedu/OU=tech/CN=magedu.com
Last Update: Sep 10 12:42:49 2017 GMT
Next Update: Oct 10 12:42:49 2017 GMT
CRL extensions:
X509v3 CRL Number:
1
Revoked Certificates:
Serial Number: 01
Revocation Date: Sep 10 12:38:03 2017 GMT
Signature Algorithm: sha1WithRSAEncryption
6b:06:d1:c2:9c:c8:9a:81:21:09:10:f4:aa:28:6c:bf:a3:64:
以下省略

通过crl文件可以看出,确实将申请的证书吊销了
到此创建私有的证书及颁发完毕,不足及错误之处还望指正

本文来自投稿,不代表Linux运维部落立场,如若转载,请注明出处:http://www.178linux.com/86931

(4)
M25_ymdM25_ymd
上一篇 2017-09-11 11:18
下一篇 2017-09-11 15:34

相关推荐

  • 关于大型网站技术演进的思考(六):存储的瓶颈(6)

    原文出处: 夏天的森林  在讲数据库水平拆分时候,我列出了水平拆分数据库需要解决的两个难题,它们分别是主键的设计问题和单表查询的问题,主键问题前文已经做了比较详细的讲述了,但是第二个问题我没有讲述,今天我将会讲讲如何解决数据表被垂直拆分后的单表查询问题。 要解决数据表被水平拆分后的单表查询问题,我们首先要回到问题的源头,我们为什么需要将数…

    2015-03-11
  • 脚本数组及yum软件包管理器

    一、数组 变量:存储单个元素的内存空间 数组:存储多个元素的连续的内存空间,相当于多个变量的集合。 数组名和索引索引:编号从0开始,属于数值索引注意:索引可支持使用自定义的格式,而不仅是数值格式,即为关联索引,bash4.0版本之后开始支持。bash的数组支持稀疏格式(索引不连续) 1.定义数组声明数组:    declare …

    Linux干货 2016-08-25
  • N26-第五周-孙逸

    1、 显示当前系统上root、fedora或user1用户的默认shell;命令:cat /etc/passwd | grep -E “^(root|fedroa|user1)” | cut -d: -f1,7 2、 找出/etc/rc.d/init.d/functions文件中某单词后面跟一组小括号的行,形如:hello(…

    2017-03-10
  • SRE管理职责简介

    读书笔记 摘要 SRE是Site Reliability Engineer的简称,从名字可以看出Google的SRE不只是做Operation方面的工作,更多是保障整个Google服务的稳定性。 SRE管理职责简介 监控系统 警报 工单 日志 应急事件处理 变更管理 预测需求和规划容量 资源部署 小结 监控系统 监控系统是 SRE 团队监控服务质量…

    Linux干货 2017-04-03
  • 脚本进阶

    1、写一脚本,用ping命令测试192.168.1.1-192.168.1.10之间的所有主机的在线状态,在线的主机使用绿色表示,不在线的主机使用红色表示   2、如何给网络配置多个地址,有哪些方式   3、写一个脚本 (1)假设某目录(/etc/rc.d/rc3.d/)下分别有K开头的文件和S开头的文件若干 (2)显示所有以K开头的文件…

    2018-01-08
  • linux软件包管理

    linux软件包管理 简介     在Linux系统中,软件包的安装和管理是很重要的知识,而linux/unix一个麻烦的地方就是软件安装程序比较麻烦和复杂,尤其是当所安装的软件包要处理较多的包依赖关系,这就更让人头疼了,最常见linux软件安装方式有三种:     本文主要介绍Linux中RedHat或CentOS发…

    系统运维 2016-05-05

评论列表(1条)

  • h
    h 2017-09-13 11:13

    内容不错,注意排版,继续加油!