狠狠做网站,音乐网站设计素材,千锋教育怎么样,开周边网站怎么做品牌文章目录 一、背景1.1 秘钥和证书是两个东西吗#xff1f;1.2 介绍下nginx配置文件中参数ssl_certificate和ssl_certificate_key1.3介绍下nginx支持的证书类型1.4 目前nginx支持哪种证书格式#xff1f;1.5 nginx修改配置文件目前方式也会有所不同1.6 介绍下不通格式的证书哪… 文章目录 一、背景1.1 秘钥和证书是两个东西吗1.2 介绍下nginx配置文件中参数ssl_certificate和ssl_certificate_key1.3介绍下nginx支持的证书类型1.4 目前nginx支持哪种证书格式1.5 nginx修改配置文件目前方式也会有所不同1.6 介绍下不通格式的证书哪些可以包含私钥哪些不能1.7 创建私钥、证书请求、证书的命令1.8 如何区分证书中是否包含私钥信息1.9 多文件内容合并文件命令操作在windows和linux下不同1.10 不同格式文件打开查看内容方式 二、具体实施操作2.1 针对方式一中nginx分别指定私钥和证书地址2.2 针对方式二中nginx私钥和证书统一指向证书地址2.3 命令中部分参数介绍 三、重启nginx验证生效 一、背景
正常项目的私钥和服务端证书会放在项目中或者外挂到linux服务器某个路径下现在的需求是客户手动创建的新的证书替换后项目证书仍然生效且功能能正常使用。
目前我司采用nginx配置SSL通信验证具体配置在nginx安装路径下的nginx.conf文件最终修改的地方是红框这里。
1.1 秘钥和证书是两个东西吗
是的密钥Key和证书Certificate是两个不同的概念但它们在安全通信中通常是相关联的。密钥Key
密钥是用于加密和解密数据的一种数学算法。
在SSL/TLS通信中有两种主要类型的密钥公钥和私钥。
私钥Private Key用于对数据进行加密和对由公钥加密的数据进行解密。私钥必须保密只有持有私钥的一方才能解密数据。
公钥Public Key用于对数据进行解密和对由私钥加密的数据进行加密。公钥通常公开发布用于与其他人安全地通信。证书Certificate
证书是由数字证书颁发机构CA签发的一种电子文件用于验证服务器或客户端的身份。
证书包含了一些重要的信息如公钥、颁发者、有效期等。
证书可以用来确保通信双方的身份防止中间人攻击等安全威胁。
在SSL/TLS通信中密钥和证书通常是配对使用的。服务器会持有私钥并将其与公钥证书一起使用以向客户端证明其身份。客户端则使用服务器的公钥证书来验证服务器的身份并用于加密通信。1.2 介绍下nginx配置文件中参数ssl_certificate和ssl_certificate_key
答案ssl_certificate指向的是“服务端证书”相对路径而ssl_certificate_key指向的是“私钥”相对路径。
1.3介绍下nginx支持的证书类型 目前市面上数字证书可以以多种不同的后缀格式保存常见的包括 PEMPrivacy Enhanced MailPEM 格式是一种常见的 ASCII 编码格式通常用于存储证书、密钥和其他相关数据。PEM 格式的文件通常以 .pem、.cer、.crt 或 .key 结尾。 DERDistinguished Encoding RulesDER 格式是一种二进制编码格式通常用于表示 X.509 数字证书。DER 格式的文件通常以 .der 或 .cer 结尾。 PKCS#12PKCS#12 是一种可将证书和私钥打包成单个加密文件的格式。PKCS#12 格式的文件通常以 .p12 或 .pfx 结尾。 JKSJava KeyStoreJKS 格式是 Java 中用于存储密钥和证书的专有格式。JKS 格式的文件通常以 .jks 结尾。 PFXPersonal Information ExchangePFX 格式与 PKCS#12 格式类似用于将证书和私钥打包成单个文件通常以 .pfx 结尾。 PKCS#7 / P7BPKCS#7 或 P7B 格式通常用于存储证书链它们以二进制格式存储并可以包含多个证书。PKCS#7/P7B 格式的文件通常以 .p7b 或 .p7c 结尾。
这些是常见的数字证书后缀格式每种格式都有其特定的用途和兼容性。在使用数字证书时需要根据具体情况选择合适的格式。
1.4 目前nginx支持哪种证书格式
目前nginx支持的证书格式是.crt或者.pem格式的证书也就是ssl_certificate后面配置的证书格式如果是其他类型证书需要手动转换成.crt或者.pem格式。
1.5 nginx修改配置文件目前方式也会有所不同
方式1最常见的方式ssl_certificate服务端配置证书ssl_certificate_key配置私钥这里差别在证书无论证书中是否包含私钥信息都可以这么配置生效
server_name 10.161.29.209;ssl_certificate CA/server.crt;ssl_certificate_key CA/server_pkcs8.key;方式2ssl_certificate和ssl_certificate_key统一指向服务端配置证书详情请看nginx官网文档和图片这里就要求证书必须包含私钥否则重启nginx会失败会报错找不到或加载不到私钥信息 nginx官网文档 → https://nginx.org/en/docs/http/configuring_https_servers.html 1.6 介绍下不通格式的证书哪些可以包含私钥哪些不能 网上搜到的图片长这样 接下来说下我自己测试后的理解可能会和上面不同也可能相同我没做过对比 .crt格式包含公钥、证书信息可包含或者不包含私钥.pem格式包含公钥、证书信息可包含或者不包含私钥.der格式包含公钥、证书信息默认不包含私钥.p12或者pfx格式包含公钥、证书信息、可包含或者不包含私钥其他格式尚未验证
1.7 创建私钥、证书请求、证书的命令
首先需要安装openSSL使用它可以快速创建私钥、证书请求、证书。 举例创建自签名证书流程 1. 要创建自签名证书你可以使用 OpenSSL 工具。以下是使用 OpenSSL 创建自签名证书的基本步骤
2. 安装 OpenSSL首先确保你的系统上已经安装了 OpenSSL 工具。你可以从 OpenSSL 官方网站或使用包管理器进行安装。
openssl genpkey -algorithm RSA -out private.key这将生成一个名为 private.key 的私钥文件。
3. 生成证书请求接下来使用私钥生成一个证书请求 (CSR) 文件其中包含了公钥和其他相关信息。执行以下命令生成 CSR 文件
openssl req -new -key private.key -out csr.csr在此过程中你将被要求提供一些相关信息如国家/地区、组织名称、通用名称 (域名) 等。请根据实际情况填写这些信息。
4. 生成自签名证书使用以下命令生成自签名证书
openssl x509 -req -in csr.csr -signkey private.key -out certificate.crt这将使用私钥和证书请求生成一个自签名证书文件名为 certificate.crt。
5. 使用证书现在你已经生成了自签名证书 certificate.crt可以将其用于服务器或应用程序的 SSL/TLS 配置中。具体步骤取决于你使用的服务器软件或编程语言。 请注意自签名证书不会被公共信任的根证书颁发机构所信任因此在使用自签名证书时浏览器或客户端可能会显示警告。自签名证书更适合用于测试环境或内部使用而不是用于公共生产环境。
另外请确保妥善保管私钥文件和证书文件以防止未经授权的访问和潜在的安全风险。
1.8 如何区分证书中是否包含私钥信息 举例说明 我拿两个证书文件用记事本打开看效果如图1中“-----BEGIN CERTIFICATE-----”这个开头的就是公钥信息如图2中“-----BEGIN PRIVATE KEY-----”包含的就是私钥信息。最简单的鉴别方式就是用记事本打开看区别当然有的格式是二进制编码打开乱码这时候就需要去服务器指定路径下使用命令去打开证书文件才能看到具体内容区别。 如图1 如图2 1.9 多文件内容合并文件命令操作在windows和linux下不同
在 Windows 上使用type命令
type certificate.pem server_pkcs8.key certificate_with_key.pem这个命令会将 certificate.pem 文件和 server_pkcs8.key 文件的内容连接到一个新文件 certificate_with_key.pem 中。
在类 Unix 系统如 Linux 或 macOS上使用 cat 命令
cat certificate.pem server_pkcs8.key certificate_with_key.pem这个命令也会将 certificate.pem 文件和 server_pkcs8.key 文件的内容连接到一个新文件 certificate_with_key.pem 中。
请确保在命令中替换 certificate.pem 和 server_pkcs8.key 为您实际的证书和私钥文件路径和名称。
这样生成的 certificate_with_key.pem 文件将包含证书和私钥信息。如果您还有其他问题或需要进一步的帮助请告诉我。
1.10 不同格式文件打开查看内容方式
server_pkcs8.key私钥可直接记事本打开 server.csr证书请求文件可直接记事本打开 certificate.crt格式证书可直接记事本打开 certificate.pem格式证书可直接记事本打开 certificate.der格式证书无法直接记事本打开会乱码需要在服务器使用命令打开
命令
openssl x509 -inform DER -in certificate.der -textcertificate.p12格式证书无法直接记事本打开会乱码需要在服务器使用命令打开
命令
openssl pkcs12 -info -in certificate.p12certificate.pfx格式证书跟.p12同理无法直接记事本打开会乱码需要在服务器使用命令打开
命令
openssl pkcs12 -info -in certificate.pfx二、具体实施操作
2.1 针对方式一中nginx分别指定私钥和证书地址 创建不带私钥信息的.crt格式的证书名命令 openssl x509 -req -in server.csr -signkey server_pkcs8.key -out certificate.crt -days 7200创建不带私钥信息的.pem格式的证书名命令 openssl x509 -req -in server.csr -signkey server_pkcs8.key -out certificate.pem -days 7200 -outform PEM创建不带私钥信息的.der格式的证书名命令 openssl x509 -req -in server.csr -signkey server_pkcs8.key -out certificate.der -days 7200 -outform DER2.2 针对方式二中nginx私钥和证书统一指向证书地址 创建带私钥信息的.crt格式的证书名思路将原crt不带私钥的证书文件和私钥合并为一个新文件其中“certificate.crt”代表你原crt文件“server_pkcs8.key”代表私钥“certificate_with_key.crt”代表合并后的文件命令 openssl x509 -req -in server.csr -signkey server_pkcs8.key -out certificate.crt -days 7200
cat certificate.crt server_pkcs8.key certificate_with_key.crt创建带私钥信息的.pem格式的证书名思路crt格式、pem格式、der格式都采用合并文件方式生成新文件命令 openssl x509 -req -in server.csr -signkey server_pkcs8.key -out certificate.pem -days 7200 -outform PEM
cat certificate.pem server_pkcs8.key certificate_with_key.pem创建带私钥信息的.der格式的证书名思路crt格式、pem格式、der格式都采用合并文件方式生成新文件命令 openssl x509 -req -in server.csr -signkey server_pkcs8.key -out certificate.der -days 7200 -outform DER
cat certificate.der server_pkcs8.key certificate_with_key.pem创建带私钥信息的.p12格式的证书名思路它跟crt\pem\der格式不同他采用生成.p12文件后再转换成pem或者crt格式命令 openssl pkcs12 -export -out certificate.p12 -inkey server_pkcs8.key -in certificate.crt
openssl pkcs12 -in certificate.p12 -out p12TransformPemPri.pem -nodes
或者
openssl pkcs12 -in certificate.p12 -out p12TransformPemPri.crt -nodes创建带私钥信息的.pfx格式的证书名思路跟创建.p12相同命令 openssl pkcs12 -export -out certificate.pfx -inkey server_pkcs8.key -in certificate.crt
openssl pkcs12 -in certificate.pfx -out pfxTransformPem.pem -nodes
或者
openssl pkcs12 -in certificate.pfx -out pfxTransformPem.crt -nodes2.3 命令中部分参数介绍
-req生成证书请求CSR。-in指定输入文件或数据。-signkey使用指定的私钥进行签名。-out指定输出文件。-outform指定输出格式。-inform指定输入格式。pkcs12 -export将证书和私钥打包成 PKCS #12 格式。-nokeys在输出中不包括私钥。-CAcreateserial在生成自签名证书时创建一个序列号文件。-text显示证书或 CSR 文件的文本信息。
三、重启nginx验证生效
进入nginx目录
cd /home/ems/3rdparty/nginx/验证nginx.conf 修改是否正确
sbin/nginx -t如果出现 以下内容nginx.conf即是修改正确
nginx: the configuration file /home/ems/3rdparty/nginx/nginx.conf syntax is ok
nginx: configuration file /home/ems/3rdparty/nginx/nginx.conf test is successful重启nginx 等候30s 访问新加的域名即可。
sbin/nginx -s reload