openssl的应用及私有CA相关内容

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了openssl的应用及私有CA相关内容相关的知识,希望对你有一定的参考价值。

以CA为核心生成的一套安全架构体系我们称之为:
PKI:Public Key Infrastructure,公钥基础设施;其包含的内容:
1.签证机构:CA
2.证书注册机构:RA
3.证书吊销列表:CRL
4.证书存取库:CR

国际标准化组织(ISO)定义了证书的结构和认证标准:X.509协议标准:
证书的组成包括:
证书的版本号
证书的序列号
有效期限
签发算法的ID
签发CA的名称
主体的名称
主体的公钥信息
主体的唯一标识符
发证者的唯一标识符
发证者的数字签名
扩展信息

CA如何发挥作用?
1.通信双方互相交换证书;
2.双方验证证书的真伪;
3.双方协商加密算法;
4.用CA颁发的公钥解密证书中的CA签名,能解密就说明证书来源可靠;
5.用协商出来的算法来加密证书,并取得特征值,与解密出来的特征值进行比较,如果相同,说明证书完整性有保证;
6.检查证书的有效期是否合法,如果在有效期内则证书可用;
7.检查证书的主体名称和此次通信的目标是否能够对应;
8.检查证书是否被吊销;

能够实现上述安全加密功能的协议:
SSL:Security Socket Layer,安全套接字层
1994年,Netscape(网景)公司最先声明并实施;
SSL V1.0
SSL V2.0
SSL V3.0

TLS:Transport Layer Security,传输层安全协议;
IETF:Internet Engineering Task Force,互联网工程项目小组;
1999年提出TLS V1.0
2006年提出TLS V1.1
2008年提出TLS V1.2草案,添加了椭圆曲线加密算法;

分层设计方案:
1.最底层:规定了基础算法的原语的实现;包括:AES,md5,sha,...
2.向上一层:各种算法的基本实现;
3.再上一层:各种算法组合实现的半成品;
4.最高层:用各种组件拼装而成的各种成品密码学协议软件;

SSL/TLS的handshake的四个阶段:
1.客户端线服务器索要证书并验证证书;
发送Client Hello的消息,此消息的主要内容:
支持的协议的版本,如:SSL V3.0 ,TSL V1.2
客户端生成一个随机数,稍后用于生成会话密钥;
支持的加密算法,如:DES,3DES,AES,RSA,...
支持的压缩算法,如:gzip,bzip2,deflate,...
2.双方协商生成会话密钥:
发送Server Hello消息,此消息主要内容:
确认使用的协议的版本,如:TLS V1.2
服务器也生成一个随机数,稍后用于生成会话密钥;
确认加密算法和压缩算法;
服务器的证书
3.双方会采用已经生成的会话密钥进行安全加密的数据通信:
客户端验证服务器证书,再确认无误后,取出其中的服务器公钥;
验证服务器证书的步骤:
验证发证机构(CA)
验证证书的完整性
验证证实书的持有者信息
验证证书的有效期
验证CA的吊销列表中是否有此证书
客户端发送信息给服务器端:
客户端再次生成一个随机数用于公钥加密;
编码格式的变更通知,表示以后的信息都将采用双方已经协商好的加密算法和压缩算法;
客户端握手结束;

服务器收到客户端发送来的第三个随机数(Pre_Master_key);计算生成此次会话所用到的会话密钥,并向客户端发送相关信息;
编码格式的变更通知,表示以后的信息都将采用双方已经协商好的加密算法和压缩算法;
服务器端握手结束;
4.双方互相结束通信;

OpenSSL:开源的实现SSL/TLS协议的事实标准;
主要有三部分组成:
libcrypt:实现加密和解密算法的库
libss:实现SSL协议/TLS协议功能的库
openssl:多用途命令行工具

openssl命令行工具:
众多子命令实现各种安全加密功能;

标准命令:
 enc,dgst,ca,req,genrsa,rand,rsa,x509,passwd,...

 对称加密命令:enc
  主要是提供对称加密算法,以进行数据或文件的手动加密
   格式:openssl enc -ciphername [-in filename] [-out filename] [-pass arg] [-e] [-d] [-a/-base64]  [-salt] 
      -ciphername:加密算法的名称
      -in filename:openssl要读取的文件路径
      -out filename:加密或解密操作后用于保存结果的文件路径
      -e:加密操作
      -d:解密操作
      -a/-base64:用纯文本格式进行密文编码;
      -salt:随机加盐;

   示例:
    加密文件:
     ~]# openssl enc -e des3 -in 123.txt -a -out 123.txt.plaintxt

    解密文件:
     ~]# openssl enc -d des3 -out 123.txt -a -in 123.txt.plaintxt

 单向加密命令:dgst
  示例:
    ~]# openssl dgst -sha1 fstab

 生成随机数命令:rand
  openssl rand [-out file] [-rand file(s)] [-base64] [-hex] num

  示例:
   ~]# openssl rand -base64 8

  生成带盐的密码:passwd
   openssl passwd -1 -salt SALT_STRING

  示例:
   ~]# openssl passwd -1 -salt 456789
     Password: 
     $1$456789$HNo/3Ml2mDyCIeduXf8lU0

  公钥加密算法:genrsa
   生成rsa加密算法的私钥

    penssl genrsa [-out filename] [-passout arg] [-des] [-des3] [-idea] [-f4] [-3] [-rand file(s)] [-engine id] [numbits]

    出于安全考虑,需要给创建的私钥赋予只有拥有者才能读写其他任何人都不能读写的权限;建议使用下列方法生成私钥:
     ~]# (umask 077 ; openssl genrsa -out /tmp/my.key 4096)
     ~]# (umask 077 ; openssl genrsa > /tmp/my.key 4096)

   从已经生成的私钥文件中抽取公钥:rsa
    openssl rsa  [-in filename] [-out filename] [-pubout] 
      -pubout:抽取公钥
      -in fiename:私钥文件的路径
      -out filename:公钥文件的路径

      示例:
   tmp]# (umask 077 ; openssl genrsa -out /tmp/my.key 4096)
   tmp]# cat my.key
        -----BEGIN RSA PRIVATE KEY-----
        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
        -----END RSA PRIVATE KEY-----
        [[email protected] tmp]# openssl rsa -in my.key -out mykey.pub -pubout
        writing RSA key
     tmp]# cat mykey.pub
        -----BEGIN PUBLIC KEY-----
        MIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEAxv/oFzpeuSMWQGRvKRuZ
        Aqa3PUX5uhbrrp7XHmEFV1kSHRP10bUP3H63viSl4AVwOth7qrLcyNIAq5DTSa4w
        MYdDGvVQbLqUWwy6ZjUbMn7f6avqWIloudpyMywNq41UDsU4Z3eDEAJwn2ezWHC9
        ud2R0poBi64lLmYQB0mJWIw0z16xBg4eFrcAft507gd23fOw6VFyYmpb7MtioSNO
        NCRDXQFcKsE0PguG7w0kDVrnwkLCitWYbEs1qa/uX9nbwXUM2Y5t5rGFYvBKYa86
        Vs/YyDCMAx+KxFsQZF8xsZRh/VTo2qAlB5ITOPpHLup4KID9s8Ha62Y68r8683mn
        0E2YKXe3Ha3aYyyp2G/XsIfCaNLJujT3S+kIBXuKaOz85cniExcFidu9BGKpzygx
        JRaF23qTtS2mwiZ9RL2ZQ6+X6E5DCcd1pZprl0QCYvsLSmu3dr+iXN4BQm2ZAx8G
        BtbkD+a5MubF9S2c6ZlOLHgBDP623sKYP1MJKij+JInfB9C20uPHbjIHwsZjFXwK
        YbT6x3qsC4CZIMDDjHfPHf0lG3IdsGmD4ac5y9f+N/9GunMt55UvFsIeICihZKwh
        IuoN/1rweNuajGwXWzvYtNsZopHG1GQUwFL72Gj0QEyHEE+K2Q6z8wN7A7Mm3Grw
        jmv4G+lT0M5akhXOdWRYv3UCAwEAAQ==
        -----END PUBLIC KEY-----

利用openssl建立私有CA:
1.创建CA所在主机的私钥文件;
2.生成自签证书;
3.必须为CA提供必要的目录级文件及文本级文件:
目录级文件:
/etc/pki/CA/certs
/etc/pki/CA/crl
/etc/pki/CA/newcerts
文本级文件:
/etc/pki/CA/serial:保存证书的序列号,一般初始序列号为01;
/etc/pki/CA/index.txt:保存证书索引;
/etc/pki/tls/openssl.cnf:配置文件;

知道了解就好,不一定要会做,在工作中用不太到 前提是知道了解..
创建私有CA的步骤:
1.创建CA的私钥文件:
(umask 077 ; openssl genrsa -out /etc/pki/CA/private/cakey.pem 2048(长度越长安全性越高速度越慢))

2.生成自签证书:
openssl req 命令:
openssl req [-out filename] [-new] [-key filename] [-x509] [-days n]

3.完善目录及文本文件结构:
touch /etc/pki/CA/index.txt
echo 01 > /etc/pki/CA/serial

在CA上查看证书内容:
openssl x509 -in /etc/pki/CA/cacert.pem -noout -serial -subject

创建私有CA示例:
tmp]# ls /etc/pki
CA  ca-trust  java  nssdb  product  product-default  rpm-gpg  rsyslog  tls
tmp]# cd /etc/pki
pki]# cd CA
CA]# ls
certs  crl  newcerts  private
CA]# touch index.txt
CA]# echo 01 > serial
CA]# cat serial
01
CA]# ls
certs  crl  index.txt  newcerts  private  serial
CA]# ls ../tls/
cert.pem  certs  misc  openssl.cnf  private
CA]# (umask 077 ; openssl genrsa -out /etc/pki/CA/private/cakey.pem 2048)
Generating RSA private key, 2048 bit long modulus
.............+++
.....+++
e is 65537 (0x10001)
CA]# ls private/
cakey.pem
CA]# ll private/
总用量 4
-rw-------. 1 root root 1679 4月  16 15:47 cakey.pem
CA]# openssl req -new -x509 -key /etc/pki/CA/private/cakey.pem -out /etc/pki/CA/cacert.pem -days 3653
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) []:HB
Locality Name (eg, city) [Default City]:****
Organization Name (eg, company) [Default Company Ltd]:yanshandaxue
Organizational Unit Name (eg, section) []:****
Common Name (eg, your name or your server‘s hostname) []:xuesheng.ll.com   
Email Address []:[email protected]
CA]# ls
cacert.pem  certs  crl  index.txt  newcerts  private  serial
CA]# cat cacert.pem
-----BEGIN CERTIFICATE-----
MIIEIzCCAwugAwIBAgIJAPo+gpVhVYoVMA0GCSqGSIb3DQEBCwUAMIGnMQswCQYD
VQQGEwJDTjELMAkGA1UECAwCSEIxGzAZBgNVBAcMEsOnwqfCpsOnwprCh8OlwrLC
mzEVMBMGA1UECgwMeWFuc2hhbmRheHVlMSEwHwYDVQQLDBjDqcKHwozDpMK7woHD
pcKtwqbDqcKZwqIxFzAVBgNVBAMMDnh1ZXNoZW4ubGwuY29tMRswGQYJKoZIhvcN
AQkBFgwxMjM1NEBxcS5jb20wHhcNMTgwNDE2MDc1MzI2WhcNMjgwNDE2MDc1MzI2
WjCBpzELMAkGA1UEBhMCQ04xCzAJBgNVBAgMAkhCMRswGQYDVQQHDBLDp8KnwqbD
p8KawofDpcKywpsxFTATBgNVBAoMDHlhbnNoYW5kYXh1ZTEhMB8GA1UECwwYw6nC
h8KMw6TCu8KBw6XCrcKmw6nCmcKiMRcwFQYDVQQDDA54dWVzaGVuLmxsLmNvbTEb
MBkGCSqGSIb3DQEJARYMMTIzNTRAcXEuY29tMIIBIjANBgkqhkiG9w0BAQEFAAOC
AQ8AMIIBCgKCAQEAzZOOAR6S3Yh3MyqRDZapHcF7Kl6AiUAymut/kWdxHh/sp/kT
iUkt2SdrxeX7XsEKH/u2rFGMtCc0WgxRT91ZK0nq0yIiLos6Qap9eqkf+9suPjfu
JbbkeyM6c35E6nIrHIFkJOYItLKyPfQaiHmwzmEdu3Wt0djbjuZmoPuo/asBD2mb
SAfZdXCRe9MiMLBC6fSgJzLhvDE/ii34PTujQO5c0DMqatBR3oMSO+Sq5lXGId6k
BMQgNTShGPZ2fplDUr5Tz564AkJGpf6vYzq58mkMYdK6QrT6H9bJnxavcCFp3Hlj
ExVgKRFFY7omAwZB9yuBLkm1twaUqBVLl4PSUwIDAQABo1AwTjAdBgNVHQ4EFgQU
4ybXtVWQGRyR3SdgotQk3TYyWlYwHwYDVR0jBBgwFoAU4ybXtVWQGRyR3SdgotQk
3TYyWlYwDAYDVR0TBAUwAwEB/zANBgkqhkiG9w0BAQsFAAOCAQEAZ+KW/aGINtPX
e/LUScxjX1aqVx7TjZA/chrK0miViceaDPrC1NffveYrA77iP57LjObIKpXvSB2H
z0rP3qlrB+bLVbrulwfomfv8IMDdKEO3HmQv2Nv6IRavfyKqEZvRo3dPkTqCbp45
NmeXhjD4ibjFgbew0C7ef4qrG7aRRdb1+XdNfNezHnWDZFseUt0XxP7WNCql2lsr
CiBUrIfmoXLAF+GyavWFwszhwE0fntQtN5z49qtRNjKk3j5NLC15d1FLZ6m+nzOo
D+l33KFuxWXlAOCRiMgbzxStGm6LeFv7MdOJy+foKppQVXogJRtVvatjFOUGQKzZ
BenCF4z6fg==
-----END CERTIFICATE-----
CA]# openssl x509 -in cacert.pem  -noout -serial
serial=FA3E829561558A15(序列号)

吊销证书:必须在CA上执行:
1.获取客户端证书对应的序列号:openssl x509 -in /etc/pki/CA/certificate -noout -serial -subject
2.吊销证书:openssl ca -revoke /etc/pki/CA/newcerts/SERIAL.pem

注意:上述命令中的“SERIAL”是要换成准备吊销的证书的序列号;

3.生成吊销证书的吊销索引文件:仅需要第一次吊销证书时执行此操作;
echo "SERIAL" > /etc/pki/CA/crl/crlnumber
4.更新证书吊销列表:openssl ca -genctl -out /etc/pki/CA/crl/ca.crl 不同版本路径会有所差别!!
5.查看CRL:openssl crl -in /etc/pki/CA/crl/ca.crl -noout -text

实现加密/解密的应用程序:gpg,可以使用gpg实现对称加密;
gpg2 [--homedir dir] [--options file] [options] command [args]

常用选项:
-c:实施对称加密
-o file ,--output file:将解密结果保存于指定文件当中;
--gen-key:生成密钥对,即:公钥+私钥
--list-keys:查看公钥
--export:导出钥匙环上所有的公钥,也可以导出指定名称的公钥;默认直接将公钥输出到标准输出;需要配合使用-o选项,才能将其保存到文件中;
--import:导入到指定的公钥钥匙环;
-r:复制加密文件
-e:加密数据
--delete-key name
--delete-secret-key name
--delete-secret-and-public-key name
删除公钥和/或私钥,删除密钥的时候,先删私钥,再删公钥;

gpg应用示例:
    加密文件:
        ~]# gpg -c fstab
    解密文件:
        ~]# gpg -o fstab.out -d fstab.gpg
            注意选项和参数的顺序;
    生成密钥对:
        ~]# gpg --gen-key
    查看公钥:
        ~]# gpg --list-key
    导出公钥:
        ~]# gpg -a --export -o /tmp/qhdlink.pub

    在其他主机导入公钥,以进行公钥加密:
        ~]# gpg --import /PATH/TO/qhdlink.pub

    在其他主机上使用导入的公钥加密文件:
        ~]# gpg -e -r qhdlink.pub /PATH/TO/SOME_FILE

以上是关于openssl的应用及私有CA相关内容的主要内容,如果未能解决你的问题,请参考以下文章

ssl协议openssl及创建私有CA

Openssl应用实例:创建私有CA并申请证书

#yyds干货盘点#私有CA和证书申请

使用 OpenSSL 创建私有 CA:3 用户证书

openssl创建私有ca

Linux下Oenssl命令及搭建私有CA