我有一个生成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) 我只是想知道。我们使用了很多 SSL 证书。如今,我们几乎只使用letsencrypt(谢谢!)。这些证书的底线是,证书上域名的所有权证明来自操纵这些域下的 DNS 记录或网站的权力。DNS 证明来自向 DNS 添加一些密钥(由letsencrypt 提供)作为 TXT 记录。
那么,如果足以证明能够更改域的 DNS 记录,为什么不使用带有 DNS 指纹的自签名证书呢?
我会说这与基于 DNS 的 letencrypt(和其他 CA)过程完全相同的信任度:
这将使创建不受第三方干扰的可信自签名证书成为可能,与任何基本 SSL 证书的信任级别相同。只要您可以访问 DNS,您的证书就是有效的。甚至可以添加一些 DNSSEC 之类的加密,从 CA 和 SOA 记录中生成散列,以确保信任在 DNS 记录中的更改时消失。
以前有没有考虑过这个问题?
杰尔默
domain-name-system ssl certificate-authority self-signed-certificate lets-encrypt
我正在创建 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
对于开发环境,我可以在 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,它无需修复即可工作。
另请注意,如果您对此证书存在信任问题,请将其也导入“受信任的根证书颁发机构”。
我有 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) 我使用我自己的 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
我需要设置一个可供少数有限用户访问的 IIS 网络服务器。我正在考虑仅使用自签名证书,并在用户系统上手动安装它。
因此,我使用 IIS 工具生成了证书,将其安装在网络服务器上,并将其导出为 .cer 文件。将其添加到 Windows 设置中的受信任机构与 Internet Explorer 配合良好:它删除了不安全警告。
在 Firefox 中,我无法让它工作。启用 security.enterprise_roots.enabled 选项没有帮助。在 Firefox 证书设置中,我无法将其导入权限面板,我收到一条错误消息:
这不是证书颁发机构证书,因此无法导入到证书颁发机构列表中
我能做什么?我不想在 Firefox 中添加异常,因为它会永久禁用对 URL 的任何证书检查,这意味着任何中间人攻击都变得简单明了。如果服务器上的证书发生变化,我希望用户被阻止访问该网站。
地狱大家,
所以我试图为我的域创建一个自签名证书,由于某种原因,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
我的任务是使用 Java 从 imaps 电子邮件服务器检索电子邮件,因此作为客户端,我需要使用适当的证书对电子邮件服务器进行身份验证。但是,该电子邮件服务器似乎正在使用默认情况下不包含在信任库(?)中的自签名证书。从我在这里找到的,系统属性javax.net.ssl.trustStore和javax.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 部门提供的东西?
我尝试使用 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
openssl ×5
ssl ×4
https ×2
certificate ×1
email-server ×1
exchange ×1
firefox ×1
iis ×1
iis-7.5 ×1
java ×1
lets-encrypt ×1
nginx ×1
powershell ×1
private-key ×1
tls ×1