赞
踩
自签名证书是指使用自己的证书颁发机构(Certificate Authority,CA)来生成和颁发证书,而不是依赖于公共的第三方CA。与使用受信任的第三方CA不同,自签名证书的信任链由自己管理,因此在信任方面可能存在一些挑战。下面是自签名证书的基本步骤:
自签名证书的优势:在于您可以独立地创建和管理证书,不依赖于第三方CA。但是,由于自签名证书没有通过公共的第三方CA签名,因此需要在使用自签名证书的客户端上配置对应的根证书以进行验证。此外,自签名证书在公共信任方面可能存在一些限制,因为其他人需要验证您的证书的可信度。
在生产环境中,通常建议使用由受信任的第三方CA颁发的证书,这样可以获得更广泛的信任和适应性。自签名证书通常在开发和测试环境中使用,或者在内部网络中进行加密通信时使用。
OpenSSL是一个开放源代码的密码工具包,提供了一组用于安全通信的加密、解密、签名、验证和证书操作的命令行工具。下面是一些常用的OpenSSL命令及其说明:
1、生成私钥:
openssl genpkey -algorithm <algorithm> -out <private_key_file>
参数详解:
-algorithm <algorithm>
: 指定生成私钥时使用的算法,如 RSA、DSA、EC 等。-out <private_key_file>
: 指定保存生成的私钥的文件名。[root@node111 test-pkey]# openssl genpkey -algorithm RSA -out ca.key
..................................++++++
......................++++++
[root@node111 test-pkey]# ls
ca.key
2、生成证书请求文件
openssl req -new -key <private_key_file> -out <csr_file>
参数详解:
-new
:生成一个新的证书请求。-key <private_key_file>
: 指定私钥文件的路径和文件名。-out <csr_file>
: 指定生成的证书请求文件的路径和文件名。-subj <subject>
: 指定证书请求的主题(如 “/C=CN/ST=Beijing/L=Beijing/O=example/OU=Personal/CN=yourdomain.com”)./C=CN/ST=Beijing/L=Beijing/O=example/OU=Personal/CN=yourdomain.com
是一个X.509证书中的主题(Subject)字段的示例,用于说明字段中各个部分的含义。
解释如下:
/C=CN
:表示证书的国家(Country),此处为中国(China)。CN是Country的缩写。
/ST=Beijing
:表示证书的省/自治区/直辖市(State/Province/Territory),此处为北京市。ST是State的缩写。
/L=Beijing
: 表示证书的城市(Locality),此处为北京市。L是Locality的缩写.
/O=example
:表示证书的组织(Organization),此处为example。O是Organization的缩写。
/OU=Personal
:表示证书的组织单位(Organizational Unit),此处为个人(Personal)。OU是Organizational Unit的缩写。
/CN=yourdomain.com
:表示证书的通用名称(Common Name),此处为yourdomain.com。CN是Common Name的缩写,通常用于指定证书所属的域名或主机名。
[root@node111 test-pkey]# openssl req -new -key ca.key -out ca.csr 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 #表示证书的国家(Country),此处为中国(China)。 State or Province Name (full name) []:Beijiang # 表示证书的省/自治区/直辖市(State/Province/Territory),此处为北京市。 Locality Name (eg, city) [Default City]:Beijing #表示证书的城市(Locality),此处为北京市。 Organization Name (eg, company) [Default Company Ltd]:expample #表示证书的组织(Organization),此处为example。 Organizational Unit Name (eg, section) []:Personal #表示证书的组织单位(Organizational Unit),此处为个人(Personal)。 Common Name (eg, your name or your server's hostname) []:www.test.com #表示证书的通用名称(Common Name),此处为test.com,通常用于指定证书所属的域名或主机名。 Email Address []:xxxq@qq.com Please enter the following 'extra' attributes to be sent with your certificate request A challenge password []: An optional company name []: [root@node111 test-pkey]# ls ca.csr ca.key
3、使用自签名CA私钥和请求生成自签名CA证书
openssl req -x509 -key <private_key_file> -in <csr_file> -out <certificate_file>
参数详解:
-in <certificate_file>
: 指定输入证书请求文件的路径和文件名。-out <output_file>
: 指定输出证书的路径和文件名。-req
: 将证书视为证书请求(CSR)。-key <private_key_file>
: 使用指定的私钥对证书进行签名。[root@node111 test-pkey]# openssl req -x509 -in ca.csr -key ca.key -out ca.crt
[root@node111 test-pkey]# ls
ca.crt ca.csr ca.key
4、创建服务器私钥
openssl genpkey -algorithm RSA -out server.key
5、 创建服务器证书请求
openssl req -new -key server.key -out server.csr
6、使用自签名CA私钥、CA的证书和服务器证书请求生成服务器证书
openssl x509 -req -in server.csr -CA ca.crt -CAkey ca.key -CAcreateserial -out server.crt -days 3650
-req
: 指定要生成的证书是由证书请求 (CSR) 生成的。-in server.csr
: 指定证书请求文件的路径和文件名。-CA ca.crt
: 指定自签名证书的颁发机构 (CA) 证书的路径和文件名。-CAkey ca.key
: 指定自签名证书的颁发机构 (CA) 的私钥文件的路径和文件名。-CAcreateserial
: 告诉 OpenSSL 工具创建一个序列号文件 (ca.srl),其中包含一个唯一的证书序列号。这个序列号文件将用于标识生成的证书。-out server.crt
: 指定生成的自签名服务器证书的输出路径和文件名。7、查看证书信息
openssl x509 -in <certificate_file> -text -noout
该命令用于查看证书的详细信息,包括版本、序列号、有效期、拥有者、颁发者等。
[root@node111 test-pkey]# openssl x509 -in server.crt -text -noout Certificate: Data: Version: 1 (0x0) Serial Number: e8:7c:2e:9f:cb:d3:ed:47 Signature Algorithm: sha256WithRSAEncryption Issuer: C=CN, ST=Beijiang, L=Beijing, O=exp\x08ample , OU=Personal, CN=www.test.com/emailAddress=xxxq\x08@qq.com Validity Not Before: Jun 19 17:07:49 2023 GMT Not After : Jul 19 17:07:49 2023 GMT Subject: C=CN, ST=Beijing, L=Beijing, O=explame, OU=personal, CN=www.test.com/emailAddress=xxx@qq.com Subject Public Key Info: Public Key Algorithm: rsaEncryption Public-Key: (1024 bit) Modulus: 00:d0:97:b9:cb:a6:aa:af:b7:41:b8:cd:44:cc:e6: 94:71:1e:fa:43:2b:84:13:22:05:78:88:06:65:d5: 07:48:09:35:ee:ea:d3:41:bf:34:70:e0:d0:57:05: 2b:d3:a9:77:8a:8c:b1:75:e7:f8:78:58:4b:49:aa: 71:15:2d:0b:f0:02:ab:28:59:97:b8:74:3f:e7:b5: 39:29:8f:d3:85:c5:fc:21:69:8f:dd:b5:e8:bf:a7: 24:5e:0c:73:77:e7:1c:57:aa:81:dc:c1:d9:3a:4d: 3e:8e:41:d4:79:b0:98:cf:84:30:a5:22:ae:b1:0e: a1:80:d5:ae:4d:95:d1:db:b7 Exponent: 65537 (0x10001) Signature Algorithm: sha256WithRSAEncryption 6b:d0:1e:12:0d:b7:c0:33:db:8e:36:84:b5:04:a7:11:22:ce: 0c:32:7b:fe:8c:e7:56:df:34:20:44:5a:c5:eb:50:93:36:c2: 28:ef:d0:4a:83:ed:3b:5b:bd:aa:88:c0:71:de:8c:a7:b6:0c: 1e:b2:07:13:f7:c2:00:47:4b:02:04:66:e1:3d:77:d9:30:6c: db:02:03:b2:19:af:0a:ac:e3:cb:66:37:34:e1:f6:df:5b:c5: 08:df:e7:ec:79:bf:ca:7b:fd:98:95:aa:00:0a:cc:2e:21:2e: ce:98:93:89:ab:a6:1d:e4:17:e8:9b:25:98:47:1b:a9:13:0a: bd:cf
这是一个证书的示例,包含了证书的各个字段信息和签名。
解释如下:
8、加密与解密
1、生成密钥对
首先,我们需要生成一个密钥对,其中一个密钥用于加密(公钥),另一个密钥用于解密(私钥)。
生成私钥:
openssl genpkey -algorithm RSA -out private_key.pem
genpkey
:生成密钥对的命令。-algorithm RSA
:指定生成 RSA 密钥对。-out private_key.pem
:指定生成的私钥文件名和路径。[root@node111 test-pkey]# cd test-enc-dec/
[root@node111 test-enc-dec]# ls
[root@node111 test-enc-dec]# openssl genpkey -algorithm RSA -out private.pem
..................................................................++++++
..++++++
生成公钥:
openssl rsa -pubout -in private_key.pem -out public_key.pem
-pubout
:生成公钥。-in private_key.pem
:指定私钥文件的路径和文件名。-out public_key.pem
:指定生成的公钥文件名和路径。[root@node111 test-enc-dec]# openssl rsa -pubout -in private.pem -out pub.pem
writing RSA key
2、加密数据
使用公钥对数据进行加密。
openssl rsautl -encrypt -in plaintext.txt -out encrypted.txt -pubin -inkey public_key.pem
rsautl
:RSA 密钥操作命令。-encrypt
:指定进行加密操作。-in plaintext.txt
:指定要加密的明文文件。-out encrypted.txt
:指定加密后的密文文件。-pubin
:表示使用公钥进行加密。-inkey public_key.pem
:指定公钥文件的路径和文件名。[root@node111 test-enc-dec]# echo "asdbchcgc123yuudc" >test.txt
[root@node111 test-enc-dec]# openssl rsautl -encrypt -in test.txt -out encrypt.txt -pubin -inkey pub.pem
[root@node111 test-enc-dec]# cat encrypt.txt
3、解密数据
使用私钥对加密后的数据进行解密。
openssl rsautl -decrypt -in encrypted.txt -out decrypted.txt -inkey private_key.pem
-decrypt
:指定进行解密操作。-in encrypted.txt
:指定要解密的密文文件。-out decrypted.txt
:指定解密后的明文文件。-inkey private_key.pem
:指定私钥文件的路径和文件名。[root@node111 test-enc-dec]# openssl rsautl -decrypt -in encrypt.txt -out decrypt.txt -inkey private.pem
[root@node111 test-enc-dec]# cat decrypt.txt
asdbchcgc123yuudc
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。