将 SSL 证书转移到新服务器

将 SSL 证书转移到新服务器

我们正在从 OSCommerce 网站切换到 Magento,并且也在切换服务器。旧服务器在 Apache 上,而新服务器在 NGINX 上。我们拥有的 SSL 证书似乎是从 GODADDY 购买的。

我几乎已经弄清楚如何将 SSL 证书从旧服务器转移到新服务器。但是有几个问题?

1. 重新密钥证书

我从旧的 OSCommerce 站点 apache 虚拟主机中发现了三种类型的 SSL 文件:

SSLCertificateFile /etc/apache2/ssl/11-2013/09********ss.crt
SSLCertificateKeyFile /etc/apache2/ssl/11-2013/server.key
SSLCertificateChainFile /etc/apache2/ssl/11-2013/gd_bundle.crt

我可以将它们复制到新服务器上的某个位置并在 NGINX 配置文件中引用它们吗?还是我需要生成一个新的 SSL 密钥?重新密钥crt文件(哪一个)?

2. NGINX 配置 NGINX的配置好像只需要引用两个文件Apache呢?

# Specify path to your SSL certificates.
#ssl_certificate /etc/nginx/certificates/yourcertificate.crt;
#ssl_certificate_key /etc/nginx/certificates/yourcertificate.key;

我应该为 NGINX 引用哪个 CRT 文件,另一个呢?

3. SSL 3.0 和 SHA1 当我检查我们的网站时DigiCert 的 SSL 检查器它说:

协议支持

TLS 1.0,SSL 3.0

SSL 3.0 是一个过时的协议版本,具有已知漏洞。

SSL 证书

通用名称 = ourdomain.com

主题备用名称 = ourdomain.com、www.ourdomain.com

发行者 = Go Daddy 安全认证机构

序列号 = *****************

SHA1 指纹 = ****************************

密钥长度 = 4096 位

签名算法 = SHA1 + RSA(已弃用)

安全重新协商:支持

我如何确保我们使用正确的协议和 SHA?这是我在新的 nginx 配置文件中更改的内容吗?

答案1

ssl_certificate_key应该包含当前 server.key 中的内容,即服务器未加密的私钥。

ssl_certificate应包含服务器的证书和证书链,如文档中所述以该顺序。所以,这基本上就是cat 09********ss.crt gd_bundle.crt

一个方便的在线工具可以快速检查每个块到底-----BEGIN CERTIFICATE-----包含-----END CERTIFICATE-----什么https://www.sslshopper.com/certificate-decoder.html- 如果你有一台安装了 openssl 的机器,你当然可以使用

openssl x509 -in certificate.crt -text -noout

关于 SSL/TLS 配置,我喜欢这个Mozilla wiki 中的页面。它解释了您可能遇到的大多数首字母缩略词,并给出了有关合理配置的合理建议。有一个附带的在线工具,可以为 Apache、nginx、haproxy 和 AWS LB 创建参考设置,这里。例如,使用中间配置文件的 OCSP 装订和 HSTS 的完整 nginx 配置如下所示,但你需要明白这些资料是不断发展的因此应定期更新。

server {
    listen 443 ssl;

    # certs sent to the client in SERVER HELLO are concatenated in ssl_certificate
    ssl_certificate /path/to/signed_cert_plus_intermediates;
    ssl_certificate_key /path/to/private_key;
    ssl_session_timeout 1d;
    ssl_session_cache shared:SSL:50m;

    # Diffie-Hellman parameter for DHE ciphersuites, recommended 2048 bits
    ssl_dhparam /path/to/dhparam.pem;

    # intermediate configuration. tweak to your needs.
    ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
    ssl_ciphers 'ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-AES256-GCM-SHA384:DHE-RSA-AES128-GCM-SHA256:DHE-DSS-AES128-GCM-SHA256:kEDH+AESGCM:ECDHE-RSA-AES128-SHA256:ECDHE-ECDSA-AES128-SHA256:ECDHE-RSA-AES128-SHA:ECDHE-ECDSA-AES128-SHA:ECDHE-RSA-AES256-SHA384:ECDHE-ECDSA-AES256-SHA384:ECDHE-RSA-AES256-SHA:ECDHE-ECDSA-AES256-SHA:DHE-RSA-AES128-SHA256:DHE-RSA-AES128-SHA:DHE-DSS-AES128-SHA256:DHE-RSA-AES256-SHA256:DHE-DSS-AES256-SHA:DHE-RSA-AES256-SHA:AES128-GCM-SHA256:AES256-GCM-SHA384:AES128-SHA256:AES256-SHA256:AES128-SHA:AES256-SHA:AES:CAMELLIA:DES-CBC3-SHA:!aNULL:!eNULL:!EXPORT:!DES:!RC4:!MD5:!PSK:!aECDH:!EDH-DSS-DES-CBC3-SHA:!EDH-RSA-DES-CBC3-SHA:!KRB5-DES-CBC3-SHA';
    ssl_prefer_server_ciphers on;

    # HSTS (ngx_http_headers_module is required) (15768000 seconds = 6 months)
    add_header Strict-Transport-Security max-age=15768000;

    # OCSP Stapling ---
    # fetch OCSP records from URL in ssl_certificate and cache them
    ssl_stapling on;
    ssl_stapling_verify on;

    ## verify chain of trust of OCSP response using Root CA and Intermediate certs
    ssl_trusted_certificate /path/to/root_CA_cert_plus_intermediates;

    resolver <IP DNS resolver>;

    ....
}

一旦所有一切都准备就绪并经过测试,请前往ssllabs并运行测试。如果您遗漏了某些内容,您将看到还需要做什么。

答案2

  1. 第一部分:

    SSLCertificateFile /etc/apache2/ssl/11-2013/09********ss.crt
    

这是您网站的公共证书。这是您将重新密钥以将 SHA1 更改为 SHA2

SSLCertificateKeyFile /etc/apache2/ssl/11-2013/server.key

这是您的网络服务器的私人证书。

SSLCertificateChainFile /etc/apache2/ssl/11-2013/gd_bundle.crt

这是中间证书包,用于将您的 Web 服务器证书汇总到 godaddy 的根颁发机构(因为默认情况下,浏览器不一定信任它们的根证书)

  1. 这给出了有关如何配置 NGINX 以使用中间证书链的说明(您很可能需要这样做,因为您需要在 Apache 服务器上这样做):nginx 文档:配置 HTTPS 服务器

  2. 您不会在 NGINX 配置文件中更改证书配置。一旦证书具有功能,您就可以在配置文件中关闭和打开这些功能(根据 fvu 的回答),但首先您需要基本上“升级”证书本身。GoDaddy 有几篇文章可能对此有帮助,第一篇仅描述了您在进行此更改时所做的事情: https://www.godaddy.com/help/rekey-certificate-4976 第二部分告诉你如何使用他们的服务来实际做到这一点: https://www.godaddy.com/help/rekey-certificate-4976

完成所有准备工作后,您可以使用 ssllabs 进行测试,但只有当您的新网站在 DNS 中的正确主机名上启动并运行时,这才会起作用(如果您在完成之前仍需要将网站运行在 Apache 上,则可能不想这样做)。假设您在 Linux/Unix 计算机上拥有 root 权限,则可以使用 openssl 进行测试:

  1. 输入新 NGINX 服务的 IP 地址作为要测试的站点的名称。这样您的主站点就会保留在 Apache 上,您只需告诉本地计算机在 NGINX 站点上找到它即可。完成此操作后,运行以下命令并查看其输出的内容:

    openssl s_client -connect hostname:port
    

或者使用此命令,它会直接指向您正在检查的内容: https://stackoverflow.com/questions/26473076/how-do-i-check-if-my-ssl-certificate-is-sha1-or-sha2-on-the-commandline

相关内容