>  기사  >  운영 및 유지보수  >  openssl ca에 대한 자세한 소개

openssl ca에 대한 자세한 소개

零下一度
零下一度원래의
2017-07-19 09:19:404099검색

中心 CA Authorization Center CA 및 디지털 인증서의 개념과 관련하여 OpenSSL 및 SSL 디지털 인증서의 개념 스티커를 옮겨주세요.

openssl은 오픈 소스 프로그램 모음입니다. 첫째, 많은 암호화 라이브러리를 구현하는 일반 기능을 갖춘 암호화 라이브러리인 libcryto, SSL 메커니즘을 구현하는 libssl입니다. TLS/SSL 기능을 구현하기 위한 세 번째는 암호화 및 암호 해독을 구현할 수 있고 CA로도 사용할 수 있는 다기능 명령줄 도구인 openssl로, 인증서를 생성하고 인증서를 취소할 수 있습니다.

기본적으로 openssl은 ubuntu 및 CentOS에 설치됩니다. CENTOS 6.X의 SSL 인증서 디렉터리 구조:

/ETC/PKI/CA/

뉴스 스토어 CA 서명(발급) 디지털 인증서(인증서 백업 디렉터리)

CA의 개인 키 저장을 위한 비공개

crl 폐기된 인증서

/etc/pki/tls/
cert.pem certs/ca-bundle.crt
certs/에 대한 소프트 링크 서버의 인증서 저장 디렉터리, 자체 인증서 및 내장 인증서를 저장할 수 있습니다.
               ca-bundle .crt 인증서 내장
PRIVATE 인증서 키 저장소 카탈로그
Openssl.cnf Openssl의 기본 구성 파일


구성 파일 삭제(OpenSSL CA 명령에 대한 기본값(기본값 /etc/pki/opensl.cnf)) 매우 강력하므로 내 다른 기사

구성 파일 openssl.cnf

와 함께 읽어 보시기 바랍니다. 구성 파일을 이해하지 못하면 다음 내용이 불명확할 수 있습니다.

인증서에 서명할 때 필요한 파일의 구조는 구성 파일에 지정되어 있습니다. openssl.cnf의 기본 구조 요구 사항은 다음과 같습니다.

[ CA_default ]dir             = /etc/pki/CA             # 定义路径变量
certs           = $dir/certs              # 已颁发证书的保存目录
database        = $dir/index.txt          # 数据库索引文件
new_certs_dir   = $dir/newcerts           # 新签署的证书保存目录
certificate     = $dir/cacert.pem         # CA证书路径名
serial          = $dir/serial             # 当前证书序列号
private_key     = $dir/private/cakey.pem  # CA的私钥路径名

디렉토리 /etc/pki/CA/{certs,newcerts, private}이 설치되어 있는데 openssl 이후에 기본적으로 존재하므로 따로 생성할 필요는 없으나, 인증서의 데이터베이스 파일인 index.txt와 시리얼 파일 serial을 생성해야 하며, 시리얼 번호 파일에 시리얼 번호를 먼저 부여해야 합니다. , 예: "01".

[root@xuexi tmp]# touch /etc/pki/CA/index.txt 

[root@xuexi tmp]# echo "01" > /etc/pki/CA/serial

또한 인증서 요청에 서명하려면 CA 자체 개인 키 파일과 CA 자체 인증서가 필요합니다. 먼저 CA의 개인 키를 생성하고 구성 파일의 private_key에 지정된 값에 저장합니다. 기본값은 /etc/pki/CA/private/cakey.pem입니다.
[root@xuexi tmp]# openssl genrsa -out /etc/pki/CA/private/cakey.pem

(1). openssl ca를 사용하여 자체 CA를 구축하세요
테스트 환경에서는 CA 자체 서명만 가능합니다. -x509", "openssl x509" 및 "openssl ca"는 인증서 요청 파일을 자체 서명할 수 있습니다. 여기서는 openssl ca 명령 자체의 자체 서명 방법만 소개합니다.

먼저 CA의 인증서 요청 파일을 생성합니다. 반드시 CA의 개인 키 파일인 /etc/pki/CA/private/cakey.pem을 사용하여 자체 서명할 인증서 요청 파일을 생성하는 것이 좋습니다. 관리가 편리합니다. 요청 파일을 생성할 때 기본적으로 국가 이름, 주 또는 지방 이름, 조직 이름 및 일반 이름을 제공해야 합니다.

[root@xuexi tmp]# openssl req -new -key /etc/pki/CA/private/cakey.pem -out rootCA.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) []:FJLocality Name (eg, city) [Default City]:XMOrganization Name (eg, company) [Default Company Ltd]:JMOrganizational Unit Name (eg, section) []:ITCommon Name (eg, your name or your server's hostname) []:www.iwant.comEmail Address []:.
 
Please enter the following 'extra' attributes
to be sent with your certificate request
A challenge password []:.
An optional company name []:.

그런 다음 openssl ca 명령을 사용하여 인증서 요청 파일에 자체 서명합니다. 대화형 쿼리가 2개 있으면 자체 서명이 성공한다는 의미입니다. 실패하면 데이터베이스 파일 index.txt가 생성되는지, 일련번호 파일 serial이 존재하고 일련번호 값이 있는지, 경로가 개인키 파일 cakey.pem이 맞는지, 인증서 생성 여부, 파일요청시 제공해야 할 내용이 제공되지 않는지 등
[root@xuexi tmp]# openssl ca -selfsign -in rootCA.csr
Using configuration from /etc/pki/tls/openssl.cnf    # 默认采用/etc/pki/tls/openssl.cnf作为配置文件
Check that the request matches the signature         # 验证证书请求文件的数字签名,确保该证书请求文件是完整未修改过的
Signature ok
Certificate Details:                                 # 待生成证书的信息
        Serial Number: 1 (0x1)                        # 序列号为1
        Validity
            Not Before: Jun 27 10:06:29 2017 GMT      # 证书有效期起始日为2017-6-17 10:06:29Not After : Jun 27 10:06:29 2018 GMT      # 证书有效期终止日为2018-6-17 10:06:29Subject:                                      # Subject信息,subject是非常重要的信息
            countryName               = CN
            stateOrProvinceName       = FJ
            organizationName          = JM
            organizationalUnitName    = IT
            commonName                = www.iwant.com
        X509v3 extensions:
            X509v3 Basic Constraints:
                CA:FALSE
            Netscape Comment:
                OpenSSL Generated Certificate
            X509v3 Subject Key Identifier:
                A5:0D:DD:D6:47:C6:24:74:20:F4:62:77:F6:A9:63:3E:52:D2:8A:66X509v3 Authority Key Identifier:
                keyid:A5:0D:DD:D6:47:C6:24:74:20:F4:62:77:F6:A9:63:3E:52:D2:8A:66
 Certificate is to be certified until Jun 27 10:06:29 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           # 向数据库文件添加一条该证书的记录
Certificate:                                    # 该证书的信息
    Data:
        Version: 3 (0x2)
        Serial Number: 1 (0x1)
    Signature Algorithm: sha1WithRSAEncryption
        Issuer: C=CN, ST=FJ, O=JM, OU=IT, CN=www.iwant.com
        Validity
            Not Before: Jun 27 10:06:29 2017 GMT
            Not After : Jun 27 10:06:29 2018 GMT
        Subject: C=CN, ST=FJ, O=JM, OU=IT, CN=www.iwant.com
        Subject Public Key Info:
            Public Key Algorithm: rsaEncryption
                Public-Key: (1024 bit)
                Modulus:00:94:49:33:f4:90:a4:fc:a4:6b:65:75:4c:be:4f:
                    d1:3f:95:bd:24:60:c8:45:f9:eb:00:31:ac:45:6b:
                    ae:bb:63:bf:f2:a3:0c:e3:d3:50:20:33:1e:d9:e1:
                    8a:49:42:c6:e0:67:6d:3a:cb:2f:9c:90:ab:4c:10:
                    7a:4a:82:e1:6e:a0:6a:63:84:56:1c:a2:5f:11:60:99:e0:cd:20:68:e9:98:40:68:c2:43:7c:97:12:ee:31:8e:b1:73:7d:36:99:97:49:31:50:c1:8c:47:10:16:f9:5d:37:11:00:73:3b:01:62:9b:36:36:97:08:48:31:93:56:3f:6a:d9:a6:99Exponent: 65537 (0x10001)
        X509v3 extensions:
            X509v3 Basic Constraints:
                CA:FALSE
            Netscape Comment:
                OpenSSL Generated Certificate
            X509v3 Subject Key Identifier:
                A5:0D:DD:D6:47:C6:24:74:20:F4:62:77:F6:A9:63:3E:52:D2:8A:66X509v3 Authority Key Identifier:
                keyid:A5:0D:DD:D6:47:C6:24:74:20:F4:62:77:F6:A9:63:3E:52:D2:8A:66
 
    Signature Algorithm: sha1WithRSAEncryption
         1e:4e:f4:e4:c9:33:52:85:69:ae:b4:2a:37:37:44:90:9b:52:
         b3:e9:89:1c:b2:f2:17:41:d8:05:02:63:9a:4f:64:4d:c9:ce:
         0c:81:48:22:4f:73:8a:4c:f7:b8:bf:64:b2:77:8a:2e:43:80:         39:03:de:27:19:09:d2:88:39:11:8f:8b:4b:37:c0:12:68:ef:         79:5b:28:d4:cf:c9:b8:e1:77:24:6e:b4:5b:83:4a:46:49:a1:
         ad:5c:b7:d8:da:49:9a:45:73:b9:8e:eb:1a:9c:2e:6c:70:d3:
         c5:db:9c:46:02:59:42:bf:ad:bc:21:4c:d1:6b:6b:a7:87:33:
         1a:6b-----BEGIN CERTIFICATE-----MIICiTCCAfKgAwIBAgIBATANBgkqhkiG9w0BAQUFADBMMQswCQYDVQQGEwJDTjEL
MAkGA1UECAwCRkoxCzAJBgNVBAoMAkpNMQswCQYDVQQLDAJJVDEWMBQGA1UEAwwN
d3d3Lml3YW50LmNvbTAeFw0xNzA2MjcxMDA2MjlaFw0xODA2MjcxMDA2MjlaMEwx
CzAJBgNVBAYTAkNOMQswCQYDVQQIDAJGSjELMAkGA1UECgwCSk0xCzAJBgNVBAsM
AklUMRYwFAYDVQQDDA13d3cuaXdhbnQuY29tMIGfMA0GCSqGSIb3DQEBAQUAA4GN
ADCBiQKBgQCUSTP0kKT8pGtldUy+T9E/lb0kYMhF+esAMaxFa667Y7/yowzj01Ag
Mx7Z4YpJQsbgZ206yy+ckKtMEHpKguFuoGpjhFYcol8RYJngzSBo6ZhAaMJDfJcS
7jGOsXN9NpmXSTFQwYxHEBb5XTcRAHM7AWKbNjaXCEgxk1Y/atmmmQIDAQABo3sw
eTAJBgNVHRMEAjAAMCwGCWCGSAGG+EIBDQQfFh1PcGVuU1NMIEdlbmVyYXRlZCBD
ZXJ0aWZpY2F0ZTAdBgNVHQ4EFgQUpQ3d1kfGJHQg9GJ39qljPlLSimYwHwYDVR0j
BBgwFoAUpQ3d1kfGJHQg9GJ39qljPlLSimYwDQYJKoZIhvcNAQEFBQADgYEAHk70
5MkzUoVprrQqNzdEkJtSs+mJHLLyF0HYBQJjmk9kTcnODIFIIk9zikz3uL9ksneK
LkOAOQPeJxkJ0og5EY+LSzfAEmjveVso1M/JuOF3JG60W4NKRkmhrVy32NpJmkVz
uY7rGpwubHDTxducRgJZQr+tvCFM0Wtrp4czGms=
-----END CERTIFICATE-----Data Base Updated

서명에 성공하면 일련의 파일이 /etc/pki/CA 디렉터리에 생성됩니다.
[root@xuexi tmp]# tree -C /etc/pki/CA/etc/pki/CA
├── certs
├── crl
├── index.txt
├── index.txt.attr
├── index.txt.old
├── newcerts
│   └── 01.pem
├── private
│   └── cakey.pem
├── serial
└── serial.old

newcerts 디렉터리에 있는 01.pem은 현재 자체 서명된 인증서 파일입니다. 구성의 "certificate=$dir/cacert.pem" 항목에 따르면 CA 자체 인증서이기 때문입니다. 파일을 /etc/pki/CA 디렉터리에 배치하고 cacert.pem이라는 이름을 지정해야 나중에 다른 인증서 요청에 서명할 수 있습니다.
[root@xuexi tmp]# cp /etc/pki/CA/newcerts/01.pem /etc/pki/CA/cacert.pem

이제 자체 구축 CA가 완성되었습니다. 데이터베이스 인덱스 파일과 일련 번호 파일을 확인하세요.
[root@xuexi tmp]# cat /etc/pki/CA/index.txt
V       180627100629Z           01      unknown /C=CN/ST=FJ/O=JM/OU=IT/CN=www.iwant.com

[root@xuexi tmp]# cat /etc/pki/CA/serial02

그러면 다음에 인증서 요청에 서명할 때 일련번호는 "02"가 됩니다.
위의 CA 자체 구축 과정을 요약하면 다음과 같습니다.

[root@xuexi tmp]# touch /etc/pki/CA/index.txt 
[root@xuexi tmp]# echo "01" > /etc/pki/CA/serial
[root@xuexi tmp]# openssl genrsa -out /etc/pki/CA/private/cakey.pem
[root@xuexi tmp]# openssl req -new -key /etc/pki/CA/private/cakey.pem -out rootCA.csr
[root@xuexi tmp]# openssl ca -selfsign -in rootCA.csr
[root@xuexi tmp]# cp /etc/pki/CA/newcerts/01.pem /etc/pki/CA/cacert.pem

以上过程是完全读取默认配置文件创建的,其实很多过程是没有那么严格的,openssl ca命令自身可以指定很多选项覆盖配置文件中的项,但既然提供了默认的配置文件及目录结构,为了方便管理,仍然建议完全采用配置文件中的项。

(2).为他人颁发证书。

首先申请者创建一个证书请求文件。

[root@xuexi tmp]# openssl req -new -key privatekey.pem -out youwant1.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) []:FJLocality Name (eg, city) [Default City]:XMOrganization Name (eg, company) [Default Company Ltd]:JMOrganizational Unit Name (eg, section) []:.Common Name (eg, your name or your server's hostname) []:www.youwant.comEmail Address []:.
 
Please enter the following 'extra' attributes
to be sent with your certificate request
A challenge password []:.
An optional company name []:.

其中Country Name、State or Province Name、Organization Name和Common Name必须提供,且前三者必须和CA的subject中的对应项完全相同。这些是由配置文件中的匹配策略决定的。

[ ca ]
default_ca      = CA_default            # The default ca section
[ CA_default ]
policy          = policy_match
[ policy_match ]
countryName             = matchstateOrProvinceName     = matchorganizationName        = matchorganizationalUnitName  = optional
commonName              = suppliedemailAddress            = optional

"match"表示openssl ca要签署的证书请求文件中的项要和CA证书中的项匹配,即要相同,"supplied"表示必须要提供的项,"optional"表示可选项,所以可以留空。

现在就可以将证书请求文件发送给CA,让CA帮忙签署。

[root@xuexi tmp]# openssl ca -in youwant1.csr

签署成功后,查看下/etc/pki/CA下的文件结构。

[root@xuexi tmp]# tree -C /etc/pki/CA/
/etc/pki/CA/├── cacert.pem
├── certs
├── crl
├── index.txt
├── index.txt.attr
├── index.txt.attr.old
├── index.txt.old
├── newcerts
│   ├── 01.pem
│   └── 02.pem
├── private
│   └── cakey.pem
├── serial
└── serial.old 
4 directories, 10 files

其中"02.pem"就是刚才签署成功的证书,将此证书发送给申请者即表示颁发完成。

再看下数据库索引文件和序列号文件。

[root@xuexi tmp]# cat /etc/pki/CA/index.txt
V       180627100629Z           01      unknown /C=CN/ST=FJ/O=JM/OU=IT/CN=www.iwant.com
V       180627110022Z           02      unknown /C=CN/ST=FJ/O=JM/CN=www.youwant.com

[root@xuexi tmp]# cat /etc/pki/CA/serial03

(3).openssl ca命令用法

经过上面的示例,应该对openssl ca命令的用法大致了解了,下面是其完整的用法说明,不包括crl相关功能。

openssl ca [-verbose] [-config filename] [-name section] [-startdate ] [-enddate ] [-days arg] [-md arg] [-policy arg] [-keyfile arg] [-key arg] [-passin arg] [-cert ]
[-selfsign] [- ] [-out ] [-notext] [-outdir ] [-infiles] [-ss_cert ] [-preserveDN] [-noemailDN] [-batch] [-extensions section] [-extfile section] [-subj arg] [-utf8]

要注意,ca命令是用于签署证书的,所以它所需要的文件除了配置文件外就是私钥文件和证书请求文件,而签名后生成的文件是证书文件,因此使用"-in"指定的对象是待签署文件,"-infiles"则是指定多个待签署文件,"-keyfile"是指定私钥文件,"-out"是指定输出的证书文件。

【选项说明:】-config filename :指定要使用的配置文件,指定后将忽略openssl.cnf中指定的关于ca的配置选项。-name section    :指定使用配置文件中的那个section。指定后将忽略openssl.cnf中的default_ca段。-in filename     :指定要被CA签署的单个证书请求文件。根CA为其他证书签署时使用。-infiles         :该选项只能是最后一个选项,该选项所接的所有参数都被认为是要被签署的证书请求文件,即一次性签署多个请求文件时使用的选项。-selfsign        :自签署。指定-ss_cert选项时该选项被忽略。-ss_cert filename:将被CA自签署的单个证书文件。也就是说要重新签署证书。-out filename    :证书的输出文件,同时也会输出到屏幕。不指定时默认输出到stdout。-outdir dir_name :证书的输出目录。指定该选项时,将自动在此目录下生成一个文件名包含16进制serial值的".pem"证书文件。-cert            :CA自己的证书文件。-keyfile filename:指定签署证书请求时的私钥文件,即CA自己的私钥文件。-key passwd_value:指定私钥的加密密码。-passin arg      :传递解密密码-verbose         :打印操作执行时的详细信息-notext          :禁止以文本格式将证书输出到"-out"指定的文件中-days arg        :证书有效期限,从创建时刻开始算startdate,有效期结束点为enddate。-startdate       :自定义证书的开始时间,和"-enddate"一起使用可以推算出证书有效期。-enddate         :自定义证书的结束时间。-md alg          :指定单向加密算法-policy arg      :该选项是配置文件中的section内容,该选项指定了证书信息中的field部分是否需要强制提供还是要强制匹配,
                 :或者可提供可不提供。详细的见配置文件说明。-extensions section:指定当前创建的证书使用配置文件中的哪个section作为扩展属性。-batch           :签署时使用批处理模式,即非交互模式。该模式下不会有两次询问(是否签署、是否提交)。-subj arg        :替换证书请求中的subject,格式/type0=value0/type1=value1/type2=...

配置文件关于ca的部分,其中被标记为必须项的表示配置文件中或者命令行中必须给出该选项及其值。

new_certs_dir    :等同于"-outdir"选项。必须项
certificat       :等同于"-cert"选项,CA自己的证书文件。必须项
private_key      :等同于"-keyfile"选项,签署证书请求文件时的私钥文件,即CA自己的私钥文件。必须项
default_days     :等同于"-days"选项
default_startdate:等同于"-startdate"选项。
default_enddate  :等同于"-enddate"选项。
default_md       :等同于"-md"选项。必须项
database         :openssl维护的数据库文件。存放证书条目信息及状态信息。必须项
serial           :已颁发证书的序列号(16进制)文件。必须项且该文件中必须存在一个序列值
unique_subject   :如果设置为yes,database中的subject列值必须不重复。如果设置为no,允许subject重复。默认是yes,
                 :这是为了兼容老版本的Openssl,推荐设置为no。
x509_extensions  :等同于"-extensions"选项。
policy           :等同于"-policy"选项。必须项
name_opt/cert_opt:证书的展示格式,虽非必须但建议设置为ca_default,若不设置将默认使用老版本的证书格式(不建议如此)。
                 :伪命令ca无法直接设置这两个选项,而伪命令x509的"-nameopt"和"-certopt"选项可以分别设置。
copy_extensions  :决定证书请求中的扩展项如何处理的。如果设置为none或不写该选项,则扩展项被忽略并且不复制到证书中去。
                 :如果设置为copy,则证书请求中已存在而证书中不存在的扩展项将复制到证书中。
                 :如果设置为copyall,则证书请求中所有的扩展项都复制到证书中,此时若证书中已存在某扩展项,则先删除再复制。
                 :该选项的主要作用是允许证书请求为特定的扩展项如subjectAltName提供值。
                 :使用该选项前请先查看man ca中的WARNINGS部分。建议一般简单使用时设置为none或不设置。

위 내용은 openssl ca에 대한 자세한 소개의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.