您现在的位置是:首页 > 编程语言学习 > 其他编程语言 > 文章正文 其他编程语言

使用openssl实现私有CA的搭建和证书的颁发

2022-10-17 11:15:38 其他编程语言

简介这篇文章主要介绍了使用openssl实现私有CA的搭建和证书的颁发,使用openssl搭建私有CA,openssll和私有CA搭建相关的配置文件,里面包含了很...

这篇文章主要介绍了使用openssl实现私有CA的搭建和证书的颁发,使用openssl搭建私有CA,openssll和私有CA搭建相关的配置文件,里面包含了很多和证书相关的设置,后续创建对应文件的时候需要根据配置文件中的信息进行创建,需要的朋友可以参考下

CA的相关该概念

  • PKI:Public Key Infrastructure 公共密钥加密体系
  • CA:Certificate Authority,证书签发机构.实现身份的验证的一个机构。

CA工作逻辑

  • A和B通信需要将彼此的公钥传递给对方,但是直接传递公钥不安全。
  • 通过将公钥传递给认证机构,认证机构对公钥进行签名(私钥加密,公钥解密)并加上一些属性信息。
  • CA机构将证书制作完成后再返还给用户。
  • 用户将证书发送给需要通信的一方,对方通过使用CA机构的公钥来进行解密得到他的公钥。

根CA:根CA用于管理下级CA,子CA向根CA获取授权,使得它能给用户颁发证书。

Cert:证书

证书:CA对用户公钥进行签名后形成的一个文件。

证书的来源:

  • 自签名证书
  • CA机构颁发的证书

CA机构颁发的证书流程:

  • 用户生成证书请求文件:.csr
  • 将证书请求文件发送给CA
  • CA进行签名并颁发证书

CSR是英文Certificate Signing Request的缩写,即证书签名请求

私有CA的搭建

可以通过以下工具来搭建私有CA

  • OpenCA
  • openssl

使用openssl搭建私有CA:

openssll和私有CA搭建相关的配置文件

里面包含了很多和证书相关的设置,后续创建对应文件的时候需要根据配置文件中的信息进行创建。

  1. [root@CentOS8 tls]#  vim /etc/pki/tls/openssl.cnf 
  2. [ ca ] 
  3. default_ca  = CA_default# 默认使用的CA 
  4.  
  5. #################################################################### 
  6. [ CA_default ] 
  7. dir = /etc/pki/CA   # 存放和CA相关的文件的目录(CentOS7这个文件默认存在) 
  8. certs   = $dir/certs# 存放颁发的证书  Cert:证书 
  9. crl_dir = $dir/crl  # 存放被吊销的证书 
  10. database= $dir/index.txt# 存放ca的索引(需要人为创建) 
  11. new_certs_dir   = $dir/newcerts # 存放新证书的位置 
  12. certificate = $dir/cacert.pem   # ca的自签名证书 
  13. serial  = $dir/serial   # 证书的编号(第一次需要人为创建并编号,后面会自动递增) serial:连续的 
  14. crlnumber   = $dir/crlnumber# 证书吊销列表的编号 
  15. crl = $dir/crl.pem  # 证书吊销列表的文件 
  16. private_key = $dir/private/cakey.pem# CA的私钥 
  17. x509_extensions = usr_cert  # The extensions to add to the cert 
  18. name_opt= ca_default# Subject Name options 
  19. cert_opt= ca_default# Certificate field options 
  20.  
  21. policy  = policy_match  #指定使用的匹配策略 
  22.  
  23. # For the CA policy 
  24. [ policy_match ] 
  25. countryName = match 
  26. stateOrProvinceName = match 
  27. organizationName= match 
  28. organizationalUnitName  = optional 
  29. commonName  = supplied 
  30. emailAddress= optional 

三种策略:match匹配、optional可选、supplied提供

  • match:要求申请填写的信息跟CA设置信息必须一致(前三项)
  • optional:可有可无,跟CA设置信息可不一致
  • supplied:必须填写这项申请信息

范例:CentOS8搭建私有CA

流程:

1.创建对应的文件和目录(创建的文件和目录需要和配置文件里面的信息对应)

2.生成CA自己的私钥

3.利用CA的私钥生成自签名证书

1. 创建对应的文件和目录

  1. [root@CentOS8 CA]# mkdir -pv /etc/pki/CA/{certs,crl,newcerts,private
  2. mkdir: created directory '/etc/pki/CA/certs' #存放颁发的证书文件 
  3. mkdir: created directory '/etc/pki/CA/crl'  #存放吊销的证书文件 
  4. mkdir: created directory '/etc/pki/CA/newcerts' #存放新生成的证书文件 
  5. mkdir: created directory '/etc/pki/CA/private'  #存放CA自己的私钥 
  6.  
  7. #证书的数据库文件:存放证书的颁发等信息,不需要人工维护里面的内容,只需要创建对应的文件就行了,会自动往里面写入数据的 
  8. [root@centos8 ~]# touch /etc/pki/CA/index.txt 
  9.  
  10. #颁发证书的序号(十六进制):第一个证书颁发的时候使用的就是这个编号,后续会自动递增 
  11. [root@centos8 ~]# echo 01 > /etc/pki/CA/serial 

2. 生成CA自己的私钥

  1. [root@CentOS8 CA]# openssl genrsa -out private/cakey.pem 2048 
  2. Generating RSA private key, 2048 bit long modulus (2 primes) 
  3. ..........................+++++ 
  4. ........................................................................+++++ 
  5. e is 65537 (0x010001) 

3.颁发自签名证书

  1. [root@CentOS8 CA]# openssl req -new -x509 -key /etc/pki/CA/private/cakey.pem -days 3650 -out /etc/pki/CA/cacert.pem 
  2. You are about to be asked to enter information that will be incorporated 
  3. into your certificate request. 
  4. What you are about to enter is what is called a Distinguished Name or a DN. 
  5. There are quite a few fields but you can leave some blank 
  6. For some fields there will be a default value, 
  7. If you enter '.', the field will be left blank. 
  8. ----- 
  9. Country Name (2 letter code) [XX]:CN 
  10. State or Province Name (full name) []:SC 
  11. Locality Name (eg, city) [Default City]:CD 
  12. Organization Name (eg, company) [Default Company Ltd]:SX 
  13. Organizational Unit Name (eg, section) []:LL 
  14. Common Name (eg, your name or your server's hostname) []:tom 
  15. Email Address []:111 
  16.  
  17. 选项: 
  18. -new:创建一个新的证书,生成新证书签署请求 
  19.  
  20. -x509:表示证书的格式,专用于CA生成自签证书 
  21.  
  22. -key:生成请求时用到的私钥文件 
  23.  
  24. -days n:证书的有效期限 
  25.  
  26. -out /PATH/TO/SOMECERTFILE: 证书的保存路径 

查看自签名证书的方法

  1. 查看自签名证书的信息 
  2. [root@centos8 ~]#openssl x509 -in /etc/pki/CA/cacert.pem -noout -text 
  3.  
  4. -in:指定输入的文件 
  5.  
  6. -noout:不输出为文件 
  7.  
  8. -text:以文本方式来进行显示 

说明:颁发自签名证书的时候会要求输入需要输入国家、身份、组织等信息。

用户向私有CA申请证书的流程

1.生成私钥文件

2.通过私钥文件生成证书申请文件,若是match这种策略。填写的 国家 省 组织必须一致

3.CA颁发证书

4.查看证书

1.生成私钥文件

私钥一般使用key作为后缀要标识

  1. [root@CentOS8 CA]# mkdir /data/app1 
  2.  
  3. [root@CentOS8 app1]# openssl genrsa -out /data/app1/app1.key 2048 
  4. Generating RSA private key, 2048 bit long modulus (2 primes) 
  5. .................................+++++ 
  6. ...............................................................................................+++++ 
  7. e is 65537 (0x010001) 

2.通过私钥文件生成证书申请文件

证书申请文件的后缀一般都是以csr为后缀作为标识

  1. [root@CentOS8 app1]# openssl req -new -key /data/app1/app1.key -out /data/app1/app1.csr 
  2. You are about to be asked to enter information that will be incorporated 
  3. into your certificate request. 
  4. What you are about to enter is what is called a Distinguished Name or a DN. 
  5. There are quite a few fields but you can leave some blank 
  6. For some fields there will be a default value, 
  7. If you enter '.', the field will be left blank. 
  8. ----- 
  9. Country Name (2 letter code) [XX]:CN  #国家 
  10. State or Province Name (full name) []:CN #省份 
  11. Locality Name (eg, city) [Default City]:CN #组织 
  12. Organization Name (eg, company) [Default Company Ltd]:CN 
  13. Organizational Unit Name (eg, section) []:CN 
  14. Common Name (eg, your name or your server's hostname) []:CN 
  15. Email Address []:CN 
  16.  
  17. Please enter the following 'extra' attributes 
  18. to be sent with your certificate request 
  19. A challenge password []: 
  20. An optional company name []: 

说明:

采用match这种策略,默认有三项内容必须和CA一致:国家,省份,组织,如果不同,会出现下面的提示

如果采用的是option这种策略的话就不用保持一致都可以

3. CA 颁发证书

ca需要使用用户的证书申请文件才能颁发证书,利用证书申请文件里面的用户私钥来实现数字签名。

  1.  
  1. [root@CentOS8 app1]# openssl ca -in /data/app1/app1.csr  -out /etc/pki/CA/certs/app1.crt -days 1000  
  2. Using configuration from /etc/pki/tls/openssl.cnf  
  3. Check that the request matches the signature  
  4. Signature ok  
  5. Certificate Details:  
  6. Serial Number: 15 (0xf)  
  7. Validity  
  8. Not Before: Oct 14 06:53:07 2022 GMT  
  9. Not After : Jul 10 06:53:07 2025 GMT  
  10. Subject:  
  11. countryName   = CN  
  12. stateOrProvinceName   = CN  
  13. organizationName  = CN  
  14. organizationalUnitName= CN  
  15. commonName= CN  
  16. emailAddress  = CN  
  17. X509v3 extensions:  
  18. X509v3 Basic Constraints:   
  19. CA:FALSE  
  20. Netscape Comment:   
  21. OpenSSL Generated Certificate  
  22. X509v3 Subject Key Identifier:   
  23. 12:C5:3F:8E:86:E4:E8:3C:06:B1:01:79:90:EA:B6:66:32:53:3E:6A  
  24. X509v3 Authority Key Identifier:   
  25. keyid:10:59:CD:C9:34:58:5E:30:67:43:0A:3E:DD:7C:63:2B:9C:60:50:3A  
  26.   
  27. Certificate is to be certified until Jul 10 06:53:07 2025 GMT (1000 days)  
  28. Sign the certificate? [y/n]:y  
  29. 1 out of 1 certificate requests certified, commit? [y/n]y  
  30. Write out database with 1 new entries  
  31. Data Base Updated  
  32. [root@CentOS8 CA]# tree  
  33. .  
  34. ├── cacert.pem  
  35. ├── certs  
  36. │   └── app1.crt #给用户生成的生成的证书文件  
  37. ├── crl  
  38. ├── index.txt  
  39. ├── index.txt.attr  
  40. ├── index.txt.old  #前一个文件的备份  
  41. ├── newcerts  
  42. │   └── 0F.pem #和app1.crt是同一个东西,自动生成的一个备份文件  
  43. ├── private  
  44. │   └── cakey.pem  
  45. ├── serial  
  46. └── serial.old  
  47.  
  48.  
  49. 4 directories, 9 files 
  50.  
  51. #serial:存放的是下一个证书的证书编号 

查看证书的有效性

  1. [root@CentOS8 CA]# openssl ca -status 0F  #0F就是这个证书的标号 
  2. Using configuration from /etc/pki/tls/openssl.cnf 
  3. 0F=Valid (V) 
  4.  
  5. V:标识生效的   R:标识无效的证书 

查看证书的信息


  1. openssl x509 -in /etc/pki/CA/certs/app1.crt -noout -text 

例如

  1. [root@CentOS8 CA]# openssl x509 -in /etc/pki/CA/certs/app1.crt -noout -issuer 
  2. issuer=C = CN, ST = CN, L = CN, O = CN, OU = CN, CN = CN, emailAddress = CN 

证书文件后缀

  1. 后缀规定: 
  2. .crt #证书文件的标识 
  3.  
  4. .csr #证书申请文件的标识  证书申请完成后,这个证书申请文件就没啥用了 
  5.  
  6. .key #私钥的标识  .pem也是私钥的标识,但是windows不是别pem结尾的文件 

一个证书申请文件只能申请一次证书。

实现一个申请文件申请多个证书的方法;

  1. root@CentOS8 CA]# pwd 
  2. /etc/pki/CA 
  3. [root@CentOS8 CA]# cat index.txt.attr  
  4. unique_subject = yes 
  5.  
  6.  
  7. unique_subject = yes  #把yes变为no就可以了 

证书的吊销


  1. openssl ca -revoke /PATH/FILE 

例如:

  1. [root@CentOS8 CA]# openssl ca -revoke certs/app1.crt 
  2. Using configuration from /etc/pki/tls/openssl.cnf 
  3. Revoking Certificate 0F. 
  4. Data Base Updated 
  5.  
  6. [root@CentOS8 CA]# openssl ca -status 0F  
  7. Using configuration from /etc/pki/tls/openssl.cnf 
  8. 0F=Revoked (R) 
  9.  
  10. [root@CentOS8 CA]# cat /etc/pki/CA/index.txt 
  11. R   250710065307Z   221014072459Z   0F  unknown /C=CN/ST=CN/O=CN/OU=CN/CN=CN/emailAddress=CN 

生成证书吊销列表文件

公开被吊销的文件。其他用户可以获取已经吊销了的证书文件列表

  1. #需要创建一个clinumer文件才可以  吊销证书也需要一个吊销证书的number 类似于index.txt 
  2.  
  3. #这个文件默认不存在,需要手动创建出来 
  4.  
  5. echo 01 > /etc/pki/CA/crlnumber 
  6.  
  7. openssl ca -gencrl -out /etc/pki/CA/crl.pem   #证书吊销文件的路径是约定好的 

 

相关文章

站点信息