Openssl建立CA系统

本文详细介绍如何使用OpenSSL搭建个人证书颁发机构(CA),包括SSL协议与RSA算法原理介绍,生成RSA密钥、证书请求及自签名证书,直至建立完整的CA系统流程。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Openssl建立CA系统


关键词:SSL、RSA简单实例、matlab乘幂取余、OPENSSL应用、用户CA建立

1.SSL简介(百科)

  SSL(Secure Sockets Layer 安全套接层),及其继任者传输层安全Transport Layer SecurityTLS)是为网络通信提供安全及数据完整性的一种安全协议。TLSSSL传输层对网络连接进行加密。

  SSL协议位于TCP/IP协议与各种应用层协议之间,为数据通讯提供安全支持。SSL协议可分为两层: SSL记录协议(SSL Record Protocol):它建立在可靠的传输协议(如TCP)之上,为高层协议提供数据封装、压缩、加密等基本功能的支持。 SSL握手协议SSL Handshake Protocol):它建立在SSL记录协议之上,用于在实际的数据传输开始前,通讯双方进行身份认证、协商加密算法、交换加密密钥等。

  SSL的数字证书采用非对称加密算法确保安全性。

2.RSA简介(百科)

  RSA算法是一种非对称密码算法,所谓非对称,就是指该算法需要一对密钥,使用其中一个加密,则需要用另一个才能解密。

  RSA公钥加密算法1977年由Ron RivestAdi ShamirhLenAdleman在(美国麻省理工学院)开发的。RSA取名来自开发他们三者的名字。RSA是目前最有影响力的公钥加密算法,它能够抵抗到目前为止已知的所有密码攻击,已被ISO推荐为公钥数据加密标准RSA算法基于一个十分简单的数论事实:将两个大素数相乘十分容易,但那时想要对其乘积进行因式分解却极其困难,因此可以将乘积公开作为加密密钥。

  RSA的算法涉及三个参数,ne1e2。其中,n是两个大质数pq的积,n的二进制表示时所占用的位数,就是所谓的密钥长度。e1e2是一对相关的值,e1可以任意取,但要求e1(p-1)*(q-1)互质;再选择e2,要求(e2*e1)mod((p-1)*(q-1))=1(ne1),(ne2)就是密钥对。其中(ne1)为公钥,(ne2)为私钥。

  RSA加解密的算法完全相同,设A为明文,B为密文,则:B=A^e1 mod nA=B^e2 mod n(公钥加密体制中,一般用公钥加密,私钥解密)e1e2可以互换使用,即:

A=B^e1 mod nB=A^e2 mod n;

3.RSA简单应用例

  取p=13,q=19,n=p*q=247=11110111b,(p-1)(q-1)=216=2*2*3*2*3*3,假设取e1=5,e2=(216*x)/5 + 1/5其中x为任意整数进一步可取x4得一个e2=173,则公钥(5,247),私钥(173,247);n长度为8,对明文按每4bit单元(为保证加密后数据不丢失,这里明文编码最大加密单元能表示的编码数要小于247)进行加密,加密后数据按8bit保存,如

  原始明文=FEDCBA9876543210,用数组表示[15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0]

  加密明文,加密后密文=[15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0]^5 mod 247=[97 105 52 103 7 212 16 164 11 119 161 36 243 32 1 0]

  密文解密,解密后明文=[97 105 52 103 7 212 16 164 11 119 161 36 243 32 1 0]^173 mod 247=[15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0]=FEDCBA9876543210

  针对a^b mod c的运算,当a,b值很大时不能直接计算,需要用到乘幂取余,利用a*b%c=((a%c)*(b%c))%c及幂的二进制展开方法,下面是matlab计算a^b mod c的方法:

    %------------------------------------

    function y=a_b_mod_c(a,b,c)

    %a可以输入一维数组,a,b,c的值必须小于32位整型最大值

    if a >= 4294967295 | b >= 4294967295 | c >= 4294967295

        error('Input a_b_mod_c(a,b,c) a,b,c must less than 4294967295');

    end

    int32_b = uint32(b);

    int32_c = uint32(c);

    y = [];

    for m=1:max(size(a))

        fresult = a(m);

        result = 1;

        for n=1:32

            if bitget(int32_b,n)==1

                result = mod(result*fresult,int32_c);

            end

            fresult = mod(fresult*fresult,int32_c);

        end

        y =[y,double(result)];

    end

4.安装openssl

  安装openssl软件包,openssl version可以查看版本,本文档实验openssl版本0.9.8k 25 Mar 2009

5.生成RSA密钥

  如果需要对RSA密钥进行密码保护,方法:

    $openssl genrsa -des3 -out privkey.pem 2048

  如果不需要对RSA密钥进行密码保护,方法:

    $openssl genrsa -out privkey.pem 2048

  生成2048位的密钥,des3为密钥加密方法

6.生成证书请求和自签名证书

  生成证书请求文件cert.csr可以由其它CA机构进行签名,假设CA机构是直接顶层权威机构,它公之于众的证书就是rootca.pem

    $openssl req -new -key privkey.pem -out cert.csr

  顶层权威机构会给cert.csr用它的密钥进行签名,最终给你一个文件cacert.pem,这个就是和privkey.pem配对的数字证书。有了privkey.pemcacert.pem,就可以和其它信任rootca.pem的系统进行依赖于数字证书认证的SSL通信了。

  如果自己就是CA顶层权威机构(比如自己做实验),那么先前生成的privkey.pem就是ROOT CA的密钥,这个密钥会用来签名用户数据证书。顶层CA机构需要一个公之于众的根证书,用privkey.pem给自己签名生成一个根证书,方法:

    $openssl req -new -x509 -key privkey.pem -out rootca.pem -days 1095

  生成根证书会提示输入很多相关信息

7.建立自己的CA系统

  建立自己的CA系统,上面6生成的自签名证书就可以做根证书,为方便可将privkey.pem改名为cakey.pemrootca.pem改名为cacert.pem,然后配置openssl.cnf文件。

  建立自己的CA根目录,如/home/thq/myca,由于是测试自己的CA系统,可以从/etc/ssh/openssl.cnf拷贝一份到/home/thq/myca目录:

  配置自己的openssl.cnf文件,修改CA_default如MyCA,其它配置如下


  图中可以看出需要在myca目录下创建一些目录和文件:

    $cd /home/thq/myca

    $mkdir certs crl newcerts private

    $touch index.txt

    $echo 01>serial

    $echo 01>crlnumber

    $chomd 777 -R .

  拷贝前面生成的cakey.pemcacert.pem到指定目录,降低CA policy

    # For the CA policy

    [ policy_match ]

    countryName             = supplied

    stateOrProvinceName     = supplied

    organizationName        = supplied

    organizationalUnitName  = optional

    commonName              = supplied

    emailAddress            = optional

  生成用户密钥和证书请求

    $openssl genrsa -out userkey.pem 2048

    $openssl req -new -key privkey.pem -out usercert.csr

  生成证书,证书生成目录/home/thq/newcerts:

    $openssl ca -in usercert.csr -config /home/thq/myca/openssl.cnf 

  /home/thq/newcerts/01.pem即为usercert.pem,可以看到/home/thq/myca/serialindex有变化。

8.吊销证书并生成CRL列表

  吊销证书

    $cd /home/thq/myca/newcerts

    $openssl ca -revoke usercert.pem -config /home/thq/myca/openssl.cnf

  生成CRL列表

    $cd /home/thq/myca/crl

    $openssl ca -gencrl -out myca.crl -config /home/thq/myca/openssl.cnf

9.总结

  至此生成的文件有:

    CA密钥:cakey.pem

    CA证书(根证书)cacert.pem

    用户密钥:userkey.pem

    用户证书:usercert.pem

    CA证书吊销列表CRLmyca.crl

  这样CA建立完毕,如果多个用户都到myca申请证书,由于所有用户都信任cacert.pem,也信任由myca签名的证书,所以用户间可以交换自己的usercert.pem进行安全认证,并建立安全通信。



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值