精华内容
下载资源
问答
  • ca认证
    千次阅读
    2022-03-14 19:16:26

    什么叫CA

    CA是认证中心的英文Certification Authority的缩写。它为电子商务环境中各个实体颁发数字证书,以证明各实体身份的真实性,并负责在交易中检验和管理证书;它是电子商务和网上银行交易的权威性、可信赖性及公正性的第三方机构。

    拓展资料

    所谓CA(Certificate Authority)认证中心,它是采用PKI(Public Key Infrastructure)公开密钥基础架构技术,专门提供网络身份认证服务,CA可以是民间团体,也可以是政府机构。负责签发和管理数字证书,且具有权威性和公正性的第三方信任机构,它的作用就像我们现实生活中颁发证件的公司,如护照办理机构。目前国内的CA认证中心主要分为区域性CA认证中心和行业性CA认证中。
    所谓根证书,是CA认证中心与用户建立信任关系的基础,用户的数字证书必须有一个受信任的根证书,用户的数字证书才是有效的。从技术上讲,证书其实包含三部分,用户的信息,用户的公钥,还有CA中心对该证书里面的信息的签名,要验证一份证书的真伪(即验证CA中心对该证书信息的签名是否有效),需要用CA中心的公钥验证,而CA中心的公钥存在于对这份证书进行签名的证书内,故需要下载该证书,但使用该证书验证又需先验证该证书本身的真伪,故又要用签发该证书的证书来验证,这样一来就构成一条证书链的关系,这条证书链在哪里终结呢?答案就是根证书,根证书是一份特殊的证书,它的签发者是它本身,下载根证书就表明您对该根证书以下所签发的证书都表示信任,而技术上则是建立起一个验证证书信息的链条,证书的验证追溯至根证书即为结束。所以说用户在使用自己的数字证书之前必须先下载根证书。
    CA负责数字证书的批审、发放、归档、撤销等功能,CA颁发的数字证书拥有CA的数字签名,所以除了CA自身,其他机构无法不被察觉的改动。
    A和B要进行通信,必须相互获取对方的数字证书,A和B的数字证书可以是不由CA颁发的。

    国内主流CA机构

    • 中国人民银行联合12家银行建立的金融CFCA安全认证中心
    • 中国电信认证中心(CTCA)
    • 海关认证中心(SCCA)
    • 国家外贸部EDI中心建立的国富安CA安全认证中心
    • 广东电子商务认证中心(以后称广东CA)为首的“网证通”认证体系
    • SHECA(上海CA)为首的UCA协卡认证体系
    更多相关内容
  • CA认证在医院互联网技术信息安全与运用中的研究.pdf
  • 我国电子商务CA认证体系与风险防范分析,刘晓红,,数字身份认证(CA认证)是防范电子商务风险的重要方法。我国从2002年起开始电子商务数字身份认证工作,论文在简介我国电子商务CA认�
  • IIS使用eToken实现网站CA认证登录
  • 对包含CA认证的应用程序进行性能测试的配置过程软件测试前两天分公司的一个项目需要进行性能测试,要我们给予技术支持。这个项目的架构是B/S的,其中一项需要测试的业务,使用了CA认证技术(身份认证),因为原来没有...
  • 搭建CA认证中心及搭建https实战

    千次阅读 2022-03-25 14:05:01
    一、CA简单介绍CA,Catificate Authority,通俗的理解就是一种认证机制。它的作用就是提供证书(也就是服务端证书,由域名,公司信息,序列号,签名信息等等组成)来加强客户端与服务器端访问信息的安全性,同时提供...

    自建CA证书客户端及使用nginx搭建https
    一、CA简单介绍CA,Catificate Authority,通俗的理解就是一种认证机制。它的作用就是提供证书(也就是服务端证书,由域名,公司信息,序列号,签名信息等等组成)来加强客户端与服务器端访问信息的安全性,同时提供证书的发放等相关工作。国内的大部分互联网公司都在国际CA机构申请了CA证书,并且在用户进行访问的时候,对用户的信息加密,保障了用户的信息安全。
    二、OpenSSL实现CA证书认证中心的搭建
    1、搭建环境 本文使用centos7 2~3台
    2、CA配置介绍

    ####################################################################
    [ ca ]
    default_ca= CA_default      #默认CA
    ####################################################################
    [ CA_default ]
    
    dir=/etc/pki/CA     # CA的工作目录这里其实是定义了一个变量
    certs= $dir/certs      # 证书存储路径
    crl_dir= $dir/crl      # 证书吊销列表
    database= $dir/index.txt   # 证书数据库列表
    
    
    new_certs_dir= $dir/newcerts       #新的证书路径
    
    certificate = $dir/cacert.pem  # CA自己的证书
    serial= $dir/serial        #下一个证书的编号,十六进制,默认00
    crlnumber= $dir/crlnumber  #下一个要被吊销的证书编号,十六进制,默认00
    crl = $dir/crl.pem         # The current CRL
    private_key = $dir/private/cakey.pem # CA 的私钥
    RANDFILE= $dir/private/.rand   # private random number file
    
    x509_extensions = usr_cert      # The extentions to add to the cert
    name_opt = ca_default       # 命名方式
    cert_opt = ca_default       # CA的选项
    
    default_days= 365           # 默认证书的有效期限
    default_crl_days= 30            # how long before next CRL
    default_md= default     # use public key default MD
    preserve= no            # keep passed DN ordering
    policy= policy_match    #策略
                                    #这里记录的是 将来CA在搭建的时候,以及客户端申请证书的时候,
                                    需要提交的信息的匹配程度。
    [ policy_match ]                # match意味着CA以及子CA必须一致
    countryName = match             # 国家
    stateOrProvinceName= match      # 州或者省
    organizationName= match         #组织公司
    organizationalUnitName  = optional
    commonName= supplied
    emailAddress= optional
    [ policy_anything ]             #可以对外提供证书申请,这时,证书的匹配就可以不用那么严格
    countryName = optional
    stateOrProvinceName = optional
    localityName= optional
    organizationName= optional
    organizationalUnitName  = optional
    commonName  = supplied
    emailAddress= optional
    

    3、安装CA软件包

    [root@xuegod63 Desktop]# rpm -qf `which openssl `openssl-1.0.2k-8.el7.x86_64
    
    
    一般centos系统都会自带 openssl
     [root@xuegod63 CA]# vim /etc/pki/tls/openssl.cnf
     改:172 #basicConstraints=CA:FALSE为:172 basicConstraints=CA:TRUE  
      #让自己成为CA认证中心
    4、CA 自签名证书(构造根CA)1、创建所需要的文件生成证书索引数据库文件 touch /etc/pki/CA/index.txt指定第一个颁发证书的序列号 echo 01 > /etc/pki/CA/serial如果不提前创建这两个文件,那么在生成证书的过程中会出现错误。首先构造根CA的证书。因为没有任何机构能够给根CA颁发证书,所以只能根CA自己给自己颁发证书。2、生成私钥文件私钥文件是非常重要的文件,除了自己本身以外,其他任何人都不能取得。所以在生成私钥文件的同时最好修改该文件的权限,并且采用加密的形式进行生成。# 执行命令生成私钥文件。
    
    ```powershell
    [root@localhost ~]#(umask 066;openssl genrsa -out /etc/pki/CA/private/cakey.pem -des3 2048 )
    Generating RSA private key, 2048 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:        #这里确认密码
    

    查看一个生成的私钥文件,就会发现已经被加密了

    [root@localhost ~]#cat /etc/pki/CA/private/cakey.pem
    -----BEGIN RSA PRIVATE KEY-----
    Proc-Type: 4,ENCRYPTED
    DEK-Info: DES-EDE3-CBC,A4FB61EACD1544F2
    
    9JrKVEPhnWhx1W+W1V4PdIvVHNDwb8mb0JYILvXZKc07gvNcYKIlvUoTxjtihbpk
    wYQcVm0Z6b2+fjZBXVVR9igFB2OOE74BnSNMsbfPTs5W/SwWLxv0R6x0SbiZ8v/7
    D6Qh3u/rXmOQWWTvQnLzh6JaT00c8zgUnn48vMev17Xyg32oJqKqJVL5RNBGmJur
    6CaWX8mB5q+HYiBUXzNLQp9T3HNGcnmDNyk0gylEvjeJo3Hq+IOAkjfJE4sYO9ER
    tQtsLViFUc5jXX7p0nIO0ANwE7zdjBt9I4aXknZiC4rFYJJtNSa1Wrhoo/MhuwWH
    zjc4UyoB1C71sbq2LMgeElHhXN/TfqWGfXFqhkyBJwgrmzQibOJSFeWHZNurILof
    UwgNLlABmazvIL5Ps6LgZtyrO2ODSDTzPiCO7kQ0S3mTHYk9+WEeEyMb4uum6oAx
    oCofADL0wea+5mHVUA2s6KwRBFr01HiQ00fiul6LFvXdCwt9IL62blIJYn2veQHl
    oPvC5cTnPVqJ28GJWbPvJjiOLB8Hh+4DPwxaRA1eYf2R9SR0R1SYJIBTI6NNqNwW
    Lq+pD89bGCbFdYID+kAZfG27FonmmLvvhTn3jQKVPpwQBROHQ9gpwMLnpmpJWwNK
    byUSit+Vt+mvbzOLjuTdsTzklwZEOkNpaE/jTqusWuhXS33D4bqA+Ws+xNVDnx6e
    rbrGcbX9skXyti21oEIYem0H37ZS2fV9z+/CM/55maOX5xNVQ4aDxWuiMyyUd03D
    nhhM5A4mcDvIZLpWDbHzjtkl2H9Pnb9fvGzOIOm7lVQrX8BdidpWjwGTLYG/zUX5
    i9NimSnoiqgkhEYl8KXzbnMfD4hX69BXI7le5HAaS38wDKPsmRRW/dgGfRNKzfTZ
    qmBimscMsllz21QnG9eqineFDdexGZw1oEQsHp2CivtEwaIKTqOZfNiwHJvm1cbz
    M0NOgs+r2qze0czV9dTqM5pVND1Iac1DXYflYZ9g54riQNre/sHp1qpdNQHRRMTP
    yTFnGsEfWmI4V4HiSrdQpyHIrnFUryse9kJmRKDfQK7icUf5/KrOD4FOS5zsHrep
    /cE14w7s0Zqko9upkYQNBys5TbBmAK8yVJ/Zq7jU3qjDxkYNddpOt8k33vl9CG53
    OeWxcWOzJCHIOjakJlLnS+XitsSY4hzUlfEO0/Ffi99zyHXybNPws5Og4KNfgcqW
    ReG943oKc5qplfST2tr0K10ipD3WoV+lMbLugrwhfmVOyHGypfJhUMU0oKEjYPP3
    JjHSiW0hrnNvrPQ4/mqSps3LyWYZWvH40N88U6dbxgbUgamXLHWtzJdyfBNii8uH
    obtye7oeYpAzx0hNurXhpSoswFbxwU5u80eL0/YkfkzkL1P9vtMvDUw/TVNbwHVg
    kTS9WEQA52XLMBtanzRzLGJVIXX6ODGgXt2Gql3KO1p43OyZq4Ksvyj8NuvdmBdO
    y9SrMvv+cdOMmTkj4nmGBjqSDeFmrSSQf0HoUbfXXXw/RIW/gkcm4qPmNJXUolYp
    WBOg5jT78pcJ2sRwb6YQDgC5HleBwuZujixUlKgdZxF1DEpJNBFnNDxq8yKadEzB
    -----END RSA PRIVATE KEY-----
    

    3、生成自签名证书# 调用命令生成一个签名证书

    # 生成证书的过程中需要输入之前设定的私钥的密码
    # -new: 生成新证书签署请求
    # -x509: 专用于CA生成自签证书
    # -key: 生成请求时用到的私钥文件
    # -days n:证书的有效期限
    # -out /PATH/TO/SOMECERTFILE: 证书的保存路径
    [root@localhost ~]#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) []:hlj
    Locality Name (eg, city) [Default City]:harbin
    Organization Name (eg, company) [Default Company Ltd]:****
    Organizational Unit Name (eg, section) []:it
    Common Name (eg, your name or your server's hostname) []:192.168.104.46
    Email Address []:
    

    到此CA认证中心搭建完成
    5、颁发证书
    注:此处颁发证书有两种方式,分别是 子CA证书机构向根CA证书机构申请证书以及普通用户向子CA证书机构申请证书。本次实验只有两台机器所以没有做子CA证书机构向根CA证书机构申请证书。下文附上制作过程仅供参考未做实验。
    1、子CA证书机构向根CA证书机构申请证书
    1)、首先在子CA证书机构主机上生成私钥,这一个过程与前面根CA机构生成私钥的过程是一致的。# 这次我们修改了私钥的长度

    并且没有采用加密的方式生成

    因为主机B是要作为子CA机构的形式存在,他也是一个CA,所以生成私钥的时候,就应该按照配置文件中指定的内容,生成cakey.pem

    [root@centos6 pki]$(umask 066; openssl genrsa -out /etc/pki/CA/private/cakey.pem 1024)
    Generating RSA private key, 1024 bit long modulus
    ......++++++
    ..............++++++
    e is 65537 (0x10001)
    

    查看私钥文件可以发现,没有了加密的标识

    同时因为生成时指定了1024的长度,私钥的长度明显的变短了。

    [root@centos6 ~]$cat /etc/pki/CA/private/cakey.pem
    -----BEGIN RSA PRIVATE KEY-----
    MIICXgIBAAKBgQCxLyAKQCkysisrsuou6oJFJHs/Gk9L406x6sON1a2JX3516FJ2
    ·····中间省略······
    R1ogCVEZq36sgNYUwaT55gLKk5Ik5T6YQimy0bsvo5oQuw==
    -----END RSA PRIVATE KEY-----
    

    2)、利用私钥生成证书申请文件# 其实这里的时间是没有必要指定的。

    因为证书的时间,是由颁发机构指定的,因此申请机构填写了时间也没用

    其中有些信息必须要与根证书的内容相同因为在根证书的openssl.cnf文件中已经指定。

    [root@centos6 tls]$openssl req -new -key /etc/pki/CA/private/cakey.pem  -days 3650 -out /etc/pki/tls/subca.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) []:hlj
    Locality Name (eg, city) [Default City]:harbin
    Organization Name (eg, company) [Default Company Ltd]:***
    Organizational Unit Name (eg, section) []:it
    Common Name (eg, your name or your server's hostname) []:192.168.104.47     
    Email Address []:
    

    这里的两步 默认也可以不用填

    Please enter the following ‘extra’ attributes
    to be sent with your certificate request
    A challenge password []:123456
    An optional company name []:magedu.com
    3)、将证书的申请文件,传递给根CA# 最好将申请文件,传输到指定的目录下,这样便于管理

    [root@centos6 tls]$scp /etc/pki/tls/subca.csr  192.168.104.46:/etc/pki/CA
    

    4)、颁发证书此时切换到根CA认证主机,生成证书# 这里的时间必须要进行指定。这时证书颁发机构指定的证书的有效期。

    [root@localhost CA]#openssl ca -in /etc/pki/CA/subca.csr -out /etc/pki/CA/certs/subca.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 11 14:38:13 2017 GMT
                Not After : Sep 11 14:38:14 2018 GMT
            Subject:
                countryName               = CN
                stateOrProvinceName       = shandong
                organizationName          = pojun.tech
                organizationalUnitName    = opt
                commonName                = subca.pojun.tech
            X509v3 extensions:
                X509v3 Basic Constraints: 
                    CA:FALSE
                Netscape Comment: 
                    OpenSSL Generated Certificate
                X509v3 Subject Key Identifier: 
                    DB:3E:9C:F4:F4:E9:42:15:00:E7:35:52:FE:04:9A:48:8C:BD:1A:1B
                X509v3 Authority Key Identifier: 
                    keyid:01:17:F1:CB:91:4B:20:AD:C7:DF:13:05:A4:D8:83:B2:AB:75:D1:05
    
    Certificate is to be certified until Sep 11 14:38:14 2018 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
    
    
    
    #此时查看index.txt 文件中,会看到增加了一条新的记录。
    [root@localhost CA]#cat index.txt
    V   180911143814Z       01  unknown /C=CN/ST=shandong/O=pojun.tech/OU=opt/CN=subca.pojun.tech
    

    5)、将根CA主机生成的证书颁发给请求者# 主机B是作为子CA机构存在的,所以证书文件,必须是cacert.pem,否则,子CA将不能够给其他用户颁发证书。

    [root@localhost CA]#scp  /etc/pki/CA/certs/subca.crt 192.168.104.47:/etc/pki/CA/cacert.pem
    

    2、普通用户向子CA机构,申请证书注:这一个过程,与子CA向根CA申请证书的过程是类似的。流程如下
    1)、生成私钥,证书申请文件#生成私钥文件

    因为是普通用户,所以生成的私钥文件应该与之前的cacert.pem 有所区别

    [root@localhost ~]# (umask 066; openssl genrsa -out /etc/pki/tls/private/yyjg47.key 1024)
    
    #利用私钥文件,生成证书申请文件
    [root@localhost ~]# openssl req -new -key /etc/pki/tls/private/yyjg47.key  -out /etc/pki/tls/yyjg47.csr
    

    将证书申请文件发送给 子CA证书颁发机构

    [root@localhost ~]# scp /etc/pki/tls/yyjg47.csr 192.168.104.46:/etc/pki/CA
    2)、切换到子CA证书颁发机构# 子CA证书颁发机构颁发证书
    因颁发证书为自签证书解决Chrome不能识别证书通用名称NET::ERR_CERT_COMMON_NAME_INVALID问题(火狐或IE不需要)

    [root@CA ~]# vim http.ext
    subjectAltName=@SubjectAlternativeName
    
    [ SubjectAlternativeName ]
    IP.1=192.168.104.47
    
    [root@centos6 CA]$openssl ca -in /etc/pki/CA/yyjg47.csr -out /etc/pki/CA/certs/yyjg47.crt -days 365 -extfile http.ext
    

    或者

    [root@centos6 CA]$openssl ca -in /etc/pki/CA/yyjg47.csr -out /etc/pki/CA/certs/yyjg47.crt -days 365 
    

    #将生成的证书传递给申请者

    [root@centos6 CA]$scp /etc/pki/CA/certs/yyjg47.crt  192.168.104.47:/etc/pki/CA/certs/
    

    到此证书已颁发完毕,可以进行使用了
    6、使用nginx搭建https此过程比较简单,直接修改nginx配置即可将上述过程中得到的证书和私钥配置到nginx配置文件中

    server {
      listen  443 ssl;
      server_name  192.168.104.47;
      ssl_certificate "/ect/nginx/cert/yyjg47.crt";  #证书
      ssl_certificate_key "/ect/nginx/cert/yyjg47.key"; #私钥
      ssl_session_cache shared:SSL:1m;
      ssl_session_timeout  10m;
      ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:ECDHE:ECDH:AES:HIGH:!NULL:!aNULL:!MD5:!ADH:!RC4;
      ssl_protocols TLSv1 TLSv1.1 TLSv1.2;   #使用该协议进行配置。
      ssl_prefer_server_ciphers on;
      root   /usr/share/nginx/html/dist;#前端项目文件
      location / {
        if ($request_filename ~* .*\.(?:htm|html)$)  ## 配置页面不缓存html和htm结尾的文件
          {
          add_header Cache-Control no-store;
          add_header Pragma no-cache;
        }
        index  index.html index.htm;#默认页面
        try_files $uri /index.html;
      }
    }
    

    7、浏览器导入自签根证书
    1)、找到CA认证中心的根证书下载到本地
    在这里插入图片描述

    2)、导入证书 直接上图
    在这里插入图片描述
    在这里插入图片描述
    选择刚刚下载下来的ca根证书导入
    在这里插入图片描述

    到此就可以用https访问了
    在这里插入图片描述

    打开页面看看效果吧 希望对你会有所帮助 如果帮到了你请点个赞吧

    展开全文
  • CA认证,即电子认证服务 [1] ,是指为电子签名相关各方提供真实性、可靠性验证的活动。证书颁发机构(CA Certificate Authority)即颁发数字证书的机构。是负责发放和管理数字证书的权威机构,并作为电子商务交易中...
  • CA认证系统的设计

    2020-10-19 13:22:42
    CA认证是保证网上数据传输...本文给出一种方便有效的网上CA认证中心的搭建方式,重点讨论了CA认证中心证书的发布、认证、管理等问题,给出了一个包含CA认证中心和RA注册中心的完整CA认证系统的设计思想和具体实现方法。
  • CA电子认证服务系统 源代码 1、 标签上带usb的都是对usbkey钥匙本身进行操作的,本来和小型CA没有什么关系,只是最初这个程序是用来操作usbkey的,所以保留了这些功能,usbkey采用的是飞天诚信的epas100。 2、 CA扩展...
  • 介绍了用Java和0penSsL构建一个小型cA系统的方法。
  • java 使用CA认证

    千次阅读 2019-05-11 21:23:45
    CA认证原理以及实现 java CA证书制作和代码中使用 名词大意 秘钥库:存储了公钥和私钥信息,一个秘钥库可以存储多对的密钥对(密钥对可以理解为就是数字证书),通过alias别名来取出需要的密钥对,存放于服务器,xxx...

    本文转自:
    数字证书简介及Java编码实现
    CA认证原理以及实现
    java CA证书制作和代码中使用

    名词大意

    秘钥库:存储了公钥私钥信息,一个秘钥库可以存储多对的密钥对(密钥对可以理解为就是数字证书),通过alias别名来取出需要的密钥对,存放于服务器xxx.keystore文件
    数字证书:只能存储公钥,可以从xxxx.keystore中导出某个密钥对公钥证书,存放于客户端xxx.cer文件

    java使用数字证书

    Java 6提供了完善的数字证书管理实现,我们几乎无需关注,仅通过操作密钥库数字证书就可完成相应的加密解密签名验签过程。

    密钥库管理私钥数字证书管理公钥,公钥和私钥分属消息传递双方,进行加密消息传递

    CertificateCoder工具类

     /****
         * 获得私钥,获得私钥后,通过RSA算方法实现进行"私钥加密,公钥解密"和"公钥加密,私钥解密"操作
         * @param keyStorePath 密钥库路径
         * @param alias 别名
         * @param keystore_password 秘钥库密码
         * @param ca_password 证书密码
         * @return  私钥
         */
        private static PrivateKey getPrivateKeyByKeyStore(String keyStorePath, String alias, String keystore_password,String ca_password)throws Exception{
            //获得密钥库
            KeyStore ks = getKeyStore(keyStorePath,keystore_password);
            //获得私钥
            return  (PrivateKey)ks.getKey(alias, ca_password.toCharArray());
    
        }
    
        /****
         * 由Certificate获得公钥,获得公钥后,通过RSA算方法实现进行"私钥加密,公钥解密"和"公钥加密,私钥解密"操作
         * @param certificatePath  证书路径
         * @return 公钥
         */
        private static PublicKey getPublicKeyByCertificate(String certificatePath)throws Exception {
            //获得证书
            Certificate certificate = getCertificate(certificatePath);
            //获得公钥
            return certificate.getPublicKey();
        }
    
        /****
         * 加载数字证书,JAVA 6仅支持x.509的数字证书
         * @param certificatePath  证书路径
         * @return   证书
         * @throws Exception
         */
        private static Certificate getCertificate(String certificatePath) throws Exception{
            //实例化证书工厂
            CertificateFactory certificateFactory = CertificateFactory.getInstance("x.509");
            //取得证书文件流
            FileInputStream in = new FileInputStream(certificatePath);
            //生成证书
            Certificate certificate = certificateFactory.generateCertificate(in);
            //关闭证书文件流
            in.close();
            return certificate;
        }
    
        /****
         * 获得Certificate
         * @param keyStorePath 密钥库路径
         * @param alias 别名
         * @param keystore_password  秘钥库密码
         * @return  证书
         * @throws Exception
         */
        private static Certificate getCertificate(String keyStorePath,String alias,String keystore_password) throws Exception{
            //由密钥库获得数字证书构建数字签名对象
            //获得密钥库
            KeyStore ks = getKeyStore(keyStorePath,keystore_password);
            //获得证书
            return ks.getCertificate(alias);
        }
    
        /****
         * 加载密钥库,加载了以后,我们就能通过相应的方法获得私钥,也可以获得数字证书
         * @param keyStorePath 密钥库路径
         * @param keystore_password 密码
         * @return  密钥库
         * @throws Exception
         */
        private static KeyStore getKeyStore(String keyStorePath,String keystore_password) throws Exception{
            //实例化密钥库
            KeyStore ks = KeyStore.getInstance(KeyStore.getDefaultType());
            //获得密钥库文件流
            FileInputStream is = new FileInputStream(keyStorePath);
            //加载密钥库
            ks.load(is,keystore_password.toCharArray());
            //关闭密钥库文件流
            is.close();
            return ks;
        }
    
        /****
         * 私钥加密
         * @param data  待加密的数据
         * @param keyStorePath  密钥库路径
         * @param alias  别名
         * @param keystore_password   秘钥库密码
         * @param ca_password   证书密码
         * @return  加密数据
         * @throws Exception
         */
        public static byte[] encryptByPriateKey(byte[] data,String keyStorePath,String alias,String keystore_password,String ca_password) throws Exception{
            //获得私钥
            PrivateKey privateKey = getPrivateKeyByKeyStore(keyStorePath,alias,keystore_password,ca_password);
            //对数据加密
            Cipher cipher = Cipher.getInstance(privateKey.getAlgorithm());
            cipher.init(Cipher.ENCRYPT_MODE,privateKey);
            return cipher.doFinal(data);
        }
    
        /****
         * 私钥解密
         * @param data  待解密数据
         * @param keyStorePath 密钥库路径
         * @param alias  别名
         * @param keystore_password   秘钥库密码
         * @param ca_password   证书密码
         * @return  解密数据
         * @throws Exception
         */
        public static byte[] decryptByPrivateKey(byte[] data,String keyStorePath,String alias,String keystore_password,String ca_password) throws Exception{
            //取得私钥
            PrivateKey privateKey = getPrivateKeyByKeyStore(keyStorePath,alias,keystore_password,ca_password);
            //对数据解密
            Cipher cipher = Cipher.getInstance(privateKey.getAlgorithm());
            cipher.init(Cipher.DECRYPT_MODE,privateKey);
            return cipher.doFinal(data);
        }
    
        /****
         * 公钥加密
         * @param data  等待加密数据
         * @param certificatePath  证书路径
         * @return   加密数据
         * @throws Exception
         */
        public static byte[] encryptByPublicKey(byte[] data,String certificatePath) throws Exception{
            //取得公钥
            PublicKey publicKey = getPublicKeyByCertificate(certificatePath);
            //对数据加密
            Cipher cipher = Cipher.getInstance(publicKey.getAlgorithm());
            cipher.init(Cipher.ENCRYPT_MODE,publicKey);
            return cipher.doFinal(data);
        }
    
        /****
         * 公钥解密
         * @param data  等待解密的数据
         * @param certificatePath  证书路径
         * @return  解密数据
         * @throws Exception
         */
        public static byte[] decryptByPublicKey(byte[] data,String certificatePath)throws Exception{
            //取得公钥
            PublicKey publicKey = getPublicKeyByCertificate(certificatePath);
            //对数据解密
            Cipher cipher = Cipher.getInstance(publicKey.getAlgorithm());
            cipher.init(Cipher.DECRYPT_MODE, publicKey);
            return cipher.doFinal(data);
        }
    
        /****
         * @param sign  签名
         * @param keyStorePath 密钥库路径
         * @param alias 别名
         * @param keystore_password   秘钥库密码
         * @param ca_password   证书密码
         * @return 签名
         * @throws Exception
         */
        public static byte[] sign(byte[] sign,String keyStorePath,String alias,String keystore_password,String ca_password)throws Exception{
            //获得证书
            X509Certificate x509Certificate = (X509Certificate) getCertificate(keyStorePath,alias,keystore_password);
            //构建签名,由证书指定签名算法
            Signature signature = Signature.getInstance(x509Certificate.getSigAlgName());
            //获取私钥
            PrivateKey privateKey = getPrivateKeyByKeyStore(keyStorePath,alias,keystore_password,ca_password);
            //初始化签名,由私钥构建
            signature.initSign(privateKey);
            signature.update(sign);
            return signature.sign();
        }
    
    
        /****
         * 验证签名
         * @param data  数据
         * @param sign  签名
         * @param certificatePath  证书路径
         * @return  验证通过为真
         * @throws Exception
         */
        public static boolean verify(byte[] data,byte[] sign,String certificatePath) throws Exception{
            //获得证书
            X509Certificate x509Certificate = (X509Certificate)getCertificate(certificatePath);
            //由证书构建签名
            Signature signature = Signature.getInstance(x509Certificate.getSigAlgName());
            //由证书初始化签名,实际上是使用了证书中的公钥
            signature.initVerify(x509Certificate);
            signature.update(data);
            return signature.verify(sign);
        }
    

    CertificateCoderTest测试类

    /** 秘钥库密码. */
        private static final String keystore_password  = "123456";
        /** 证书密码. */
        private static final String ca_password   = "111111";
        /** 证书别名. */
        private static final String alias = "ljw";
        /** 密钥库文件. */
        private static final String keyStorePath = "F:\\Certifacate\\ljw.keystore";
        /** 数字证书文件. */
        private static final String certificatePath = "F:\\Certifacate\\ljw.cer";
    
        //我们假定密钥库文件yale.keystore存储在D盘根目录,数字证书文件yale.cer也存储在D盘根目录
        /****
         * 公钥加密---私钥解密
         * @throws Exception
         */
        @Test
        public void test1() throws Exception{
            System.err.println("公钥加密---私钥解密");
            String inputStr = "数字证书";
            byte[] data = inputStr.getBytes();
            //公钥加密
            byte[] encrypt = CertificateCoder.encryptByPublicKey(data, certificatePath);
            //私钥解密
            byte[] decrypt = CertificateCoder.decryptByPrivateKey(encrypt, keyStorePath, alias, keystore_password, ca_password);
            String outputStr = new String(decrypt);
            System.err.println("加密前:\n" + inputStr);
            System.err.println("解密后:\n" + outputStr);
        }
    
        /****
         * 私钥加密---公钥解密
         * @throws Exception
         */
        @Test
        public  void test2()throws Exception{
            System.err.println("私钥加密---公钥解密");
            String inputStr = "数字签名";
            byte[] data = inputStr.getBytes();
            //私钥加密
            byte[] encodedData = CertificateCoder.encryptByPriateKey(data, keyStorePath, alias, keystore_password, ca_password);
            //公钥解密
            byte[] decodeData = CertificateCoder.decryptByPublicKey(encodedData, certificatePath);
            String outputStr = new String (decodeData);
            System.err.println("加密前:\n" + inputStr);
            System.err.println("解密后:\n" + outputStr);
        }
    
        @Test
        public  void testSign()throws Exception{
            String inputStr = "签名";
            byte[] data = inputStr.getBytes();
            System.err.println("私钥签名---公钥验证");
            //产生签名
            byte[] sign = CertificateCoder.sign(data, keyStorePath, alias, keystore_password, ca_password);
            System.err.println("签名:\n" + sign);
            //验证签名
            boolean status = CertificateCoder.verify(data, sign, certificatePath);
            System.err.println("状态:\n " + status);
        }
    
    展开全文
  • 医院CA认证建设方案详细.docx医院CA认证建设方案详细.docx医院CA认证建设方案详细.docx医院CA认证建设方案详细.docx医院CA认证建设方案详细.docx医院CA认证建设方案详细.docx医院CA认证建设方案详细.docx医院CA认证...
  • 医院CA认证建设方案详细.pdf医院CA认证建设方案详细.pdf医院CA认证建设方案详细.pdf医院CA认证建设方案详细.pdf医院CA认证建设方案详细.pdf医院CA认证建设方案详细.pdf医院CA认证建设方案详细.pdf医院CA认证建设方案...
  • 医院CA认证建设方案.pdf医院CA认证建设方案.pdf医院CA认证建设方案.pdf医院CA认证建设方案.pdf医院CA认证建设方案.pdf医院CA认证建设方案.pdf医院CA认证建设方案.pdf医院CA认证建设方案.pdf
  • 医院CA认证建设方案.docx医院CA认证建设方案.docx医院CA认证建设方案.docx医院CA认证建设方案.docx医院CA认证建设方案.docx医院CA认证建设方案.docx医院CA认证建设方案.docx医院CA认证建设方案.docx
  • 故事引入——什么是CA证书 看过一些博客,写的比较形象具体。 ◇ 普通的介绍信 想必大伙儿都听说过介绍信的例子吧?假设 A 公司的张三先生要到 B 公司去拜访,但是 B 公司的所有人都不认识他,他咋办捏?常用的办法...

    故事引入——什么是CA证书

    看过一些博客,写的比较形象具体。

    ◇ 普通的介绍信

    想必大伙儿都听说过介绍信的例子吧?假设 A 公司的张三先生要到 B 公司去拜访,但是 B 公司的所有人都不认识他,他咋办捏?常用的办法是带公司开的一张介绍信,在信中说:兹有张三先生前往贵公司办理业务,请给予接洽…云云。然后在信上敲上A公司的公章。

    张三先生到了 B 公司后,把介绍信递给 B 公司的前台李四小姐。李小姐一看介绍信上有 A 公司的公章,而且 A 公司是经常和 B 公司有业务往来的,这位李小姐就相信张先生不是歹人了。

    这里,A公司就是CA证书。

    ◇ 引入中介机构的介绍信

    好,回到刚才的话题。如果和 B 公司有业务往来的公司很多,每个公司的公章都不同,那前台就要懂得分辨各种公章,非常滴麻烦。所以,有某个中介公司 C,发现了这个商机。C公司专门开设了一项“代理公章”的业务。
    今后,A 公司的业务员去 B 公司,需要带2个介绍信:

    介绍信1:含有 C 公司的公章及 A 公司的公章。并且特地注明:C 公司信任 A 公司。

    介绍信2:仅含有 A 公司的公章,然后写上:兹有张三先生前往贵公司办理业务,请给予接洽…云云。

    某些不开窍的同学会问了,这样不是增加麻烦了吗?有啥好处捏?

    主要的好处在于,对于接待公司的前台,就不需要记住各个公司的公章分别是啥样子的;他/她只要记住中介公司 C 的公章即可。当他/她拿到两份介绍信之后,先对介绍信1的 C 公章,验明正身;确认无误之后,再比对介绍信1和介绍信2的两个 A 公章是否一致。如果是一样的,那就可以证明介绍信2是可以信任的了。

    ◇ 什么是证书?

    “证书”洋文也叫“digital certificate”或“public key certificate”(专业的解释看“这里”)。

    它是用来证明某某东西确实是某某东西的东西(是不是像绕口令?)。通俗地说,证书就好比例子里面的公章。通过公章,可以证明该介绍信确实是对应的公司发出的。

    理论上,人人都可以找个证书工具,自己做一个证书。那如何防止坏人自己制作证书出来骗人捏?请看后续 CA 的介绍。

    ◇ 什么是CA?

    CA是Certificate Authority的缩写,也叫“证书授权中心”。(专业的解释看“这里”)

    它是负责管理和签发证书的第三方机构,就好比例子里面的中介——C 公司。一般来说,CA必须是所有行业和所有公众都信任的、认可的。因此它必须具有足够的权威性。就好比A、B两公司都必须信任C公司,才会找 C 公司作为公章的中介。

    ◇ 什么是CA证书?

    CA 证书,顾名思义,就是CA颁发的证书。

    前面已经说了,人人都可以找工具制作证书。但是你一个小破孩制作出来的证书是没啥用处的。因为你不是权威的CA机关,你自己搞的证书不具有权威性。

    这就好比上述的例子里,某个坏人自己刻了一个公章,盖到介绍信上。但是别人一看,不是受信任的中介公司的公章,就不予理睬。坏蛋的阴谋就不能得逞啦。

    文本后续提及的证书,若无特殊说明,均指 CA 证书。

    概念解释

    CA

    • CA(Certificate Authority)被称为证书授权中心,是数字证书发放和管理的机构。
    • 根证书是CA认证中心给自己颁发的证书,是信任链的起始点。安装根证书意味着对这个CA认证中心的信任。
    • 数字证书颁发过程一般为:
      1、用户首先产生自己的密钥对。
      2、将公共密钥(公钥)及部分个人身份信息传送给认证中心。
      3、认证中心在核实身份后,将执行一些必要的步骤,以确信请求确实由用户发送而来,然后,认证中心将发给用户一个数字证书,该证书内包含用户的个人信息和他的公钥信息,同时还附有认证中心的签名信息

    有4个概念一定要清楚:

    1.1 CA根证书,CA证书

    CA证书有两个作用:

    • 签发数字证书(用户找CA签发)
    • 校验数字证书(客户找CA校验收到的证书是否合法有效)

    在SSL通信握手过程中,需要将公钥数字证书交给对方,对方如何对数字证书进行校验?就是要在找到签发此证书的CA证书及证书链,一直找到CA根证书。

    1.2 数字证书

    使用CA证书的私钥给用户生成的公钥签名,生成公钥数字签名证书。证书是为了防伪、防冒充的。

    我们通常说的数字证书都是公钥数字证书:包含公钥、签发证书的CA证书信息、CA数字签名等数据。

    要验证数字证书的真伪,就需要找到签发这个证书的CA证书,要验证CA证书的真伪则需要找到签发CA证书的CA证书,就这样一直找到根证书。

    1.3 非对称密钥系统

    非对称加密:在非对称加密系统中,公钥加密的数据只有私钥才能解密,私钥加密的数据只有公钥才能解密。

    加密:公钥加密,私钥解密

    签名:私钥加密、公钥解密

    1.4 ssh免密登录

    在ssh免密登录中,需要将公钥放到远程服务器中,本地保存私钥,即可实现免密登录。

    证书的签发过程

    1. 服务方 S 向第三方机构CA提交公钥、组织信息、个人信息(域名)等信息并申请认证;
    2. CA 通过线上、线下等多种手段验证申请者提供信息的真实性,如组织是否存在、企业是否合法,是否拥有域名的所有权等;
    3. 如信息审核通过,CA 会向申请者签发认证文件-证书。证书包含以下信息:申请者公钥、申请者的组织信息和个人信息、签发机构 CA的信息、有效时间、证书序列号等信息的明文,同时包含一个签名;签名的产生算法:首先,使用散列函数计算公开的明文信息的信息摘要,然后,采用CA 的私钥对信息摘要进行加密,密文即签名;
    4. 客户端 C 向服务器 S 发出请求时,S 返回证书文件;
    5. 客户端 C 读取证书中的相关的明文信息,采用相同的散列函数计算得到信息摘要,然后,利用对应 CA的公钥解密签名数据,对比证书的信息摘要,如果一致,则可以确认证书的合法性,即公钥合法;
    6. 客户端然后验证证书相关的域名信息、有效时间等信息;
    7. 客户端会内置信任 CA 的证书信息(包含公钥),如果CA不被信任,则找不到对应 CA 的证书,证书也会被判定非法。

    在这个过程注意几点:

    1. 申请证书不需要提供私钥,确保私钥永远只能服务器掌握;
    2. 证书的合法性仍然依赖于非对称加密算法,证书主要是增加了服务器信息以及签名;
    3. 内置 CA 对应的证书称为根证书,颁发者和使用者相同,自己为自己签名,即自签名证书;
    4. 证书=公钥+申请者与颁发者信息+签名;

    https认证流程

    1. 服务器生成一对密钥,私钥自己留着,公钥交给数字证书认证机构(CA)
    2. CA进行审核,并用CA自己的私钥对服务器提供的公钥进行签名生成数字证书
    3. 将生成的数字证书部署到web服务器
    4. client在https建立连接时,需要先从服务器获取数字证书,在本机找到数字证书的签发机构的CA的公钥(根证书)对数字证书进行验证,比对一致,说明该数字证书确实是CA颁发的(得此结论有一个前提就是:客户端的CA公钥确实是CA的公钥,即该CA的公钥与CA对服务器提供的公钥进行签名的私钥确实是一对。),而CA又作为权威机构保证该公钥的确是服务器端提供的,从而可以确认该证书中的公钥确实是合法服务器端提供的。

    注:为保证第4步中提到的前提条件,CA的公钥必须要安全地转交给客户端**(CA根证书必须先安装在客户端)**,因此,CA的公钥一般来说由浏览器开发商内置在浏览器或操作系统的内部。于是,该前提条件在各种信任机制上,基本保证成立。

    http通信存在的问题

    1、容易被监听
    http通信都是明文,数据在客户端与服务器通信过程中,任何一点都可能被劫持。比如,发送了银行卡号和密码,hacker劫取到数据,就能看到卡号和密码,这是很危险的
    2、被伪装
    http通信时,无法保证通行双方是合法的,通信方可能是伪装的。比如你请求www.taobao.com,你怎么知道返回的数据就是来自淘宝,中间人可能返回数据伪装成淘宝。
    3、被篡改
    hacker中间篡改数据后,接收方并不知道数据已经被更改

    共享密钥加密和公开密钥加密

    后续内容的需要,这里插播一段共享密钥加密和公开密钥加密

    共享密钥加密
    共享密钥的加密密钥和解密密钥是相同的,所以又称为对称密钥

    公开密钥加密
    加密算法是公开的,密钥是保密的。公开密钥分为私有密钥和公有密钥,公有密钥是公开的,任何人(客户端)都可以获取,客户端使用公有密钥加密数据,服务端用私有密钥解密数据。

    异同
    共享密钥加密与公开密钥加密相比,加解密处理速度快,但公开密钥更适应互联网下使用

    https解决的问题

    https很好的解决了http的三个缺点(被监听、被篡改、被伪装),https不是一种新的协议,它是http+SSL(TLS)的结合体,SSL是一种独立协议,所以其它协议比如smtp等也可以跟ssl结合。https改变了通信方式,它由以前的http—–>tcp,改为http——>SSL—–>tcp;https采用了共享密钥加密+公开密钥加密的方式

    1、防监听
    数据是加密的,所以监听得到的数据是密文,hacker看不懂。
    2、防伪装
    伪装分为客户端伪装和服务器伪装,通信双方携带证书,证书相当于身份证,有证书就认为合法,没有证书就认为非法,证书由第三方颁布,很难伪造
    3、防篡改
    https对数据做了摘要,篡改数据会被感知到。hacker即使从中改了数据也白搭。

    https完整通信过程

    HTTPS在传输的过程中会涉及到三个密钥:

    • 服务器端的公钥和私钥,用来进行非对称加密
    • 客户端生成的随机密钥,用来进行对称加密

    一个HTTPS请求实际上包含了两次HTTP传输,可以细分为8步。
    1.客户端向服务器发起HTTPS请求,连接到服务器的443端口

    2.服务器端有一个密钥对,即公钥和私钥,是用来进行非对称加密使用的,服务器端保存着私钥,不能将其泄露,公钥可以发送给任何人。

    3.服务器将自己的公钥发送给客户端。

    4.客户端收到服务器端的证书之后,会对证书进行检查,验证其合法性,如果发现发现证书有问题,那么HTTPS传输就无法继续。严格的说,这里应该是验证服务器发送的数字证书的合法性。如果公钥合格,那么客户端会生成一个随机值,这个随机值就是用于进行对称加密的密钥,我们将该密钥称之为client key,即客户端密钥,这样在概念上和服务器端的密钥容易进行区分。然后用服务器的公钥对客户端密钥进行非对称加密,这样客户端密钥就变成密文了,至此,HTTPS中的第一次HTTP请求结束。

    5.客户端会发起HTTPS中的第二个HTTP请求,将加密之后的客户端密钥发送给服务器。

    6.服务器接收到客户端发来的密文之后,会用自己的私钥对其进行非对称解密,解密之后的明文就是客户端密钥,然后用客户端密钥对数据进行对称加密,这样数据就变成了密文。

    7.然后服务器将加密后的密文发送给客户端。

    8.客户端收到服务器发送来的密文,用客户端密钥对其进行对称解密,得到服务器发送的数据。这样HTTPS中的第二个HTTP请求结束,整个HTTPS传输完成。

    展开全文
  • 实现一个简单的 CA 系统,它包含以下功能: 证书生成:用户提供 Certificate Signing Request (CSR)和 公钥后,系统会自动为用户生成证书并通过邮箱发放,支持 用于 SSL 和代码签名的两类证书。 证书吊销:用户...
  • 医院CA认证建设方案教学内容.pdf医院CA认证建设方案教学内容.pdf医院CA认证建设方案教学内容.pdf医院CA认证建设方案教学内容.pdf医院CA认证建设方案教学内容.pdf医院CA认证建设方案教学内容.pdf医院CA认证建设方案...
  • 医院CA认证建设方案教学内容.docx医院CA认证建设方案教学内容.docx医院CA认证建设方案教学内容.docx医院CA认证建设方案教学内容.docx医院CA认证建设方案教学内容.docx医院CA认证建设方案教学内容.docx医院CA认证建设...
  • 医院CA认证建设方案 (2).pdf医院CA认证建设方案 (2).pdf医院CA认证建设方案 (2).pdf医院CA认证建设方案 (2).pdf医院CA认证建设方案 (2).pdf医院CA认证建设方案 (2).pdf医院CA认证建设方案 (2).pdf医院CA认证建设方案...
  • 医院CA认证建设方案 (2).docx医院CA认证建设方案 (2).docx医院CA认证建设方案 (2).docx医院CA认证建设方案 (2).docx医院CA认证建设方案 (2).docx医院CA认证建设方案 (2).docx医院CA认证建设方案 (2).docx医院CA认证...
  • CA认证及http实现方法

    千次阅读 2019-12-12 19:22:30
    1 数字证书认证过程: 证书请求文件:CSR是Cerificate Signing Request的英文缩写,即证书请求文件,也就是证书申请者在申请数字证书时由CSP(加密服务提供者)在生成私钥的同时也生成证书请求文件,证书申请者只要把...
  • CA认证系统

    2021-03-26 13:57:54
    1. CA CA:certification authorit,即证书颂发机构,它是一个负责发放和维护证书的实体,一般是第三方的。 2. 证书 证书:数字化的文件,用于表示一个实体(网站,个人等)的公共密钥和其他的属性,如名称、CA ...
  • CA认证及鉴定过程

    千次阅读 2021-09-16 14:30:33
    将CSR提交给CACA一般有2种认证方式: 1、域名认证,一般通过对管理员邮箱认证的方式,这种方式认证速度快,但是签发的证书中没有企业的名称; 2、企业文档认证,需要提供企业的营业执照 2.客户端鉴定证书 ...
  • Docker使用CA认证

    千次阅读 2020-02-03 17:54:56
    在idea中一键部署项目到Docker及CA认证 不使用 CA 认证的方法在 这里 本文直接开始介绍使用 CA 认证远程连接 docker,不使用 CA 认证也行,在自己的虚拟机里面可以这么干,但是放到联网的服务器上就不建议这么做了...
  • CA 认证过程及 https 实现方法

    千次阅读 2020-11-20 19:50:58
    CA 认证过程 CA 概述:Certificate Authority 的缩写,通常翻译成认证权威或者认证中心,主要用途是为用户发放数字证书。CA 认证的流程和公安局派出所颁发身份证的流程一样 认证中心(CA)的功能有:证书发放、证书...
  • CA认证完整实现步骤

    千次阅读 2020-02-11 18:59:26
    双向认证还要服务端根据ca根证书验证客户端证书和私钥,因此双向认证之前还需要生成客户端证书和私钥。 5.1、生成客户端证书 客户端证书生成步骤和服务端基本一样,填写的信息中,comm name也要是访问的域名,其他...
  • CA认证及搭建过程

    千次阅读 2020-03-05 14:07:33
    文章目录CA认证的介绍总结签证过程:搭建CA认证1. 安装ca认证软件包中心2. 配置一个自己的CA认证中心,生成CA的根证书和私钥。根证书包括 : CA公钥3. 生成CA的公钥和私钥4. 查看生成的CA根证书 CA认证的介绍 翻译成...
  • zhihuan-.rar_CA认证_C++_

    2021-08-11 23:53:28
    单表置换使用单表置换算法解密一段字符串。
  • linux下搭建CA认证服务器并认证服务

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 82,224
精华内容 32,889
关键字:

ca认证