基于OpenSSL加解密技术及创建私有CA过程

1.1 SSL介绍:

SSL(Secure Sockets Layer 安全套接层)是为网络通信提供安全及数据完整性的一种安全协议。

1.2 SSL提供的服务有:
  • 认证用户和服务器,确保数据发送到正确的客户机和服务器;
  • 加密数据以防止数据中途被窃取;
  • 维护数据的完整性,确保数据在传输过程中不被改变。

1.3 Openssl是SSL的一个开源项目,其由三部分组成:
  • libcryto:具有通用功能的加密库,里面实现了众多的加密库;
  • libssl:实现ssl机制的,它是用于实现TLS/SSL的功能;
  • openssl:多功能命令行工具,它可以实现加密解密,甚至还可以当CA来用,可以让你创建证书、吊销证书。

1.4 Openssl命令用法
  • 标准命令
  • 信息摘要命令(dgst子命令)
  • 加密命令(env子命令)
  • 标准命令:enc,ca,req,genrsa等
1.4.1 对称加密:

工具:

  • openssl enc;
  • gpg

算法:

  • 3des;
  • aes;
  • blowfish;
  • twofish;

enc命令: man enc

特点:

  • 加密解密使用同一个密钥;
  • 将数据分割成固定大小的块,逐个加密

缺点:

  • 密钥过多
  • 密钥分发困难
  • 主要用于数据加密

加密:
openssl enc -e -des3 -a -salt -in fstab -out a.cipher

解密:
openssl enc -d -des3 -a -salt -in a.cipher -out a-2

1.4.2 单向加密:

工具:

  • openssl dgst;
  • md5sum;
  • sha1sum;
  • sha224sum;
  • sha256sum,不同的位输出长度的算法

dgst命令:man dgst

  • openssl dgst -md5 [-hex默认] /PATH/SOMEFILE
  • md5sum /PATH/TO/SOMEFILE

生成用户密码(passwd、openssl passwd)

  • passwd命令:man sslpasswd
  • openssl passwd -1 -salt SALT(最多8位)(-1表示md5加密算法)

生成随机数:man sslrand

  • openssl rand -base64|-hex NUM
  • NUM: 表示字节数;-hex时,每个字符4位,出现的字符数为NUM*2

特点:

  • 只能加密,不能解密(提取数据指纹,数据特征码)
  • 定长输出,雪崩效应
  • 验证完整性,验证数据的完整性

单向加密:

[root@CentOS7 /app]#openssl dgst -md5 fstab
MD5(fstab)= f0dff383430026f3105b32cc1f7e5604
[root@CentOS7 /app]#md5sum fstab
f0dff383430026f3105b32cc1f7e5604  fstab

生成用户密码:

[root@CentOS7 /app]#openssl passwd -1 -salt salt
Password: 
$1$salt$IbRkpBgAWG4UIV3zweVwG/

生成随机数:

[root@CentOS7 /app]#openssl rand -base64 10
4WO4sR1MLRxtjA==
[root@CentOS7 /app]#openssl rand -hex 15
3f3b95d08d0617979aa67eab5e77e1
1.4.3 公钥加密:

加密解密:

  • 算法:RSA,ELGamal
  • 工具:gpg,openssl rsautl(man rsautl)

数字签名:

  • 算法:RSA,DSA,ELGamal

密钥交换

  • 算法:DH

生成密钥对:

  • 生成私钥:
    openssl genrsa -out /tmp/mykey2.private 1024
    (umask 077;openssl genrsa -out /tmp/mykey3.private 2048) 设置权限为600的private
  • 从私钥中提出公钥:
    openssl rsa -in /tmp/mykey2.private -pubout

随机数生成器(伪随机数字):

  • 熵池:
    • 在操作系统上有一个叫做熵池的地方,他是用来保存硬件中断产生的随机数(每一次硬件中断都会产生一个随机数)
  • /dev/random:
    • 仅从熵池中返回随机数,随机数耗尽时,取随机数的进程将会被阻塞;
  • /dev/unrandom:
    • 仅从熵池中取随机数,随机数耗尽时,就通过伪随机数生成器生成伪随机数;(伪随机数不安全)
  • 熵池中随机数来源
    • 硬盘IO中断时间间隔
    • 硬盘IO中断时间间隔

2 创建CA和申请证书
2.1 查看有关ssl证书目录结构:
[root@CentOS7 ~]#tree /etc/pki/CA/
/etc/pki/CA/
├── certs
├── crl  #吊销的证书
├── newcerts  #存放CA签署(颁发)过的数字证书(证书备份目录)
└── private  #用于存放CA的私钥

4 directories, 0 files
[root@CentOS7 ~]#tree /etc/pki/tls/
/etc/pki/tls/
├── cert.pem -> /etc/pki/ca-trust/extracted/pem/tls-ca-bundle.pem
├── certs  # 该服务器上的证书存放目录,可以放置自己的证书和内置证书
                   ca-bundle.crt    内置信任的证书
│   ├── ca-bundle.crt -> /etc/pki/ca-trust/extracted/pem/tls-ca-bundle.pem
│   ├── ca-bundle.trust.crt -> /etc/pki/ca-trust/extracted/openssl/ca-bundle.trust.crt
│   ├── make-dummy-cert
│   ├── Makefile
│   └── renew-dummy-cert
├── misc
│   ├── CA
│   ├── c_hash
│   ├── c_info
│   ├── c_issuer
│   └── c_name
├── openssl.cnf  #openssl的CA主配置文件
└── private  #证书密钥存放目录
2.2 分析openssl.cnf部分配置文件

vim /etc/pki/tls/openssl.cnf

39 ####################################################################
 40 [ CA_default ]
 41 
 42 dir     = /etc/pki/CA       # Where everything is kept
 43 certs       = $dir/certs        # Where the issued certs are kept
 44 crl_dir     = $dir/crl      # Where the issued crl are kept
 45 database    = $dir/index.txt    # database index file.
 46 #unique_subject = no            # Set to 'no' to allow creation of
 47                     # several ctificates with same subject.
 48 new_certs_dir   = $dir/newcerts     # default place for new certs.
 49 
 50 certificate = $dir/cacert.pem   # The CA certificate
 51 serial      = $dir/serial       # The current serial number
 52 crlnumber   = $dir/crlnumber    # the current crl number
 53                     # must be commented out to leave a V1 CRL
 54 crl     = $dir/crl.pem      # The current CRL
 55 private_key = $dir/private/cakey.pem# The private key
 56 RANDFILE    = $dir/private/.rand    # private random number file
 57 
 58 x509_extensions = usr_cert      # The extentions to add to the cert
 59 
78 # A few difference way of specifying how similar the request should look
 79 # For type CA, the listed attributes must be the same, and the optional
 80 # and supplied fields are just that :-)
 81 policy      = policy_anything  

修改为policy_anything 后countryName,stateOrProvinceName可以不做强制匹配

2.3 创建所需文件的文件
[root@CentOS7 ~]#touch /etc/pki/CA/index.txt #生成证书索引数据库文件
[root@CentOS7 ~]#echo 01 > /etc/pki/CA/serial  #指定第一个颁发证书的序列号
2.4 CA自签证书生成私钥
[root@CentOS7 /etc/pki/CA]#(umask 066;openssl genrsa -out /etc/pki/CA/private/cakey.pem 2048)
Generating RSA private key, 2048 bit long modulus
.............................................+++
...............................................................................+++
e is 65537 (0x10001)

为了安全起见,修改cakey.pem私钥文件权限为600或400,使用子shell生成

2.5 生成自签名证书
[root@CentOS7 /etc/pki/CA]#openssl req -new -x509 -key /etc/pki/CA/private/cakey.pem -days 7300 -out /etc/pki/CA/cacert.pem
-new:  生成新证书签署请求
-x509:  专用于CA 生成自签证书
-key:  生成请求时用到的私钥文件
-days n :证书的有效期限
-out / PATH/TO/SOMECERTFILE :  证书的保存路径
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) []:guangdong
Locality Name (eg, city) [Default City]:huizhou
Organization Name (eg, company) [Default Company Ltd]:cnnavy.cn     
Organizational Unit Name (eg, section) []:it 
Common Name (eg, your name or your server's hostname) []:cnnavy.cn
Email Address []:cnnavy.cn

此时即创建了自建CA,可以开始给别人签证了。

2.6 颁发证书,在需要使用的证书的主机生成证书请求

为web服务器生成私钥

[root@CentOS6 ~]#(umask 066;openssl genrsa -out /etc/pki/tls/private/test.key 2048)
Generating RSA private key, 2048 bit long modulus
..............................+++
........................................+++
e is 65537 (0x10001)

生成证书申请文件

[root@CentOS6 ~]#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) []:guangdong
Locality Name (eg, city) [Default City]:huizhou
Organization Name (eg, company) [Default Company Ltd]:cnnavy.cn
Organizational Unit Name (eg, section) []:it
Common Name (eg, your name or your server's hostname) []:cnnavy.cn
Email Address []:cnnavy.cn

Please enter the following 'extra' attributes
to be sent with your certificate request
A challenge password []:
An optional company name []:

将证书请求文件传输给CA
[root@CentOS6 /etc/pki/tls]#scp test.csr 172.18.254.65:/etc/pki/CA/

[root@CentOS7 /etc/pki/CA]#openssl ca -in /etc/pki/CA/test.csr -out /etc/pki/CA/certs/test.crt -days 365
Using configuration from /etc/pki/tls/openssl.cnf
Check that the request matches the signature
Signature ok
Certificate Details:
        Serial Number: 1 (0x1)
        Validity
            Not Before: Sep 10 05:43:12 2017 GMT
            Not After : Sep 10 05:43:12 2018 GMT
        Subject:
            countryName               = CN
            stateOrProvinceName       = guangdong
            localityName              = huizhou
            organizationName          = cnnavy.cn
            organizationalUnitName    = it
            commonName                = cnnavy.cn
            emailAddress              = cnnavy.cn
        X509v3 extensions:
            X509v3 Basic Constraints: 
                CA:FALSE
            Netscape Comment: 
                OpenSSL Generated Certificate
            X509v3 Subject Key Identifier: 
                C8:C4:D0:46:94:43:B2:C3:3E:02:B0:D4:84:2A:F8:D3:B5:2B:B1:F3
            X509v3 Authority Key Identifier: 
                keyid:65:CD:A0:4C:9B:50:7A:99:B5:66:25:9A:BD:CC:F5:CB:97:1D:07:DA

Certificate is to be certified until Sep 10 05:43:12 2018 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

注意:默认国家,省,公司名称三项必须和CA保持一致,也可通过修改openssl.cnf文件policy = policy_anything 项可不做强制匹配

查看请求申请后的证书

[root@CentOS7 /etc/pki/CA]#openssl x509 -in /etc/pki/CA/certs/test.crt  -noout -serial -subject
serial=01
subject= /C=CN/ST=guangdong/L=huizhou/O=cnnavy.cn/OU=it/CN=cnnavy.cn/emailAddress=cnnavy.cn

自此CA签署之后即生成证书文件,只需将证书发回给申请所在主机就可使用了。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 196,099评论 5 462
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 82,473评论 2 373
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 143,229评论 0 325
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 52,570评论 1 267
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 61,427评论 5 358
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 46,335评论 1 273
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 36,737评论 3 386
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 35,392评论 0 254
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 39,693评论 1 294
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 34,730评论 2 312
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 36,512评论 1 326
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 32,349评论 3 314
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 37,750评论 3 299
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,017评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 30,290评论 1 251
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 41,706评论 2 342
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 40,904评论 2 335

推荐阅读更多精彩内容

  • 加密算法和协议: 对称加密:。加解密使用同一个密钥;将数据分割成固定大小的块,逐块加密;且块与块之间有关联关系;。...
    ckhzw阅读 4,453评论 0 4
  • CA和证书安全协议(SSL/TLS)OpenSSH 一、CA和证书 (一) PKI(Public Key Infr...
    哈喽别样阅读 1,375评论 0 0
  • SSL(Secure Socket Layer,安全套接字层)是为网络通信提供安全保障和数据完整性的一种安全协议,...
    CHUANHAI阅读 1,808评论 0 7
  • 【序 1】 更深经历与神同行 / 陈忠辉 【序 2】 强而有力的美妙见证 / 樊鸿台 【自序】 进入神荣耀的同在中...
    黑雪花阅读 1,055评论 0 2
  • 几天没有记日记了,心里的那个弦没有把控住,开启番茄钟,开始写吧。年度计划,月度计划,日计划,这周总结。
    大李的日常随笔阅读 229评论 0 0