推荐连接
PKI及创建私有私有CA
先上图:
PKI公钥基础设施
以CA为核心生产的另一套架构体系:PKI Public Key Infrastructure
签证机构:CA
用户在注册机构注册证书,CA就会签发用户的公钥认证,并且和申请者的信息绑定在一起并且签名后,以证书形式发给申请者,然后在本地的证书存取库备份。(可以理解成现实社会的公安部)
注册机构:RA
一般用户都是在这里注册证书(可以理解成现实社会的派出所)
证书吊销列表:CRL
如果用户私钥丢失,必须要申请吊销证书,否则可能会被别人冒名顶替。
证书存取库:
所有发出的证书都会在这里存一份,如果丢失证书可以在这里得到,如果丢失私钥那么只能申请证书撤销
X.509v3
定义了证书的结构以及认证协议标准
版本号:标识证书的版本
序列号:标识证书的唯一证书,类似于身份证
签名算法ID:证书的算法标识
发行者名称:证书颁发这的可识别名
有效期限:证书有效的时间段
主体名称:证书拥有着的可识别名
主体公钥:关键部分
发行者的唯一标识:证书颁发者的唯一标识符
主体的唯一标识:证书拥有者的唯一标识符
扩展信息
发行者的签名:证书颁发者对证书的签名,上述整个内容做单向加密,得到的特征码用自己私钥加密,并附加到后面,用来生产发行者的签名;
数字证书CA
公钥在网络传输过程中,无法保证可信度,容易被窃取或伪装,所以我们就需要一个受信任的第三方机构(CA),来保证公钥信息的安全分发。
如果用户想得到一份属于自己的证书,他应先向 CA 提出申请。在 CA 判明申请者的身份后,便为他分配一个公钥,并且 CA 将该公钥与申请者的身份信息绑在一起,并为之签字后,便形成证书发给申请者。
如果一个用户想鉴别另一个证书的真伪,他就用 CA 的公钥对那个证书上的签字进行验证,一旦验证通过,该证书就被认为是有效的。证书实际是由证书签证机关(CA)签发的对用户的公钥的认证。
问题:机构A发给用户A证书,机构B发给用户B证书,那么用户A和B还是不信任的,这个时候就需要有一个根CA,让所有证书颁发机构都信任根,用户就可以通过查询根得知此证书是否可信;如何保证用户在获取CA证书的时候被劫持,这点不用担心,操作系统提供商如微软的Windows在安装完成操作系统的时候就自动让你的计算机信任了根CA
有了根CA之后,证书颁发机构信任根CA,不同证书颁发机构只要信任根CA那么颁发的证书都是受信任的。
SSL/TLS协议:
- SSL:安全套接字层(ssl 1.0,ssl 2.0,ssl 3.0)
- TLS:传输层安全( tls 1.0,tls 1.1,tls 1.2,tls 1.3)
OpenSSL组成
- libcrypto 加密解密库
- libssl ssl库
- openssl 多用途命令行工具
SSL会话主要三步:
1、客户端向服务器端索要并验证证书;
2、双方协商生成"会话密钥";
3、双方采用"会话密钥"进行加密通信;
SSL Handshake Protocol:(ssl会话1、2步) 第一阶段:ClientHello:发送 支持的协议版本,比如tls 1.2; 客户端生成一个随机数,稍后用户生成"会话密钥" 支持的加密算法,比如AES,3DES,RSA; 支持的压缩算法 第二阶段:ServerHello:回应 确认使用的加密通信协议版本,比如tls 1.2; 服务器端生成一个随机数,稍后用于生产"会话密钥" 确认使用的加密方法; 服务器证书; (索要客户端证书) 第三阶段: 验正服务器证书,在确认无误后取出其公钥;(发证机构、证书完整性、证书持有者、证书有效期、吊销列表) 发送以下信息给服务器端: 一个随机数; 编码变更通知,表示随后的信息都将用双方商定的加密方法和密钥发送; 客户端握手结束通知; 第四阶段: 收到客户端发来的第三个随机数pre-master-key后,计算生成本次会话所有到的“会话密钥”; 向客户端发送如下信息: 编码变更通知,表示随后的信息都将用双方商定的加密方法和密钥发送; 服务端握手结束通知;
OpenSSL
组件:
libcrypto, libssl主要由开发者使用;
openssl:多用途命令行工具;
openssl命令:
子命令,分为三类:
标准命令:enc,ca,req,genrsa,...
消息摘要命令(dgst子命令)
加密命令(enc子命令)
查看使用帮助:whatis enc ... ; man enc ...
[root@centos7 ~]# openssl ? openssl:Error: '?' is an invalid command. Standard commands 标准命令 asn1parse ca ciphers cms crl crl2pkcs7 dgst dh dhparam dsa dsaparam ec ecparam enc engine errstr gendh gendsa genpkey genrsa nseq ocsp passwd pkcs12 pkcs7 pkcs8 pkey pkeyparam pkeyutl prime rand req rsa rsautl s_client s_server s_time sess_id smime speed spkac ts verify version x509 Message Digest commands (see the `dgst' command for more details) 消息摘要命令 md2 md4 md5 rmd160 sha sha1 Cipher commands (see the `enc' command for more details) 加密命令 aes-128-cbc aes-128-ecb aes-192-cbc aes-192-ecb aes-256-cbc aes-256-ecb base64 bf bf-cbc bf-cfb bf-ecb bf-ofb camellia-128-cbc camellia-128-ecb camellia-192-cbc camellia-192-ecb camellia-256-cbc camellia-256-ecb cast cast-cbc cast5-cbc cast5-cfb cast5-ecb cast5-ofb des des-cbc des-cfb des-ecb des-ede des-ede-cbc des-ede-cfb des-ede-ofb des-ede3 des-ede3-cbc des-ede3-cfb des-ede3-ofb des-ofb des3 desx idea idea-cbc idea-cfb idea-ecb idea-ofb rc2 rc2-40-cbc rc2-64-cbc rc2-cbc rc2-cfb rc2-ecb rc2-ofb rc4 rc4-40 seed seed-cbc seed-cfb seed-ecb seed-ofb zlib
对称加密:
工具:openssl enc, gpg 支持的算法:3des, aes, blowfish, towfish enc命令: 加密:openssl enc -e -CIPHERNAME -a -salt -in /PATH/FROM/SOMEFILE -out /PATH/TO/SOMECIPHERFILE 参数说明: -e:表示加密 -CIPHERNAME:表示使用的算法 -salt:加入"佐料" -a:bash64文本编码格式,不加-a就是二进制编码格式; -in:加密的文件 -out:加密后的文件 解密:openssl enc -d -CIPHERNAME -a -salt -in /PATH/FROM/SOMECIPHERFILE -out /PATH/TO/SOMEFILE 参数说明: -d:表示解密 -CIPHERNAME:表示使用的算法 -in:表示解密的文件 -out:表示解密后的文件 加密:~]# openssl enc -e -des3 -a -salt -in fstab -out fstab.ciphertext 解密:~]# openssl enc -d -des3 -a -salt -out fstab -in fstab.ciphertext
演示:对称加密解密 [root@centos7 scripts]# openssl enc -e -des3 -a -salt -in fstab -out fstab.ciphertext 加密 enter des-ede3-cbc encryption password: #输入密码 Verifying - enter des-ede3-cbc encryption password: #确认密码 [root@centos7 scripts]# cat fstab.ciphertext U2FsdGVkX19q4VpN/QX7RTSmrhKaZzOPX1tZM5evDzrqD1pQCew8RxWgopV2fmZg MzN6RrfUn+r/eOQziyrxWreed1FOZaOqWnu3uApQv+834sE3vjosM5BdTtHVuIdY 9M43iqP2pNs/6/x8RrhM0l6Z6FMoVHf4XylIM3rPeFg7taeumwDwyEBD7h/zDm12 +HPVsjLkeqO7we/gY8oUJX9R2jMPuqxVYcwORlHtA/+0tdlKe2Yg/r6KuVsSqVZj 1ak1NO6CErqHMHMJbLgraZzUxSw+Sj4MWb5Ktdgohw8idXMtiGP4eCl+p6fm0ByF 92zZPMVALnzLxpa1Zgj+P7I2R45Ha7uSauXOO+j9mhqyvqU5kV3M5kMb+YcsLOaC bPkZUEMLC1jd9mHEmXa/IBQRL8/2mR5iO9s29lIv+iuzVPkUYIIOzXKk/70sSEQs egq8TBwbIPAXMfMh8bcQCiNML/Erk7LyBYTPpCpjYY7ohOGF43/Tv8Tv8g+Rngw1 fX+n9W9tC3V6tBwLNY2szbcwdC/3uyaz6ypG9U2TSzV2PXv1wXKxf3MrEJpt75do hXFhhm6iUQLm5KhG3itTAk9Vw49tcyzqYv0dk6w8e1zhwd5Aja5u5blNVxs4AkGB Evq9ar9NtAh3Xm0yskXJSmOwrhLwj8m6lZLow9qQ8g+psRprPVt4kF73BIiquKIv skZfvmyLwZLh2TnL2yR1cNmAG4uSfCg+b7gX5+LauvKyGCztuzHx9WGNpoodLdZb +B1z28bB00M/JcOLBjb9SF2/LRty2ehJoqJqbgM4Exu3Ot6tODh+wg== [root@centos7 scripts]# openssl enc -d -des3 -a -salt -out fstab.plaintext -in fstab.ciphertext 解密 enter des-ede3-cbc decryption password: #输入密码 [root@centos7 scripts]# cat fstab.plaintext # # /etc/fstab # Created by anaconda on Thu Dec 10 08:41:34 2015 # # Accessible filesystems, by reference, are maintained under '/dev/disk' # See man pages fstab(5), findfs(8), mount(8) and/or blkid(8) for more info # UUID=bb5e9683-2846-4cc0-970a-d855a901cfb8 / xfs defaults 0 0 UUID=55bee71d-fa56-4e6b-8230-5328c19dbf6b /boot xfs defaults 0 0 UUID=51573532-4998-4892-97f8-85338c87d39d /usr xfs defaults 0 0 UUID=7754eaa6-9ed3-419c-9be3-732c0f0557a3 swap swap defaults 0 0
单向加密:
工具:openssl dgst, md5sum, sha1sum, sha224sum, sha256sum, sha384sum, sha512sum
dgst命令:
openssl dgst -md5 /PATH/TO/SOMEFILE
演示:提取fstab文件的特征码 [root@centos7 scripts]# md5sum fstab #md5sum命令 4bc58d8550554654fb2eaf4616cfe023 fstab [root@centos7 scripts]# openssl dgst -md5 fstab #openssl dgst生成特征码 MD5(fstab)= 4bc58d8550554654fb2eaf4616cfe023 [root@centos7 scripts]# echo "hello world" | openssl dgst -md5 #直接计算数据特征码 (stdin)= 6f5902ac237024bdd0c176cb93063dc4
生成用户密码:
工具:passwd, openssl passwd passwd命令: openssl passwd -1 -salt SALT 说明:就算密钥一样,只要salt的随机数不一样,那么输出的加密密码就是不一样的,也就无法反推出密码。 不支持-6 sha512算法
演示:生成用户密码 [root@centos7 scripts]# openssl passwd -1 -salt 12345678 Password: $1$12345678$qC3FkBB/fvNXSO1sQEM5o1 [root@centos7 scripts]# openssl passwd -1 -salt 12345679 Password: $1$12345679$9LIaq1TxKlBWlZDDfzNqO. [root@centos7 scripts]# perl -e 'print crypt ("emacle2013",q($1$12345678)),"\n"' #perl也可以指定salt生成密码 $1$12345678$qC3FkBB/fvNXSO1sQEM5o1 [root@centos7 scripts]# openssl passwd -1 -salt $(openssl rand -hex 4) #openssl rand生成随机数 Password: $1$21a5692b$u0S4js1zIm6F54GgYy0Ll/
生成随机数:
工具:openssl rand ~]# openssl rand -hex NUM ~]# openssl rand -base NUM
演示:生成随机数: [root@centos7 scripts]# openssl rand -base64 10 #真正使用时把==去掉就可以了 Gu4w9zn7pholPA== [root@centos7 scripts]# openssl rand -base64 10 jRIQEQp0OMqghg== [root@centos7 scripts]# openssl rand -hex 4 bced0c1c [root@centos7 scripts]# openssl rand -hex 4 81c91004
加密依赖随机数: Linux系统上的随机数生成器: /dev/random:仅从熵池返回随机数;随机数用尽,阻塞; /dev/urandom:从熵池返回随机数;随机数用尽,会利用软件生成伪随机数,非阻塞; 伪随机数不安全; 熵池:内核在内存中维护的一段内存空间; 熵池中随机数的来源: 硬盘IO中断时间间隔; 键盘IO中断时间间隔; [root@centos7 scripts]# head -1 /dev/urandom ˣݓA«^ެ4˻m ą]¹`֯㮕þe8쩮th6iJދµSQ¶µ㊕짋6ѽ͙=zֳ커u@z k½wv³pEtG´»¬dӻ੨҈ꗶz [root@centos7 scripts]# head -200 /dev/urandom | cksum | cut -f1 -d" " 668634837 #cksum 将读取文件内容,生成唯一的表示整型数据,只有文件内容不变,生成结果就不会变化,与php crc函数
公钥加密:
加密解密 算法:RSA,ELGamal 工具:openssl rsautl,gpg 数字签名 算法:RSA,DSA,ELGamal 工具:openssl rsautl,gpg 密钥交换 算法:DH 生成密钥: 生成私钥: ~]# (umask 077; openssl genrsa -out /PATH/TO/PRIVATE_KEY_FILE NUM_BITS) 提出公钥: ~]# openssl rsa -in /PATH/FROM/PRIVATE_KEY_FILE -pubout 注意:在bash命令行上放在小括号中执行的命令,其实是通过打开一个子shell进程进行的; NUM_BITS支持位数512、768、1024、2048、4096...必须是2^n倍的位数; 公钥是从私钥里提取出来的;
演示:1024 公钥加密 [root@centos7 scripts]# openssl genrsa 1024 #生成私钥 Generating RSA private key, 1024 bit long modulus ................++++++ ...........++++++ e is 65537 (0x10001) -----BEGIN RSA PRIVATE KEY----- MIICXQIBAAKBgQDAKr56HlpEZVi5/MQh6yhClLmLXZajS6xx0gyLmYDbFy4NWswG Ruy91N9YJZfOlN/vzgEOl7gq++Vq8AEao0NGqzpFIjJ4uKg2QwtrMtFIOgfTaI94 K3I/Q080pxkE9yj13p8BtA9n6YrrkmIZNaWcni2nndExy62vHZR3d82nFwIDAQAB AoGAc/HWV2w03oufiyg9VpHCCtodUT84gnJIK6ymsRv/KTHFMX2VGDx23tqvn0mf XJ9qtg+/h4R3NEgj1e/VWrMjBVZPkFZNJKYjNfPTHRQ2SbnhFocOe4y1ii0tekFS ZgA2wEAyJd9/qSicoznZbtMRL9RW/DxOJZz25eklCediqxECQQDtGfpxGAYtlxwZ YQTVG81IJQyYGj1uyL91rTDktIIw3cJNudLnub13E9GB27oVtjwamyUGBC4CAbwZ I4L8fBTTAkEAz3viL/KjaiPqWeDG1b5MZRF6dR1H7GvSKZf4c0mYhhDGoE0URP1Q yqg6gn2+YcBAo27E6yVzsT9534hVMINKLQJBAMD9RDyJsX2qYdTGg4hy+MSgY3/q 29Yw0KaYMhP2WYIs/tsFRgYXyYADQaTRlMXXb1S4s4oSHODFSLWtkhCxbsECQEFN mYRD1yEqCrGdKJfPnFXXKXbA74k+6lfDCCSpDkNr9kgv2mhYXlxalIfLsecsTmvi CkKEeCRaeS5cx4tMV0UCQQDPjhaYU31XZn9HVna0Z+tVZivQC2dFRTn0Uy5z+FqY ycgfJVfiTFH2uEgJucrNWwlNiIPGBq3zrhqq1prhSPOr -----END RSA PRIVATE KEY----- [root@centos7 scripts]# openssl genrsa 1024 > /tmp/mykey.private Generating RSA private key, 1024 bit long modulus ..++++++ ................................++++++ e is 65537 (0x10001) [root@centos7 scripts]# openssl genrsa -out /tmp/mykey2 1024 Generating RSA private key, 1024 bit long modulus ..++++++ .......++++++ e is 65537 (0x10001) [root@centos7 scripts]# ls -l /tmp/mykey* #密钥应该只有自己可读写 -rw-r--r--. 1 root root 887 1æ 6 15:56 /tmp/mykey2 -rw-r--r--. 1 root root 887 1æ 6 15:54 /tmp/mykey.private [root@centos7 scripts]# (umask 077;openssl genrsa -out /tmp/mykey3 1024) #生成私钥 Generating RSA private key, 1024 bit long modulus .........++++++ ................................++++++ e is 65537 (0x10001) [root@centos7 scripts]# ls -l /tmp/mykey* -rw-r--r--. 1 root root 887 1æ 6 15:56 /tmp/mykey2 -rw-------. 1 root root 887 1æ 6 15:58 /tmp/mykey3 -rw-r--r--. 1 root root 887 1æ 6 15:54 /tmp/mykey.private [root@centos7 scripts]# openssl rsa -in /tmp/mykey3 -pubout 提出公钥 writing RSA key -----BEGIN PUBLIC KEY----- MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQCeUWS16lcqVU92xToDl48WWTPO fdFAdpuQbvT6fLgWHI+pz6uRoqHjbZRmKbNqsM6OP+pxaNhbyanhhT19cNDLQvfR PIVEvhC9JPg35Clh99DxyOkSZFqRxG0tuPCdSMOK2YKaH4pMxc4iHOIoMCy73qPD sYiUJmluIpH0Pw/IYQIDAQAB -----END PUBLIC KEY-----
CA
公共信任的CA,私有CA;
建立私有CA:
openssl命令
OpenCA工具:二次封装openssl
1、生成私钥
2、生成自签署证书,并为CA提供所需要的目录及文件即可
配置文件:/etc/pki/tls/openssl.cnf
#################################################################### [ ca ] default_ca = CA_default # The default ca section #################################################################### [ 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 #序列号,证书生成就从这里获得序列号,每签署一个序列号自动加一 crlnumber = $dir/crlnumber #定义证书吊销编号 crl = $dir/crl.pem #当前正在使用的crl private_key = $dir/private/cakey.pem #CA自己的私钥文件 RANDFILE = $dir/private/.rand #随机数的获取位置 default_days = 365 #默认有效期365天 default_crl_days= 30 #默认吊销列表存放时间 default_md = sha256 #默认摘要算法sha256 #################################################################### [ req ] 向证书签发机构的签署请求 default_bits = 2048 default_md = sha256 default_keyfile = privkey.pem distinguished_name = req_distinguished_name attributes = req_attributes x509_extensions = v3_ca # The extentions to add to the self signed cert
步骤: (1) 生成私钥;私钥用于签发证书时,向证书添加数字签名使用 ~]# (umask 077; openssl genrsa -out /etc/pki/CA/private/cakey.pem 4096) (2) 生成自签证书;每个通信方都导入此证书至“受信任的证书颁发机构” ~]# openssl req -new -x509 -key /etc/pki/CA/private/cakey.pem -out /etc/pki/CA/cacert.pem -days 3655 -new:生成新证书签署请求; -x509:生成自签格式证书,专用于创建私有CA时; -key:生成请求时用到的私有文件路径,自动抽签公钥; -out:生成的请求文件路径;如果自签操作将直接生成签署过的证书; -days:证书的有效时长,单位是day; (3) 为CA提供所需的目录及文件; ~]# mkdir -pv /etc/pki/CA/{certs,crl,newcerts} ~]# touch /etc/pki/CA/{serial,index.txt} ~]# echo 01 > /etc/pki/CA/serial
演示: (1) 生成私钥 [root@centos7 scripts]# (umask 077; openssl genrsa -out /etc/pki/CA/private/cakey.pem 4096) Generating RSA private key, 4096 bit long modulus .....................................................................................................................................................................++ ........................++ e is 65537 (0x10001) [root@centos7 scripts]# ls /etc/pki/CA/private/cakey.pem -l -rw-------. 1 root root 3243 1月 9 13:31 /etc/pki/CA/private/cakey.pem (2) 生成自签证书 [root@centos7 scripts]# openssl req -new -x509 -key /etc/pki/CA/private/cakey.pem -out /etc/pki/CA/cacert.pem -days 3655 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) []:Beijing #省 Locality Name (eg, city) [Default City]:Beijing #市 Organization Name (eg, company) [Default Company Ltd]:YY #公司 Organizational Unit Name (eg, section) []:Ops #部门 Common Name (eg, your name or your server's hostname) []:ca.server.com #主机名 Email Address []:caadmin@server.com #管理员邮箱 [root@centos7 scripts]# ls /etc/pki/CA cacert.pem certs crl newcerts private (3) 为CA提供所需的目录及文件 [root@centos7 ~]# mkdir -pv /etc/pki/CA/{certs,crl,newcerts} [root@centos7 ~]# touch /etc/pki/CA/{serial,index.txt} [root@centos7 ~]# echo 01 > /etc/pki/CA/serial
请求签署证书
要用到证书进行安全通信的服务器,需要向CA请求签署证书;
步骤:(以httpd为例) (1) 用到证书的主机生成私钥; ~]# mkdir /etc/httpd/ssl ~]# cd /etc/httpd/ssl ~]# (umask 077; openssl genrsa -out /etc/httpd/ssl/httpd.key 2048) (2) 生成证书签署请求 ~]# openssl req -new -key /etc/httpd/ssl/httpd.key -out /etc/httpd/ssl/httpd.csr -days 365 注意: (a) 其中的subject信息部分,要与CA的保持一致; (b) Common Name要使用此主机在通信真实使用名字; (c) csr在得到CA证书后可以保留可以删除 (3) 将请求通过可靠方式发送给CA主机; 可以通过ssh协议,或者其他安全的方式发给CA (4) 在CA主机上签署证书; ~]# openssl ca -in /tmp/httpd.csr -out /etc/pki/CA/certs/httpd.crt -days 365 csr:Certificate Signing Request证书签名请求的简写 crt:Certificate证书的简写 查看证书中的信息: ~]# openssl x509 -in /etc/pki/CA/certs/httpd.crt -noout -serial -subject 参数说明: x509:子命令 -in:读取文件 -noout:输出 -serial:查看证书序列号 -subject:查看证书主题标识
演示: (1) 用到证书的主机生成私钥 [root@centos7 ~]# mkdir /etc/httpd/ssl -p [root@centos7 ~]# cd /etc/httpd [root@centos7 httpd]# (umask 077; openssl genrsa -out /etc/httpd/ssl/httpd.key 2048) Generating RSA private key, 2048 bit long modulus ..............................................................................+++ ......................................+++ e is 65537 (0x10001) [root@centos7 httpd]# ls /etc/httpd/ssl/httpd.key -l -rw-------. 1 root root 1675 1月 9 13:48 /etc/httpd/ssl/httpd.key (2) 生成证书签署请求 [root@centos7 httpd]# openssl req -new -key /etc/httpd/ssl/httpd.key -out /etc/httpd/ssl/httpd.csr -days 365 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) []:Beijing Locality Name (eg, city) [Default City]:Beijing Organization Name (eg, company) [Default Company Ltd]:YY Organizational Unit Name (eg, section) []:Ops Common Name (eg, your name or your server's hostname) []:www.emacle.com Email Address []:webmaster@emacle.com Please enter the following 'extra' attributes to be sent with your certificate request A challenge password []: An optional company name []: [root@centos7 httpd]# ll /etc/httpd/ssl/ 总用量 8 -rw-r--r--. 1 root root 1054 1月 9 13:54 httpd.csr -rw-------. 1 root root 1675 1月 9 13:48 httpd.key (3) 将请求通过可靠方式发送给CA主机 (4) 在CA主机上签署证书 [root@centos7 ~]# openssl ca -in /tmp/httpd.csr -out /etc/pki/CA/certs/httpd.crt -days 365 Using configuration from /etc/pki/tls/openssl.cnf Check that the request matches the signature Signature ok Certificate Details: Serial Number: 1 (0x1) Validity Not Before: Jan 9 06:11:09 2016 GMT Not After : Jan 8 06:11:09 2017 GMT Subject: countryName = CN stateOrProvinceName = Beijing organizationName = YY organizationalUnitName = Ops commonName = www.emacle.com emailAddress = webmaster@emacle.com X509v3 extensions: X509v3 Basic Constraints: CA:FALSE Netscape Comment: OpenSSL Generated Certificate X509v3 Subject Key Identifier: D3:AE:5A:58:44:BF:94:A8:82:7B:CD:69:18:A6:64:EB:FF:EE:86:9A X509v3 Authority Key Identifier: keyid:51:DF:B3:92:F8:44:77:94:4A:AF:11:FB:9C:B7:20:E0:C8:38:6F:AE Certificate is to be certified until Jan 8 06:11:09 2017 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 Data Base Updated 查看证书索引 [root@centos7 ~]# cat /etc/pki/CA/index.txt V 170108061109Z 01 unknown /C=CN/ST=Beijing/O=YY/OU=Ops/CN=www.emacle.com/emailAddress=webmaster@emacle.com V:表示已签过 查看证书中的信息 [root@centos7 ~]# openssl x509 -in /etc/pki/CA/certs/httpd.crt -noout -serial -subject serial=01 subject= /C=CN/ST=Beijing/O=YY/OU=Ops/CN=www.emacle.com/emailAddress=webmaster@emacle.com
吊销证书:
步骤: (1) 客户端获取要吊销的证书的serial(在使用证书的主机执行): ~]# openssl x509 -in /etc/pki/CA/certs/httpd.crt -noout -serial -subject (2) CA主机吊销证书 先根据客户提交的serial和subject信息,对比其与本机数据库index.txt中存储的是否一致; 吊销: # openssl ca -revoke /etc/pki/CA/newcerts/SERIAL.pem 其中的SERIAL要换成证书真正的序列号; [root@centos7 ~]# ls /etc/pki/CA/newcerts/ 01.pem (3) 生成吊销证书的吊销编号(第一次吊销证书时执行) # echo 01 > /etc/pki/CA/crlnumber (4) 更新证书吊销列表 # openssl ca -gencrl -out thisca.crl 参数说明: -gencrl:生成证书吊销列表 -out:输出文件 查看crl文件: # openssl crl -in /PATH/FROM/CRL_FILE.crl -noout -text
这个证书制作好后我们就可以在windows下安装我们制作好的证书了:
windows没配服务,这里以linux的apache服务为例访问443端口:
apache服务:开启ssl 1、vi /usr/local/apache/conf/httpd.conf 去掉这行注释 Include conf/extra/httpd-ssl.conf 2、vi /usr/local/apache/conf/extra/httpd-ssl.conf 修改以下两项,将openssl生成的证书cp到相应路径(/etc/httpd2/) SSLCertificateFile "/etc/httpd2/httpd.crt" SSLCertificateKeyFile "/etc/httpd2/httpd.key" ServerName www.emacle.com:443 3、重启服务 apachectl start
在浏览器里输入https://www.emacle.com就会看到证书的效果了;
参考:
openssl官网:http://www.openssl.org/
Transport Layer Security:https://en.wikipedia.org/wiki/Transport_Layer_Security