密钥和证书的管理
生成自签名证书
生成私钥
下面命令是一个使用 OpenSSL 工具生成 RSA 私钥的命令。这个命令的各个部分具有特定的含义,下面是对这个命令的详细解析:
openssl: 这是 OpenSSL 命令行工具的调用方式。OpenSSL 是一个强大的安全套接字层(SSL)和传输层安全(TLS)协议库,同时也包含了大量的加密功能,如生成密钥、证书签名等。genrsa: 这是 OpenSSL 中的一个子命令,用于生成 RSA 私钥。RSA 是一种非对称加密算法,它使用一对密钥:一个公钥和一个私钥。公钥可以公开,而私钥必须保密。-out private.pem: 这个选项指定了输出文件的名称和路径。在这个例子中,生成的 RSA 私钥将被保存到当前目录下的private.pem文件中。.pem扩展名通常用于表示 PEM(Privacy Enhanced Mail)格式的文件,这是一种基于文本的编码方式,用于存储和发送加密材料,如证书和私钥。2048: 这个数字指定了生成的 RSA 私钥的位长度。位长度是密钥强度的一个指标,较高的位长度意味着更强的安全性,但同时也意味着更高的计算成本。2048 位是当前被广泛认为足够安全的密钥长度之一,适用于大多数应用场景。综上所述,
openssl genrsa -out private.pem 2048命令的作用是生成一个 2048 位的 RSA 私钥,并将这个私钥保存到当前目录下的private.pem文件中。这个私钥可以用于多种安全操作,如 SSL/TLS 加密、数字签名等。需要注意的是,为了安全起见,生成的私钥文件(如
private.pem)应该被妥善保管,避免未经授权的访问。同时,在不再需要时,应该安全地删除或销毁这些私钥文件,以防止潜在的安全风险。
openssl genrsa -out private.pem 2048生成公钥
openssl rsa -in private.pem -outform PEM -pubout -out public.pem生成CSR
- 在生成CSR(Certificate Signing Request,证书签名请求)文件时需要使用私钥,这主要是因为CSR文件包含了公钥以及请求者的身份信息,并且这些信息需要被私钥进行数字签名,以确保CSR的完整性和真实性。
- 在使用OpenSSL命令生成CSR(Certificate Signing Request,证书签名请求)文件时,实际上并不需要直接指定公钥文件,这是因为公钥是在生成私钥的过程中自动生成的,并与私钥形成一对。
openssl req -new -key private.pem -out certificate.csr生成自签名证书
下面命令是使用 OpenSSL 工具从证书签名请求(CSR)文件自签名生成一个 X.509 证书的命令。这个命令的各个部分具有特定的含义,下面是对这个命令的详细解析:
openssl x509: 这是 OpenSSL 命令行工具中用于处理 X.509 证书相关操作的子命令。X.509 是一种广泛使用的公钥证书格式,它定义了证书中信息的结构和编码方式。-req: 这个选项告诉 OpenSSL 从一个证书签名请求(CSR)文件中读取数据,并生成一个证书。这是必需的,因为我们要从 CSR 转换到证书。-days 365: 这个选项指定了证书的有效期,单位是天。在这个例子中,证书将被设置为在生成之日起 365 天后过期。你可以根据需要调整这个数字。-in certificate.csr: 这个选项指定了输入文件的名称和路径,即 CSR 文件的路径。在这个例子中,CSR 文件名为certificate.csr,并且位于当前目录下。-signkey private.pem: 这个选项指定了用于签名的私钥文件的名称和路径。在这个例子中,私钥文件名为private.pem,并且也位于当前目录下。由于这是一个自签名证书,因此我们将使用与生成 CSR 时相同的私钥来签名证书。-out certificate.crt: 这个选项指定了输出文件的名称和路径,即生成的证书文件的路径。在这个例子中,证书文件将被保存为certificate.crt,并位于当前目录下。.crt扩展名通常用于表示证书文件。执行这个命令后,OpenSSL 将使用指定的私钥对 CSR 文件中的公钥和请求者信息进行签名,并生成一个包含这些信息的 X.509 证书。这个证书将包括公钥、证书持有者的信息(如组织名称、域名等)、证书的有效期以及签名等。
需要注意的是,自签名证书通常仅用于测试和开发环境,因为它们不是由受信任的证书颁发机构(CA)签发的。在生产环境中,你应该使用由受信任的 CA 签发的证书来确保通信的安全性。然而,在某些情况下,如内部网络或私有云服务中,自签名证书仍然可以被接受和使用。
openssl x509 -req -days 365 -in certificate.csr -signkey private.pem -out certificate.crt验证自签名证书
openssl verify certificate.crt查看x509证书信息,例如到期信息
openssl x509 -in certificate.crt -text -noout使用一行命令生成私钥和CSR证书
openssl req -out certificate.csr -new -nodes -newkey rsa:2048 -keyout private.pem使用openSSL导出baidu证书
true | openssl s_client -connect www.baidu.com:443 2>/dev/null | openssl x509使用OpenSSL显示证书签名链
openssl s_client -connect www.baidu.com:443 -showcerts生成ssh服务的公钥和私钥
生成私钥
openssl genrsa -out private.key 1024生成PEM格式公钥
openssl rsa -in private.key -out public.key -pubout -outform PEM如果需要OPENSSH格式公钥,使用下面命令生成
ssh-keygen -f private.key -y > public.key使用自签名CA证书签发其他证书
提示:todo 实验未成功,使用浏览器访问
openresty时报告证书域名非法错误
生成CA私钥
openssl genrsa -out ca.key 2048生成自签名CA证书
这里的命令解释如下:
openssl genrsa -out ca.key 2048:生成一个新的2048位RSA私钥,并将其保存到ca.key文件中。这个私钥将用于签署CA证书。openssl req -new -x509 -days 3650 -key ca.key -out ca.crt -subj "/C=CN/ST=Guangdong/L=Guangzhou/O=MyCompany/OU=IT/CN=MyCompany Root CA":-new:指示OpenSSL生成一个新的证书请求。但在这里,由于我们要生成自签名证书,所以这个选项实际上与-x509结合使用时,意味着我们将直接生成证书而不是CSR。-x509:指示OpenSSL生成一个自签名的X.509证书,而不是生成CSR。-days 3650:指定证书的有效期为3650天(大约10年)。你可以根据需要调整这个数字。-key ca.key:指定用于签名的私钥文件。-out ca.crt:指定输出的证书文件名。-subj:允许你直接指定证书的主题信息,而不是通过交互式提示输入。这里的主题信息包括国家(C)、省份(ST)、城市(L)、组织(O)、组织单位(OU)和通用名称(CN),这些都是证书中的标准字段。完成这些步骤后,你将拥有一个名为
ca.crt的自签名CA证书和一个名为ca.key的私钥文件。这个CA证书可以被用来签署其他证书,如服务器证书、客户端证书等。请注意,自签名CA证书在默认情况下不会被客户端或浏览器信任,因为它们不是由公认的证书颁发机构签发的。因此,如果你打算在生产环境中使用自签名证书,你可能需要手动将CA证书添加到客户端或服务器的信任存储中。
openssl req -new -x509 -days 3650 -key ca.key -out ca.crt -subj "/C=CN/ST=Guangdong/L=Guangzhou/O=MyCompany/OU=IT/CN=MyCompany Root CA"使用自定义CA证书签发其他证书
生成其他证书私钥
bashopenssl genrsa -out server.key 2048生产其他证书
CSRbashopenssl req -new -key server.key -out server.csr -subj "/C=CN/ST=Shanghai/L=Shanghai/O=Dell/OU=IT Support/CN=www.example.com"使用自定义
CA证书签发其他证书这里的命令解释如下:
-req -in server.csr:指定输入文件为CSR文件。-CA ca.crt:指定CA证书文件。-CAkey ca.key:指定CA私钥文件。-CAcreateserial:如果尚未存在,则创建并更新序列号文件(通常是ca.srl)。序列号用于跟踪由CA签发的证书。-out server.crt:指定输出文件,即新签发的证书。-days 365:指定证书的有效期。
bashopenssl x509 -req -in server.csr -CA ca.crt -CAkey ca.key -CAcreateserial -out server.crt -days 365使用
OpenSSL的x509命令来验证新签发的证书是否由自定义CA证书正确签发,注意:查看输出中的“Issuer”字段,它应该与自定义CA证书的主题相匹配。bashopenssl x509 -in server.crt -text -noout
现在,你可以将server.crt(服务器证书)和server.key(服务器私钥)一起用于SSL/TLS配置中,例如Web服务器或邮件服务器。