对称加密:通过加密文件进行加密数据,使用相同的加密文件进行解密数据。
非对称加密:通过加密文件进行加密数据,使用另一个加密文件进行解密数据。
加密解密:公钥和私钥都可以用来加密数据,使用公钥加密数据,然后私钥解密的情况称为加密解密。
签名、验证签名:使用私钥加密数据,公钥解密一般被称为签名和验证签名。
说明:
使用公钥加密的数据只有它相对应的私钥可以解开,所以你可以把公钥给其他人,让别人加密他想要传送给你的数据,这个数据只有到了有私钥的你这里,才可以解开有用的数据。同理,如果你用你的私钥对数据进行签名,那这个数据就只有配对的公钥可以解开,有这个私钥的只有你,所以如果配对的公钥解开了数据,就说明这数据是你发的。相反,则不是。这个被称为签名。
实际应用中,一般都是和对方交换公钥,然后你要发给对方的数据,用他的公钥加密,他得到后用他的私钥解密。他要发给你的数据,用你的公钥加密,你得到后用你的私钥解密,这样最大程度保证了安全性。
非对称加密相关算法
RSA:可以用于加密、解密。也可以用于签名验签。
DSA:只能用于签名。
SHA/MD5:不是用于加密解密或者签名的,它被称为摘要算法。依据数据内容生成一种固定长度的摘要,这串摘要值与原数据存在对应关系。但是,这个摘要是不能还原成原数据的。
说明:
公证方 CA
问题:一般的公钥不会用明文传输给别人的,正常情况下都会生成一个文件,这个文件就是公钥文件,然后这个文件可以交给其他人用于加密数据。但是传输过程中如果有人恶意破坏,将你的公钥换成了他的公钥,然后得到公钥的一方加密数据,不是他就可以用他自己的私钥解密看到数据了吗?
答复:为了解决这个问题,需要一个公证方来做这个事,任何人都可以找它来确认公钥是谁发的,这就是CA。CA确认公钥的原理也很简单,它将它自己的公钥发布给所有人,然后一个想要发布自己公钥的人可以将自己的公钥和一些身份信息发给CA。CA用自己的私钥进行加密,这里也可以称为签名。然后这个包含了你的公钥和你的信息的文件就可以称为证书文件。这样一来所有得到一些公钥文件的人。可以通过CA的公钥解密文件。如果正常解密那么解密后里面的信息一定是真的,因为加密方只可能是CA。这样你解开公钥文件,看看里面的信息就知道这个是不是那个你需要用来加密的公钥了。
实际应用中,一般人都不会找CA去签名。因为那是收钱的,所以可以自己做一个自签名的证书文件。就是自己生成一对密钥,然后再用自己生成的另外一对密钥对这对密钥进行签名。这个只用于真正需要签名证书的人。普通的加密解密数据,直接用公钥和私钥来做就可以了。
后缀名格式说明
后缀名格式 | 描述 |
key | 私有的密钥 |
crt | 证书文件,certificate的缩写 |
csr | 证书签名请求(证书请求文件),含有公钥信息,certificate signing request的缩写 |
crl | 证书吊销列表,Certificate Revocation List的缩写 |
pem | 用于导出,导入证书时候的证书的格式,有证书开头,结尾的格式 |
crt.pem | 可导出证书 |
openssl genrsa -out ca.key 2048
openssl req -new -key ca.key -out ca.csr
openssl x509 -req -days 365 -in ca.csr -signkey ca.key -out ca.crt
在实际的软件开发工作中,往往服务器就采用这种自签名的方式,因为毕竟找第三方签名机构是要给钱的,也是需要花时间的。
服务端用户证书
openssl genrsa -des3 -out server.key 1024
openssl req -new -key server.key -out server.csr
openssl ca -in server.csr -out server.crt -cert ca.crt -keyfile ca.key
客户端用户证书
openssl genrsa -des3 -out client.key 1024
openssl req -new -key client.key -out client.csr
openssl ca -in client.csr -out client.crt -cert ca.crt -keyfile ca.key
生成pem格式证书
有时需要用到pem格式的证书,可以用以下方式合并证书文件(crt)和私钥文件(key)来生成
cat client.crt client.key > client.pem
cat server.crt server.key > server.pem
结果
服务端证书:ca.crt,server.key,server.crt,server.pem
客户端证书:ca.crt,client.key,client.crt,client.pem
01. 生成自己的CA
在 openssl 安装目录的misc 目录下(或者在apps 目录下),运行脚本:./CA.sh -newca(Windows 环境下运行:perl ca.pl -newca),出现提示符时(要求输入密码+信息)。运行完毕后会生成一个demonCA 的目录,里面包含了ca 证书及其私钥。
./CA.sh -newca
02. 生成客户端和服务端证书申请
产生证书申请:
openssl req -newkey rsa:1024 -out req2.pem -keyout server.key
03. 签发证书
签发证书:
openssl ca -in req2.pem -out server.crt
04. 密钥文件口令的处理
在步骤2)中使用以下命令产生证书申请时,会同时产生私钥文件:
openssl req -newkey rsa:1024 -out req2.pem -keyout server.key
运行时会提示输入密码,此密码用于加密key文件,以后每当需读取此文件(通过openssl提供的命令或API)都需输入口令,如果该文件的存储环境足够安全,或者采取了其他的保护措施,也可以移除对该文件的口令保护。移除口令保护的命令为:
openssl rsa -in server.key -out server.key
如果不移除口令保护,为了GaussDB能成功加载该文件,可以通过GaussDB的gs_guc工具,设置密钥文件的保护口令。以密钥文件的口令为gaussdb@123为例,运行以下命令即可:
gs_guc encrypt –M server –K gaussdb@123
05. 签发证书失败
问题1:在签发证书时,即便证书信息正确,也不会输出代表签发成功的“Data Base Update”字样,大部分情况下会有“failed to update database”这样的字样。
解决这个问题有以下两种方法:
方法一:
修改demoCA下 index.txt.attr
将unique_subject = yes改为unique_subject = no
方法二:
删除demoCA下的index.txt,并再touch下
rm index.txt
touch index.txt
问题2:出现“No such file or directory”字样的错误。
这类错误一般都是因为执行命令的路径不正确的原因,针对以上的错误,通过观察当前路径下是否有demoCA便可知晓。如果没有,切换一下路径便可解决。
GaussDB服务器端ssl功能相关参数及配置说明:
ssl = off # (change requires restart)
ssl_cert_file = 'server.crt' # (change requires restart)
ssl_key_file = 'server.key' # (change requires restart)
ssl_ca_file = '' # (change requires restart)
ssl_crl_file = ''
如果要使用ssl功能,首先需要设置ssl=on,并且将服务器端证书和私钥文件拷贝到data目录下(证书和私钥文件默认命名为server.crt和server.key,否则需要修改ssl_cert_file和ssl_key_file的值),私钥文件要求权限不能大于0600,否则会启动失败。
客户端ssl功能相关环境变量及配置说明:
PGSSLCERT、PGSSLKEY、PGSSLROOTCERT、PGSSLCRL、PGSSLMODE。具体函数及设置方法如下:
gaussdb 数据库用户和安全管理【用SSL进行安全的TCP/IP连接】【04】
https://blog.csdn.net/qq_42226855/article/details/109565179
配置ssl鉴权链路
当配置了ssl功能后,可以在pg_hba.conf中配置哪些链路通过ssl鉴权和加密传输,哪些链路不能使用ssl鉴权和加密传输等。
gaussdb 数据库用户和安全管理【客户端接入认证】【02】
https://blog.csdn.net/qq_42226855/article/details/109563367
检查相关设置
SSL connection (cipher: AES256-SHA, bits: 256)
Type "help" for help.
XXXXXX=>
grep repl_force postgresql.conf
repl_force_cert_check = ''
openssl x509 -in server.crt -text
相关参考
gaussdb 数据库用户和安全管理【用SSL进行安全的TCP/IP连接】【04】
https://blog.csdn.net/qq_42226855/article/details/109565179