Apache SSL/TLS加密证书使用大全(HTTPS)

本文基于Ubuntu 17 lts
一 SSL/TLS
SSL(Secure Sockets Layer),处于可靠点对点连接的网络层(如TCP)和应用层(如HTTP)之间的协议层.通过相互间的认证,数字签名,加密私有信息,提供客户和服务器之间的安全的通信.

版本如下
在这里插入图片描述

SSL建立会话有个握手流程,这个序列是可以变化的,取决服务器的配置,是否要求客户认证或服务器认证.
在这里插入图片描述
协商数据传输使用的密码算法
建立和共享会话密钥
证明来自服务器(可选)
证明来自客户(可选)

数据传输流程
在这里插入图片描述

MAC (Message Authentication Code)
(加密算法等请参考相关文档)

二 什么是RSA私钥,CSR
RSA私钥,是一个数字文件,用来解密发送给你的信息.他包含你通过证书签发给别人使用的公共部分,使别人能加密信息并发送给你.
CSR (Certificate Signing Request )是一个数字文件,包含你的公钥和名字.将他发送给一个认证机构,将其转换成一个签名的证书.
证书包含你的RSA公钥,你的名字,CA的名字,数字签名(用来验证并获得你的RSA公钥),用他来发送信息使你可以解密相关内容

三 创建自签名SSL认证

a 创建 .key ,.crt 文件

$ openssl req -new -x509 -nodes -out server.crt -keyout server.key
# 生成无密码的key和crt文件

这两个文件可以选定一个目录保存,后面要用
SSLCertificateFile “/path/to/this/server.crt”
SSLCertificateKeyFile “/path/to/this/server.key”
这个密钥文件没有被加密.给密钥文件加密用下面命令:

$ openssl rsa -des3 -in server.key -out server.key.new
$ mv server.key.new server.key
#备份好密钥文件,和密码,保存在安全的地方

四 创建一个真实的SSL认证
安装了openssl
创建rsa私有密钥(server.key)

$ openssl genrsa -des3 -out server.key 2048
$ openssl rsa -noout -text -in server.key  #查看私钥内容
$ openssl rsa -in server.key -out server.key.unsecure #不加密的私钥

创建一个CSR(server.csr),输出为PEM格式

$ openssl req -new -key server.key -out server.csr
$ openssl req -noout -text -in server.csr  #查看CSR内容

此处需要输入一些参数,其中Common Name ,应该是FQDN (“Fully Qualified Domain Name”)
比如https://www.foo.dom/, 需要输入"www.foo.dom"

在这里插入图片描述

然后发送CSR给认证机构,一旦有了签名证书就可用于Apache.你可以购买一个商业的,或自己创建一个签名证书.
如果你已经获取证书你可以查看

$ openssl x509 -noout -text -in server.crt

此时你只需要server.key,server.crt, 在相关配置中修改如下

SSLCertificateFile    "/path/to/this/server.crt"
SSLCertificateKeyFile "/path/to/this/server.key"

而 server.csr不再需要.

五 创建自己的CA
其实也非常简单,命令如下

$ openssl genrsa -des3 -out server.key 2048     #生成密钥,密串
$ openssl req -new -x509 -nodes -sha1 -days 365 -key server.key -out server.crt -extensions usr_cert  
#生成crt,并填写相关信息

七 Apache2 配置HTTPS验证
必备条件

$sudo apt-get install apache2
$sudo apt-get install openssl
$sudo a2enmod ssl    #开启自带ssl模块
此命令相当于
sudo ln -s /etc/apache2/mods-available/ssl.load /etc/apache2/mods-enabled
sudo ln -s /etc/apache2/mods-available/ssl.conf /etc/apache2/mods-enabled

如果没有a2enmod指令,也可直接在apache2.conf中设置SSL模块加载:
LoadModule ssl_module /usr/lib/apache2/modules/mod_ssl.so

修改Apache2配置
/etc/apache2/port.conf 无需更改,默认支持443端口
/etc/apache2/sites-available/目录下生成一个缺省的default-ssl文件,做一个连接
ln -s /etc/apache2/sites-available/default-ssl /etc/apache2/sites-enabled/001-ssl
使用openssl生成server.key,获得server.crt(参照前面的三,四,五步骤).
修改 /etc/apache2/sites-enabled/001-ssl,

SSLEngine on
SSLCertificateFile    "/path/to/this/server.crt"       #前面生成的key,crt文件这里要用
SSLCertificateKeyFile "/path/to/this/server.key"

重启服务即可
systemctl restart apache2

其他
修改密钥密码

$ openssl rsa -des3 -in server.key -out server.key.new
$ mv server.key.new server.key

去掉Apache启动时密钥对话框

$ cp server.key server.key.org
$ openssl rsa -in server.key.org -out server.key
$ chmod 400 server.key   #保证只有ROOT可读

验证密钥是否与证书匹配
a 验证证书公钥和你私钥的公共分配,

$ openssl x509 -noout -text -in server.crt
$ openssl rsa -noout -text -in server.key

b ‘modulus’ 和 `public exponent’ 要匹配

$ openssl x509 -noout -modulus -in server.crt | openssl md5
$ openssl rsa -noout -modulus -in server.key | openssl md5

C 证书和密钥是否属于你

$ openssl req -noout -modulus -in server.csr | openssl md5

必须指出, 使用SSL后会增加系统负担.

猜你喜欢

转载自blog.csdn.net/CSDN1887/article/details/84588720