互联网上为了数据传输的安全,双方在通信的过程中一般使用加密或身份验证的机制来保证数据的机密性和完整性。
在linux中,能够实现对称加密的工具:Openssl
Openssl:SSL的开源实现,主要包括三个部分:
libcrypto:通用加密库(提供了各种加密函数)
libssl:TLS/SSL的实现
基于会话的、实现了身份认证、数据机密性和会话完整性的TLS/SSL库
openssl:多用途的命令行工具。
还可以实现私有证书颁发机构。
openssl包含很多子命令,可以实现诸多功能,自己去开发哦。^_^
这里我们举例让openssl实现私有CA:(Red Hat Enterprise Linux Server release 5.8 )
第一步、生成一对密钥,用公钥做成证书
第二步、生成自签署证书
先去网上下载openssl的软件,我们这里用yum源进行安装(前面文章中有安装软件的介绍,可以参考)
安装好openssl的工具就可以创建自签署证书了。
生成一对密钥:我们一般使用RSA的,RSA既可以加密也可以签名,生成rsa密钥的命令:genrsa
1,openssl genrsa 生成私钥 重定向保存文件
后跟NUMBER(数字) 是指生成多长的私钥 相当于 [openssl genrsa -out filename NUMBER]:生成密钥并保存至文件保存改权限为600
2,(umask 077;openssl genrsa -out filename NUMBER)
注:umask的设置是在假定文件拥有666权限上进行的,文件的权限就是目录的默认权限减去执行权限
对于目录来说,是在777权限上进行的,目录的权限就是777减去umask的掩码数值
3,openssl rsa -in filename -pubout 从该文件的私钥中提取出公钥
生成自签署证书:命令 req
openssl req -new -x509 -key [密钥文件] -out [自签署证书名.crt] -days [有效期限]
这里会有几项让你自己填写的具体信息
其中有一项主机名很重要,一定要和主机名称(DNS名)保持一致
自己CA完成,就可以给别人发证了。
查看证书里面的内容:openssl x509 -text -in [证书名称]
客户端申请证书:
客户端自己生成一个申请,把申请交给CA,让CA签署就可以了。
- dir = ../../CA # CA在什么地方,可以将其改为/etc/pki/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 # 当前证书吊销列表文件
- private_key = $dir/private/cakey.pem# CA私钥存放位置
- RANDFILE = $dir/private/.rand #随机数文件(自己生成)
- #以上没有的文件需要自己创建的哦
- [ req_distinguished_name ]
- countryName = Country Name (2 letter code)
- countryName_default = GB #默认国家
- countryName_min = 2
- countryName_max = 2
- stateOrProvinceName = State or Province Name (full name)
- stateOrProvinceName_default = Berkshire #默认州
- localityName = Locality Name (eg, city)
- localityName_default = Newbury #默认城市
- 0.organizationName = Organization Name (eg, company)
- 0.organizationName_default =My Company Ltd #公司名称
- organizationalUnitName = Organizational Unit Name (eg, section)
- #organizationalUnitName_default = #组织名称,手动启用。
- commonName = Common Name (eg, your name or your server\'s hostname) #主机名要根据实际设置的
- commonName_max = 64
- emailAddress = Email Address #邮箱地址和CA的也是不一样的
- emailAddress_max = 64
注:以上默认内容可以根据实际手动进行更改的,(一般后两项是不同的,不需要在这里填写)
这些在配置文件中设置好了,自己申请CA的时候就不用去手动填写了。
下面以实例来解析下创建私有CA的过程:
CA服务器上配置:
1、vim /etc/pki/tls/openssl.cn
- dir=/etc/pki/CA
- countryName_default = CN
- stateOrProvinceName_default = HeNan
- localityName_default = Zhengzhou
- 0.organizationName_default = Magedu
- #1.organizationName_default =
- organizationalUnitName_default = Tech
- 以上这些我在这里手动进行更改了。
2、cd /etc/pki/CA
- # mkdir certs newcerts crl
- # touch index.txt
- # touch serial
- # echo 01 > serial
3、生成自签证书
(umask 077; openssl genrsa -out private/cakey.pem 2048)
openssl req -x509 -new -key private/cakey.pem -out cacert.pem -days 3650
- Country Name (2 letter code) [CN]:
- State or Province Name (full name) [HeNan]:
- Locality Name (eg, city) [Zhengzhou]:
- Organization Name (eg, company) [Magedu]:
- Organizational Unit Name (eg, section) [Tech]:
- Common Name (eg, your name or your server's hostname) []:ca.123.com
- Email Address []:ca@123.com
- 配置文件中设置了,执行该命令的时候会出现以上在配置文件中输入的内容,不需要再手动输入了
- (主机名和Email 还需要自己填写一下额)
客户端证书申请方:
1、为某服务生成密钥
- 1、为某服务生成密钥:
- # mkdir /etc/httpd #路径根据自己需要设置
- # cd /etc/httpd/
- # mkdir ssl
- # cd ssl
- # (umask 077; openssl genrsa -out httpd.key 1024)
- # openssl req -new -key httpd.key -out httpd.csr
- Country Name (2 letter code) [CN]:
- State or Province Name (full name) [HeNan]:
- Locality Name (eg, city) [Zhengzhou]:
- Organization Name (eg, company) [Magedu]:
- Organizational Unit Name (eg, section) [Tech]:
- Common Name (eg, your name or your server's hostname) []:www.aa.com
- Email Address []:aa@123.com
- Please enter the following 'extra' attributes
- to be sent with your certificate request
- A challenge password []:
- An optional company name []: #最后这两行是问你是否加密存放证书的,
- 不加密的话可以按回车
2、将此请求通过某方式传递给CA服务器
(不是在一台主机上要向另一台主机发送请求,在这里我只使用了一台主机,
在自己机器上就可以签了,这步就省略了^_^)
3、CA签署证书(在CA服务器上操作)
# openssl ca -in vsftpd.csr -out vsftpd.crt -days N
cat /etc/pki/CA/index.txt 里面记录的就有签署的证书的信息了。
- V 221022094454Z 01 unknown
- /C=CN/ST=HeNan/O=Magedu/OU=Tech/CN=www.aa.com/emailAddress=aa@123.com
以上内容就是我制作的私有证书哦^_^
转载于:https://blog.51cto.com/90112526/1035754