1 背景
对于api服务器,我们不能让访问者先登录再进行访问这样不安全,也不友好。 http协议没有任何的加密以及身份验证的机制,即时是token认证,也非常容易遭遇窃听、劫持、篡改,因此会造成个人隐私泄露,恶意的流量劫持等严重的安全问题。
1.1 https如何保证安全
HTTPS是以安全为目标的HTTP通道,简单讲是HTTP的安全版。即HTTP下加入SSL层,HTTPS的安全基础是SSL,因此加密的详细内容就需要SSL。它是一个URI scheme(抽象标识符体系),句法类同http:体系,用于安全的HTTP数据传输。https:URL表明它使用了HTTPS,但HTTPS存在不同于HTTP的默认端口及一个加密/身份验证层(在HTTP与TCP之间)。
1.2 身份认证(CA数字证书)
https协议中身份认证的部分是由数字证书来完成的,证书由公钥、证书主体、数字签名等内容组成,在客户端发起SSL请求后,服务端会将数字证书发给客户端,客户端会对证书进行验证,并获取用于秘钥交换的非对称密钥。
数字证书有两个作用:
1)身份授权。确保浏览器访问的网站是经过CA验证的可信任的网站。
2)分发公钥。每个数字证书都包含了注册者生成的公钥。在SSL握手时会通过certificate消息传输给客户端。
申请一个受信任的数字证书通常有如下流程:
1)终端实体(可以是一个终端硬件或者网站)生成公私钥和证书请求。
2)RA(证书注册及审核机构)检查实体的合法性。如果个人或者小网站,这一步不是必须的。
3)CA(证书签发机构)签发证书,发送给申请者。
4)证书更新到repository(负责数字证书及CRL内容存储和分发),终端后续从repository更新证书,查询证书状态等。
注册备案过的域名,可以供我们使用,申请SSL证书,需要SSL证书进行认证。SSL证书有很多途径都可以申请,比如国内的阿里云,腾讯云等都是比较方便的,而且还有免费的证书可以申请,都是一年的使用时间。本文中采用的是OpenSLL自签名创建SLL,毕竟是免费的。
2 OpenSLL下载安装
2.1 下载OpenSSL
本次安装是在centos7上安装,首先下载OpenSSL,如果需要window版本(https://oomake.com/download/openssl),我这边下载了openssl-1.1.1d.tar.gz。
2.2 安装OpenSSL
由于我是window10系统,使用Xshell远程Linux系统,需要上传和下载文件,命令安装lrzsz
yum -y install lrzsz
安装完成后,可以开始使用 rz(上传)和 sz(下载)指令。
rz
上传完成后即可依次执行以下指令安装了 tar -xzf openssl-1.1.1d.tar.gz cd openssl-1.1.1d mkdir /usr/local/openssl ./config --prefix=/usr/local/openssl make make install
这样就安装完成了,接下来一些辅助步骤。
2.3 创建软连接
which openssl /usr/bin/openssl
//为了使用方便,以及以后版本更新方便,可以创建软连接,如下: ln -s /usr/local/openssl/bin/openssl /usr/bin/openssl //此步骤可能会报异常,我就忽略了,如果您能明白,欢迎指导!!!
2.4 执行以下命令
cd /usr/local/openssl ldd /usr/local/openssl/bin/openssl linux-vdso.so.1 => (0x00007fff7b9e5000) libssl.so.1.1 => not found libcrypto.so.1.1 => not found libdl.so.2 => /lib64/libdl.so.2 (0x00007f7faa7aa000) libpthread.so.0 => /lib64/libpthread.so.0 (0x00007f7faa58e000) libc.so.6 => /lib64/libc.so.6 (0x00007f7faa1c1000) /lib64/ld-linux-x86-64.so.2 (0x00007f7faa9ae000) 安装OK
2.5 查看版本
openssl version OpenSSL 1.0.2k-fips 26 Jan 2017
3 创建自签名的SSL证书和私钥
3.1 生成私钥(key文件)
# -genra 生成RSA私钥 # -des3 des3算法 # -out server.key 生成的私钥文件名 # -2048 私钥长度 openssl genrsa -des3 -out server.pass.key 2048 输入一个4位以上的密码。
3.2 去除私钥中的密码
openssl rsa -in server.pass.key -out server.key
注意:有密码的私钥是server.pass.key,没有密码的私钥是server.key
在第3.1步创建私钥的过程中,由于必须要指定一个密码。而这个密码会带来一个副作用,那就是在每次Apache启动Web服务器时,都会要求输入密码,这显然非常不方便。所以要删除私钥中的密码。
3.3 生成CSR(证书签名请求)
# -req 生成证书签名请求 # -new 新生成 # -key 私钥文件 # -out 生成的CSR文件 # -subj 生成CSR证书的参数 openssl req -new -key server.key -out server.csr -subj "/C=CN/ST=Shanghai/L=Shanghai/O=cetc/OU=cetc/CN=gitlab.cetc.cn"
subj参数说明如下:
字段 |
字段含义 |
示例 |
---|---|---|
/C= |
Country 国家 |
CN |
/ST= |
State or Province 省 |
Shanghai |
/L= |
Location or City 城市 |
Shanghai |
/O= |
Organization 组织或企业 |
cetc |
/OU= |
Organization Unit 部门 |
wlst |
/CN= |
Common Name 域名或IP |
wlst.com |
3.4 生成自签名SSL证书
# -days 证书有效期 openssl x509 -req -days 365 -in server.csr -signkey server.key -out server.crt
X.509证书包含三个文件:key,csr,crt。
key是服务器上的私钥文件,用于对发送给客户端数据的加密,以及对从客户端接收到数据的解密
csr是证书签名请求文件,用于提交给证书颁发机构(CA)对证书签名
crt是由证书颁发机构(CA)签名后的证书,或者是开发者自签名的证书,包含证书持有人的信息,持有的公钥,以及签署者的签名等信息
备注:在密码学中,X.509是一个标准,规范了公开秘钥认证、证书吊销列表、授权凭证、凭证路径验证算法等。
4 将.key和.crt文件转换成.jks文件
4.1 先使用openssl 工具 将 crt和key格式的证书转还成pfx
openssl pkcs12 -export -out server.pfx -inkey server.key -in server.crt
其中:server.pfx (转后的pfx)mycert.key,mycert.crt( crt和key格式的证书)
注意:该步骤需要输入密码passward,该密码2与3均需要用到
4.2 查看证书别名
keytool -list -v -keystore server.pfx
4.3 在使用jdk自带的keytool将pfx格式文件转为jks
keytool -importkeystore -srckeystore server.pfx -srcstoretype pkcs12 -destkeystore mycert.jks -deststoretype JKS -alias 1
其中:-alias(设置别名) mycert.jks(转还后jks) server.pfx(需转还的pfx)
注意:该步骤需要输入3次密码,均采用1中的passward。
原文:https://cloud.tencent.com/developer/article/1558378
本文地址:使用OpenSSL创建自签名SSL证书
发表评论