当前位置: 首页 > 科技观察

OpenSSLEssentials:SSL证书、私钥和CSR

时间:2023-03-13 00:14:41 科技观察

OpenSSL是一个多功能的命令行工具,可用于与公钥基础设施(PKI)和HTTPS(HTTPoverTLS)相关的大量任务。此备忘单样式指南提供了对在常见日常场景中有用的OpenSSL命令的快速参考。这包括私钥生成、证书签名请求(CSR)和证书格式转换的OpenSSL示例,但并未涵盖OpenSSL的所有用途。如何使用本指南如果您不熟悉证书签名请求(CSR),请阅读第1部分。除第一部分外,本指南遵循简单的备忘单格式:包括命令行片段。跳至与您即将完成的任务相关的任何部分。大多数命令都是单行的,并且为了清晰起见已扩展为多行(使用\符号)。关于证书签名请求(CSR)如果您想从证书颁发机构(CA)获得SSL证书,您必须生成证书签名请求(CSR)。CSR主要由密钥对的公钥和一些附加信息组成。签署证书时,这两部分都会插入到证书中。每当您生成CSR时,系统都会提示您输入有关证书的信息。这些信息称为专有名称(DistinguisedName)(DN)。DN中的一个重要字段是通用名称(CN),它应该是您打算为其使用证书的主机的完全限定域名(FQDN)。创建CSR时,还可以通过命令行或文件传递信息来跳过交互式提示。DN中的其他项目提供有关您的企业或组织的其他信息。如果您从证书颁发机构购买SSL证书,通常需要这些附加字段(例如“组织”)以准确反映您组织的详细信息。以下是CSR消息提示的示例:---CountryName(2lettercode)[AU]:USStateorProvinceName(fullname)[Some-State]:NewYorkLocalityName(eg,city)[]:BrooklynOrganizationName(例如,公司)[InternetWidgitsPtyLtd]:例如BrooklynCompanyOrganizationalUnitName(例如,section)[]:TechnologyDivisionCommonName(例如,服务器FQDN或您的姓名)[]:examplebrooklyn.comEmailAddress[]:如果您要以交互方式回答CSR信息提示,您可以通过将-subj选项添加到任何请求CSR信息的OpenSSL命令来实现。下面是该选项的一个示例,使用了上面代码块中显示的相同信息:-subj"/C=US/ST=NewYork/L=Brooklyn/O=ExampleBrooklynCompany/CN=examplebrooklyn.com"现在你既然您了解了CSR,请随时跳至本指南中涵盖您的OpenSSL需求的任何部分。生成CSR本节介绍与生成CSR(和私钥,如果它们尚不存在)相关的OpenSSL命令。CSR可用于从证书颁发机构请求SSL证书。请记住,您可以通过上一节中提到的-subj选项以非交互方式添加CSR信息。生成私钥和CSR如果您想使用HTTPS(基于TLS的HTTP)来保护您的ApacheHTTP或NginxWeb服务器,并且您想要使用证书颁发机构(CA)颁发SSL证书,请使用此方法。生成的CSR可以发送到CA,请求颁发CA签名的SSL证书。如果您的CA支持SHA-2,请添加-sha256选项以使用SHA-2对CSR进行签名。此命令从头开始创建一个2048位私钥(domain.key)和一个CSR(domain.csr):opensslreq\-newkeyrsa:2048-nodes-keyoutdomain.key\-outdomain.csranswerCSRinfo问问题来完成这个过程。选项-newkeyrsa:2048指定密钥应为2048位,使用RSA算法生成。选项-nodes指定私钥不使用密码加密。-new选项未包含在此处,但已隐含,表示正在生成CSR。从现有私钥生成CSR如果您已有私钥并希望使用它向CA申请证书,请使用此方法。此命令基于现有私钥(domain.key)创建新的CSR(domain.csr):opensslreq\-keydomain.key\-new-outdomain.csr回答CSR信息问题以完成该过程。选项-key指定将用于生成新CSR的现有私钥(domain.key)。选项-new表示正在生成CSR。从现有证书和私钥生成CSR如果您想续订现有证书但由于某种原因您或您??的CA没有原始CSR,请使用此方法。从现有证书中提取信息时,基本上可以省去重新输入CSR信息的麻烦。此命令基于现有证书(domain.crt)和私钥(domain.key)创建一个新的CSR(domain.csr):op??ensslx509\-indomain.crt\-signkeydomain.key\-x509toreq-out的domain.csr选项-x509toreq指定您使用X509证书制作CSR。生成SSL证书如果您想使用SSL证书来保护您的服务,但您不需要CA签名的证书,一个有效(且免费)的解决方案是签署您自己的证书。您可以自己颁发的一种常见证书类型是自签名证书。自签名证书是用自己的私钥签名的证书。自签名证书可用于加密数据,就像CA签名证书一样,但您的用户将收到警告,警告他们的计算机或浏览器不信任该证书。因此,只有在您不需要向用户证明您的服务身份时(例如非生产或非公共服务器)才使用自签名证书。本节介绍与生成自签名证书相关的OpenSSL命令。生成自签名证书如果您想使用HTTPS(HTTPoverTLS)保护您的ApacheHTTP或NginxWeb服务器,并且您不需要由CA签署您的证书,请使用此方法。此命令从头开始创建一个2048位私钥(domain.key)和一个自签名证书(domain.crt):opensslreq\-newkeyrsa:2048-nodes-keyoutdomain.key\-x509-days365-outdomain.crt通过回答CSR信息问题来完成该过程。选项-x509告诉req子命令创建一个自签名证书。-days365选项指定证书的有效期为365天。它生成临时CSR以收集证书相关信息。从现有私钥生成自签名证书如果您已有私钥并且想使用它生成自签名证书,请使用此方法。此命令从现有私钥(domain.key)创建自签名证书(domain.crt):opensslreq\-keydomain.key\-new\-x509-days365-outdomain.crtanswerCSRinformationto完成这个过程。选项-x509告诉req子命令创建一个自签名证书。-days365选项指定证书的有效期为365天。选项-new允许询问CSR信息。从现有私钥和CSR生成自签名证书如果您已经拥有私钥和CSR并且想要使用它们生成自签名证书,请使用此方法。此命令将从现有私钥(domain.key)和(domain.csr)创建自签名证书(domain.crt)。opensslx509\-signkeydomain.key\-indomain.csr\-req-days365-outdomain.crtoption-days365指定证书有效期为365天。查看证书证书和CSR文件以PEM格式编码,不适合人类阅读。本节中描述的OpenSSL命令将输出PEM编码文件的实际条目。查看CSR条目此命令允许您查看和验证纯文本CSR(domain.csr)的内容:opensslreq\-text-noout-verify\-indomain.csr查看证书条目此命令允许您查看纯文本文本证书(域.crt)内容:opensslx509\-text-noout\-indomain.crt验证证书是否由CA签名使用此命令验证证书(domain.crt)是否由特定CA签名certificate(ca.crt):opensslverify\-verbose-CAFileca.crt\domain.crtprivatekey本节介绍用于创建和验证私钥的OpenSSL命令。创建私钥使用以下命令创建受密码保护的2048位私钥(domain.key):opensslgenrsa\-des3-outdomain.key2048在提示完成该过程时输入密码。验证私钥使用此命令检查私钥(domain.key)是否是有效密钥:opensslrsa\-check-indomain.key如果您的私钥已经加密,您将被提示输入其密码,成功,未加密的密钥在终端上输出。验证私钥是否与证书和CSR匹配使用这些命令来验证私钥(domain.key)是否与证书(domain.crt)和CSR(domain.csr)匹配:opensslrsa-noout-modulus-indomain。钥匙|opensslmd5opensslx509-noout-modulus-indomain.crt|opensslmd5opensslreq-noout-modulus-indomain.csr|opensslmd5如果每个命令的输出相同,那么私钥、证书和CSR很可能是相关的。加密的私钥这需要一个未加密的私钥(unencrypted.key),并输出它的加密版本(encrypted.key):op??ensslrsa-des3\-inunencrypted.key\-outencrypted.key输入你想要的密码来加密私钥。解密私钥这需要一个加密私钥(encrypted.key),并输出一个解密版本(decrypted.key):opensslrsa\-inencrypted.key\-outdecrypted.key出现提示时,输入加密密钥密码。转换证书格式我们使用的所有证书都是ASCIIPEM编码的X.509证书。还有许多其他证书编码和容器类型;有些应用程序更喜欢某些格式而不是其他格式。此外,其中许多格式可以在单个文件中包含多个项目,例如私钥、证书和CA证书。OpenSSL可用于在Zesi格式之间转换证书。本节描述了一些可能的转换。将PEM转换为DER如果要将PEM编码证书(domain.crt)转换为DER编码证书(domain.der),即二进制格式,请使用此命令:opensslx509\-indomain.crt\-outformder-outdomain.derDER格式通常用于Java。将DER转换为PEM如果要将DER编码证书(domain.der)转换为PEM编码证书(domain.crt),请使用以下命令:opensslx509\-informder-indomain.der\-outdomain.crt将PEM转换为PKCS7如果要将PEM证书(domain.crt和ca-chain.crt)添加到PKCS7文件(domain.p7b),请使用此命令:opensslcrl2pkcs7-nocrl\-certfiledomain.crt\-certfileca-chain.crt\-outdomain.p7b请注意,您可以使用一个或多个-certfile选项来指定要添加到PKCS7文件的证书。PKCS7文件,也称为P7B,通常与Java密钥库和MicrosoftIIS(Windows)一起使用。它们是ASCII文件,可以包含证书和CA证书。将PKCS7转换为PEM如果您想将PKCS7文件(domain.p7b)转换为PEM文件,请使用此命令:opensslpkcs7\-indomain.p7b\-print_certs-outdomain.crt请注意,如果您的PKCS7文件如果中有多个项,例如证书和CA中间证书,则创建的PEM文件将包含所有项。将PEM转换为PKCS12如果要使用私钥(domain.key)和证书(domain.crt)并将它们组合成一个PKCS12文件(domain.pfx),请使用此命令:opensslpkcs12\-inkeydomain。key\-indomain.crt\-export-outdomain.pfx系统会提示输入导出密码,可以留空。请注意,在这种情况下,您可以通过将多个证书连接到一个PEM文件(domain.crt)来将证书链添加到PKCS12文件。PKCS12文件,也称为PFX文件,通常用于在MicrosoftIIS(Windows)中导入和导出证书链。将PKCS12转换为PEM如果要转换PKCS12文件(domain.pfx)并将其转换为PEM格式(domain.combined.crt),请使用此命令:opensslpkcs12\-indomain.pfx\-nodes-outdomain。combined.crt请注意,如果您的PKCS12文件中有多个项目(例如证书和私钥),则创建的PEM文件将包含其中的所有项目。OpenSSL版本openssl版本命令可用于检查您正在运行的版本。您正在运行的OpenSSL版本以及用于编译它的选项将影响您可用的功能(有时还会影响命令行选项)。以下命令显示您正在运行的OpenSSL版本,以及编译时使用的所有选项:opensslversion-a本指南是使用OpenSSL二进制文件编写的,具有以下详细信息(请参阅上一个命令的输出):OpenSSL1.0。1f2014年1月6日构建于:UTC2014年4月7日星期一21:22:23平台:debian-amd64选项:bn(64,64)rc4(16x,int)des(idx,cisc,16,int)blowfish(idx)编译器:cc-fPIC-DOPENSSL_PIC-DOPENSSL_THREADS-D_REENTRANT-DDSO_DLFCN-DHAVE_DLFCN_H-m64-DL_ENDIAN-DTERMIO-g-O2-fstack-protector--param=ssp-buffer-size=4-Wformat-Werror=format-security-D_FORTIFY_SOURCE=2-Wl,-Bsymbolic-functions-Wl,-z,relro-Wa,--noexecstack-Wall-DMD32_REG_T=int-DOPENSSL_IA32_SSE2-DOPENSSL_BN_ASM_MONT-DOPENSSL_BN_ASM_MONT5-DOPENSSL_BN_ASM_GF2m-DSHA1_ASM-DSHA256_ASM-DSHA512_ASM-DMD5_ASM-DAES_ASM-DVPAES_ASM-DBSAES_ASM-DWHIRLPOOL_ASM-DGHASH_ASMOPENSSLDIR:"/usr/lib/ssl"总结这应该涵盖了大多数人如何使用OpenSSL来处理SSL证书是的!它还有许多此处未涵盖的其他用途,因此请随时在评论中询问或建议其他用途。