标签: self-signed-certificate

为什么 openssl 忽略自签名证书的到期日期 -days?

我有一个生成self-signed证书的 bash 脚本并且运行良好:

#! /bin/bash

# Generate self signed root CA cert
openssl req -nodes -x509 -days 358000 -newkey rsa:2048 -keyout ca.key -out ca.crt -subj "/C=IR/ST=TEH/L=Torento/O=CTO/OU=root/CN=es.example.com/emailAddress=info@example.com"

# Generate server cert to be signed
openssl req -nodes -newkey rsa:2048 -days 358000 -keyout server.key -out server.csr -subj "/C=IR/ST=TEH/L=Torento/O=CTO/OU=server/CN=es.example.com/emailAddress=info@example.com"

# Sign the server cert
openssl x509 -req -in server.csr -CA ca.crt -CAkey ca.key -CAcreateserial -out server.crt

# Create server PEM file
cat server.key server.crt > server.pem


# Generate client cert to …
Run Code Online (Sandbox Code Playgroud)

openssl self-signed-certificate

19
推荐指数
2
解决办法
5万
查看次数

为什么不通过 DNS 记录而不是 letencrypt 来验证自签名证书

我只是想知道。我们使用了很多 SSL 证书。如今,我们几乎只使用letsencrypt(谢谢!)。这些证书的底线是,证书上域名的所有权证明来自操纵这些域下的 DNS 记录或网站的权力。DNS 证明来自向 DNS 添加一些密钥(由letsencrypt 提供)作为 TXT 记录。

那么,如果足以证明能够更改域的 DNS 记录,为什么不使用带有 DNS 指纹的自签名证书呢?

我会说这与基于 DNS 的 letencrypt(和其他 CA)过程完全相同的信任度:

  1. 创建一个自签名 CA(只需按照各种操作方法的步骤操作即可)
  2. 为某些域创建证书
  3. 使用步骤 1 中的 CA 对步骤 2 中的证书进行签名。您现在拥有一个基本证书,由不受信任的 CA 签名
  4. 将 TXT(或专用)记录添加到每个域的 DNS,声明:我们使用此 CA 签署了该域的证书。像:'CA=-CA-的指尖'
  5. 浏览器下载证书并通过将 CA/CA 证书的指纹与给定域的 DNS 中的数据进行比较来验证它。

这将使创建不受第三方干扰的可信自签名证书成为可能,与任何基本 SSL 证书的信任级别相同。只要您可以访问 DNS,您的证书就是有效的。甚至可以添加一些 DNSSEC 之类的加密,从 CA 和 SOA 记录中生成散列,以确保信任在 DNS 记录中的更改时消失。

以前有没有考虑过这个问题?

杰尔默

domain-name-system ssl certificate-authority self-signed-certificate lets-encrypt

17
推荐指数
2
解决办法
2780
查看次数

我为 localhost 创建的自签名 ssl 无法信任,即使我已经将其导入 chrome

我正在创建 https 服务器端,用于练习 Instagram 的 OAuth,这需要 https。

我通过从以下链接运行脚本来使用 ssl 生成证书:https://gist.github.com/bjanderson/075fadfccdd12623ab935e57eff58eb4

脚本运行得很好,我收到了所有预期的文件。我已在受信任的根证书颁发机构下将 ca.crt 导入到我的 chrome 中,但 chrome 仍然不信任它。导入位置是否合适,因为 chrome 有许多不同的部分可以导入 ca.crt。

我收到以下错误:

证书 - 缺少使用者备用名称 此站点的证书不包含包含域名或 IP 地址的使用者备用名称扩展。

证书 - 丢失 该站点缺少有效的、受信任的证书 (net::ERR_CERT_AUTHORITY_INVALID)。

如何解决这两个问题并让我的 Chrome 信任我的自签名证书?

https openssl ssl-certificate certificate-authority self-signed-certificate

11
推荐指数
1
解决办法
2万
查看次数

如何创建比 SHA-1 更强的自签名证书?

对于开发环境,我可以在 IIS7.5 中创建创建自签名证书。但是该证书是 SHA-1 并且最近浏览器都在抱怨它。当我打开 FireBug 时,我看到以下警告:

“该站点使用 SHA-1 证书;建议您使用带有签名算法的证书,这些算法使用比 SHA-1 更强的散列函数。”

所以我的问题是:

1) 有没有办法创建比 SHA-1 更强的自签名证书?

2)如果没有,有没有办法告诉浏览器停止显示这些警告?

更新

我最终使用了@vcsjones 的答案,但这只是到目前为止。在使它工作之前,我必须解决几个问题。

1)由于某种原因,我无法导入带密码的证书。所以我最终创造了一个它没有。

2) 当我通过 IIS 导入 .pfx 证书时,当我尝试在“编辑绑定”中应用新证书时,我不断收到“指定的登录会话不存在”。所以我做了很少的研究,发现这个SO 答案很有用,特别是 Mike L 的答案。

我要补充的另一件事是,当您导入证书时,请记住选择 .pfx 证书。导入向导的默认选择是 *.cer,您可以导入它(我犯了错误),但后来我无法在 IIS 服务器证书中看到证书。当我仔细观察时,图标中缺少小钥匙。现在,我做了研究,我可以通过KB-889651文章修复它。因此,请确保您导入 .pfx,它无需修复即可工作。

另请注意,如果您对此证书存在信任问题,请将其也导入“受信任的根证书颁发机构”。

iis-7.5 self-signed-certificate

8
推荐指数
2
解决办法
1万
查看次数

nginx:未发送客户端证书 CA 名称

我有 nginx 并希望它验证客户端证书。所以我为服务器购买了商业证书,为客户端购买了非商业证书。基本上我已经用easy-rsa脚本生成了客户端证书。连接客户端证书验证禁用按预期工作。连接“ssl_verify_client on;” 失败,代码 400,错误或访问日志中没有信息。

nginx -V 输出:

nginx version: nginx/1.8.0
built with OpenSSL 1.0.2a 19 Mar 2015
TLS SNI support enabled
configure arguments: --prefix=/etc/nginx --conf-path=/etc/nginx/nginx.conf --sbin-path=/usr/bin/nginx --pid-path=/run/nginx.pid --lock-path=/run/lock/nginx.lock --user=http --group=http --http-log-path=/var/log/nginx/access.log --error-log-path=stderr --http-client-body-temp-path=/var/lib/nginx/client-body --http-proxy-temp-path=/var/lib/nginx/proxy --http-fastcgi-temp-path=/var/lib/nginx/fastcgi --http-scgi-temp-path=/var/lib/nginx/scgi --http-uwsgi-temp-path=/var/lib/nginx/uwsgi --with-imap --with-imap_ssl_module --with-ipv6 --with-pcre-jit --with-file-aio --with-http_dav_module --with-http_gunzip_module --with-http_gzip_static_module --with-http_realip_module --with-http_spdy_module --with-http_ssl_module --with-http_stub_status_module --with-http_addition_module --with-http_degradation_module --with-http_flv_module --with-http_mp4_module --with-http_secure_link_module --with-http_sub_module
Run Code Online (Sandbox Code Playgroud)

我的 nginx 配置看起来像这样

server {
    listen                         my.addr.here:443 ssl;

    server_name                    my-server;

    ssl                            on;
    ssl_certificate                /etc/nginx/ssl/my-server.crt;
    ssl_certificate_key            /etc/nginx/ssl/my-server.key;
    ssl_dhparam                    /etc/nginx/ssl/my-server.dhparam;
    ssl_protocols                  TLSv1.1 TLSv1.2;
    ssl_ciphers                    "ECDHE-RSA-AES256-GCM-SHA384:ECDHE-RSA-AES128-GCM-SHA256:DHE-RSA-AES256-GCM-SHA384:DHE-RSA-AES128-GCM-SHA256:ECDHE-RSA-AES256-SHA384:ECDHE-RSA-AES128-SHA256:ECDHE-RSA-AES256-SHA:ECDHE-RSA-AES128-SHA:DHE-RSA-AES256-SHA256:DHE-RSA-AES128-SHA256:DHE-RSA-AES256-SHA:DHE-RSA-AES128-SHA:ECDHE-RSA-DES-CBC3-SHA:EDH-RSA-DES-CBC3-SHA:AES256-GCM-SHA384:AES128-GCM-SHA256:AES256-SHA256:AES128-SHA256:AES256-SHA:AES128-SHA:DES-CBC3-SHA:HIGH:!aNULL:!eNULL:!EXPORT:!DES:!MD5:!PSK:!RC4"; …
Run Code Online (Sandbox Code Playgroud)

nginx openssl ssl-certificate self-signed-certificate

7
推荐指数
1
解决办法
5264
查看次数

如何从我自己的 CA 创建 SSL 证书链?

我使用我自己的 CA 为我的基础设施中的服务创建 SSL 证书。这些证书由我的 CA 直接签署。

在我看来,这可能是一个弱策略,好像证书会被破坏,我需要从一个 CA 创建新的。如果 CA 受到威胁,则游戏结束,因为每个服务都需要更新。

所以我的理解是,“保护”自己和“淡化”关注的典型方法是创建一个证书链,并在链的末端签署服务证书,这样如果签署者受到威胁,下一级可用于创建新的签名证书。

我说得对吗?

我想做的是创建我自己的证书链。

整个 TLS/SSL 的东西对我来说仍然有点模糊,但正如我所见,首先创建一个主密钥,openssl genrsa然后使用该密钥创建一个自签名证书openssl req -x509 -new以创建 CA。

然后我可以使用openssl req -new -key' and sign the request with my CA withopenssl x509 -req -CA ca.pem ...`创建新密钥和证书签名请求

那么,要创建一个证书链,应该怎么做呢?

我是否只需创建一个新密钥、新签名请求,并使用上次签名的证书而不是 CA 对其进行签名?依此类推,直到我有足够的保护级别,然后用最低级别的证书签署所有证书/密钥对?

这些东西令人困惑,我想把它弄对;-)

我发现的关于 TLS 的所有内容都非常复杂,而“简单”教程则晦涩难懂。我正在浏览 openssl 手册页,但我想获得该过程的简单解释,然后我会确保每一步都正确。

感谢您的洞察力。

ssl openssl tls certificate-authority self-signed-certificate

5
推荐指数
1
解决办法
2万
查看次数

无法在 Firefox 中添加自签名证书

我需要设置一个可供少数有限用户访问的 IIS 网络服务器。我正在考虑仅使用自签名证书,并在用户系统上手动安装它。

因此,我使用 IIS 工具生成了证书,将其安装在网络服务器上,并将其导出为 .cer 文件。将其添加到 Windows 设置中的受信任机构与 Internet Explorer 配合良好:它删除了不安全警告。

在 Firefox 中,我无法让它工作。启用 security.enterprise_roots.enabled 选项没有帮助。在 Firefox 证书设置中,我无法将其导入权限面板,我收到一条错误消息:

这不是证书颁发机构证书,因此无法导入到证书颁发机构列表中

我能做什么?我不想在 Firefox 中添加异常,因为它会永久禁用对 URL 的任何证书检查,这意味着任何中间人攻击都变得简单明了。如果服务器上的证书发生变化,我希望用户被阻止访问该网站。

iis certificate https firefox self-signed-certificate

4
推荐指数
1
解决办法
5185
查看次数

openssl 不断创建 v1 证书而不是 v3

地狱大家,

所以我试图为我的域创建一个自签名证书,由于某种原因,openssl 不断为我的服务器创建 V1 证书而不是 V3,这导致浏览器在我在那里时不会给我“绿色锁”。

知道为什么会发生这种情况。

这是我的 server.crt 文件:

Certificate:
    Data:
        Version: 1 (0x0)
        Serial Number:
            30:61:e6:70:fd:e4:c9:f6:23:ed:e1:1c:cd:8c:c9:9e:68:7b:01:cf
        Signature Algorithm: sha256WithRSAEncryption
        Issuer: C = CA, ST = ON, L = Toronto, O = Boss Insights, OU = DevOps, CN = Boss Insights, emailAddress = ghaith@sublimeapp.com
        Validity
            Not Before: Aug 13 14:33:12 2019 GMT
            Not After : Aug 10 14:33:12 2029 GMT
        Subject: C = CA, ST = ON, L = Toronto, O = Boss Insights, OU = DevOps, CN = …
Run Code Online (Sandbox Code Playgroud)

openssl ssl-certificate certificate-authority self-signed-certificate ssl-certificate-errors

4
推荐指数
1
解决办法
2万
查看次数

如何认证自签名 imap 电子邮件服务器

我的任务是使用 Java 从 imaps 电子邮件服务器检索电子邮件,因此作为客户端,我需要使用适当的证书对电子邮件服务器进行身份验证。但是,该电子邮件服务器似乎正在使用默认情况下不包含在信任库(?)中的自签名证书。从我在这里找到的,系统属性javax.net.ssl.trustStorejavax.net.ssl.trustStorePassword需要设置。给出的例子是:

System.setProperty("javax.net.ssl.trustStore","clientTrustStore.key");
System.setProperty("javax.net.ssl.trustStorePassword","qwerty");
Run Code Online (Sandbox Code Playgroud)

我的问题是如何获取此clientTrustStore.key密码和相关密码?鉴于我知道电子邮件服务器的详细信息,这是我可以自己生成的东西,还是应该由维护该电子邮件服务器的 IT 部门提供的东西?

exchange ssl email-server java self-signed-certificate

3
推荐指数
1
解决办法
1387
查看次数

Powershell自签名证书私钥不可导出

我尝试使用 Powershell 创建一个带有可导出私钥的自签名 ssl 证书。我已经阅读并遵循了各种教程,但最终结果始终是没有导出任何私有内容。我使用 Powershell 是因为服务器运行的是 Windows Server 2016 Core 版本。我已尝试从远程计算机使用证书 MMC 控制台,但远程执行此操作时似乎并非所有功能都可用。无论如何,我遵循的各种教程都谈到了导出私钥的能力,但是我还没有找到使这项工作有效的代码的具体示例。这是我一直在尝试的代码:

$todaydt = Get-Date
$5years = $todaydt.AddYears(5)
$selfSignedRootCA = New-SelfSignedCertificate -DnsName SelfSignedRootCA -notafter $5years -CertStoreLocation Cert:\LocalMachine\My\ -KeyExportPolicy Exportable -KeyUsage CertSign,CRLSign,DigitalSignature -KeySpec KeyExchange -KeyLength 2048 -KeyUsageProperty All -KeyAlgorithm 'RSA' -HashAlgorithm 'SHA256' -Provider 'Microsoft Enhanced RSA and AES Cryptographic Provider'
New-SelfSignedCertificate -CertStoreLocation cert:\LocalMachine\My -DnsName "myserver.test" -notafter $5years -Signer $selfSignedRootCA -KeyUsage KeyEncipherment,DigitalSignature
$CertPassword = ConvertTo-SecureString -String "MyPassword" -Force -AsPlainText
Export-PfxCertificate -Cert cert:\LocalMachine\My\REDACTED-THUMBPRINT -FilePath C:\test.pfx -Password $CertPassword
Run Code Online (Sandbox Code Playgroud)

我的研究表明,最常见的原因是创建证书时使用的证书模板不允许导出私钥,因此按照这些建议,我复制了现有的证书模板并确保将其配置为允许导出密钥。但是,我不知道如何/在哪里在上述任何命令中指定新创建的模板。我对这些 cmdlet 的文档的审查没有显示任何这样做的参数。真的很坚持这一点,所以非常感谢任何建议。

powershell ssl private-key self-signed-certificate windows-server-2016

3
推荐指数
1
解决办法
5777
查看次数