我一直在尝试通过 SSL 连接到 LDAPS 服务器 (Active Directory) 以使其正常工作,但一直遇到问题。我尝试使用这个:
openssl s_client -connect the.server.edu:3269
Run Code Online (Sandbox Code Playgroud)
结果如下:
verify error:num=20:unable to get local issuer certificate
Run Code Online (Sandbox Code Playgroud)
我想,好吧,服务器是几年前的旧生产服务器。也许 CA 不存在。然后我将输出中的证书提取到 pem 文件中并尝试:
openssl s_client -CAfile mycert.pem -connect the.server.edu:3269
Run Code Online (Sandbox Code Playgroud)
这也不起作用。
我错过了什么?这不应该总是有效吗?
# LDAPTLS_CACERTDIR=/etc/ssl/certs/ ldapwhoami -x -ZZ -H ldaps://ldap.domain.tld
ldap_start_tls: Can't contact LDAP server (-1)
additional info: TLS error -8172:Peer's certificate issuer has been marked as not trusted by the user.
# openssl s_client -connect ldap.domain.tld:636 -CApath /etc/ssl/certs
<... successful tls negotiation stuff ...>
Compression: 1 (zlib compression)
Start Time: 1349994779
Timeout : 300 (sec)
Verify return code: 0 (ok)
---
Run Code Online (Sandbox Code Playgroud)
openssl似乎认为证书没问题,但是openldap的库(pam_ldap表现出类似的行为,这就是我陷入困境的方式)不同意。
我究竟做错了什么?
我希望配置 OpenSSL,以便在运行openssl req -new以生成新的证书签名请求时,系统会提示我将任何备用主题名称包含在 CSR 中。
我已将此行添加到[req_attributes]我的部分openssl.cnf:
subjectAltName = Alternative subject names
Run Code Online (Sandbox Code Playgroud)
这具有预期的效果,现在在生成 CSR 时会提示我输入 SAN:
$ openssl req -new -out test.csr -key ./test.key <<<
You are about to be asked to enter information that will be incorporated
into your certificate request.
What you are about to enter is what is called a Distinguished Name or a DN.
There are quite a few fields but you can leave some blank
For some fields there …Run Code Online (Sandbox Code Playgroud) 我想知道如何手动(使用 openssl 而不是 puppet ca 命令)创建 Puppet 可以使用的 CA?目标是编写此类 CA 的脚本,以将它们部署在多个 puppetmaster 上,而不是通过 puppet cert 命令在它们上创建证书。
关于如何做到这一点的任何想法?我只能找到类似的东西:https : //wiki.mozilla.org/ReleaseEngineering/PuppetAgain/HowTo/Set_up_a_standalone_puppetmaster 但它无法工作 - 在创建 CA 和客户端证书并将它们应用到 puppetmaster 之后,它抱怨:
Feb 16 09:35:20 test puppet-master[81728]: Could not prepare for execution: The certificate retrieved from the master does not match the agent's private key.
Feb 16 09:35:20 test puppet-master[81728]: Certificate fingerprint: 4F:08:AE:01:B9:14:AC:A4:EA:A7:92:D7:02:E9:34:39:1C:5F:0D:93:A0:85:1C:CF:68:E4:52:B8:25:D1:11:64
Feb 16 09:35:20 test puppet-master[81728]: To fix this, remove the certificate from both the master and the agent and then start a …Run Code Online (Sandbox Code Playgroud) 我有一个运行 Apache 2.2.22 和 mod_ssl 和 OpenSSL v1.0.1 的 Ubuntu 12.04.2 LTS 服务器。
在我的虚拟主机配置(一切在其中表现为我所期望的),我有SSLProtocol跟线-all +SSLv3。
通过这种结构,TLS 1.1和1.2都启用并正确的工作-这是反直觉和我说话,我会认为只有SSLv3的将被启用考虑到的配置。
我可以很好地启用/禁用 TLSv1 -/+TSLv1,并且它按预期工作。但是+/-TLSv1.1并且+/-TLSv1.2不是有效的配置选项 - 所以我不能那样禁用它们。
至于我为什么要这样做 - 我正在处理一个第三方应用程序(我无法控制),它在启用 TLS 的服务器上有一些错误行为,我需要完全禁用它才能继续前进。
我在 Mac OS X 10.9 上使用 openssl 为 Windows Server 远程桌面服务生成自签名证书。
使用下面的命令我可以生成证书,
openssl req -x509 -nodes -days 365 -newkey rsa:4096 -keyout myserver.key -out myserver.crt
Run Code Online (Sandbox Code Playgroud)
但是,我需要添加一个扩展的密钥用法字符串服务器身份验证 (1.3.6.1.5.5.7.3.1)并且我无法弄清楚如何在上面的命令中执行此操作。
我曾尝试将 openssl 选项-extfile与包含此文件的文件一起使用,
[= default ]
extendedKeyUsage = 1.3.6.1.5.5.7.3.1
Run Code Online (Sandbox Code Playgroud)
但是,我收到“未找到-extfile 选项”的错误消息
我正在生成一个自签名 SSL 证书:
$ openssl req -x509 -newkey rsa:2048 -subj 'CN=example.com'
Run Code Online (Sandbox Code Playgroud)
我还想在创建时指定一个subjectAltName,但我无法在 openssl 联机帮助页中找到有关如何执行此操作的信息。
我有一个如下所示的 PEM 文件:
-----BEGIN CERTIFICATE-----
...
-----END CERTIFICATE-----
Run Code Online (Sandbox Code Playgroud)
我可以转换到另一种使用PEM文件:openssl x509 -in key.crt -pubkey -noout。新的 PEM 文件现在看起来像:
-----BEGIN PUBLIC KEY-----
...
-----END PUBLIC KEY-----
Run Code Online (Sandbox Code Playgroud)
我的问题是,这两个文件有什么区别?
我有一个 bit9 服务器,我对环境和证书还很陌生。上传证书的区域显示“从 PKCS12 文件导入服务器证书”
我将只使用自签名证书(我希望它没问题),并且我正在运行以下命令来执行此操作。
openssl req -x509 -newkey rsa:4096 -keyout bit9.pem -out cert.pem -days 365
Run Code Online (Sandbox Code Playgroud)
这是我应该做的,如果是这样,我如何将它放到 PKCS12 文件中?
我一直在环顾四周,发现以下命令:
将 PEM 证书文件和私钥转换为 PKCS#12
openssl pkcs12 -export -out <certificate.pfx> -inkey <privateKey.key> -in <certificate.crt> -certfile <CACert.crt>
Run Code Online (Sandbox Code Playgroud)
由于我只有一个 pem 文件……我不知道该怎么做。
我为我们公司的一些内部服务创建了一个自签名的根证书颁发机构,我自己配置了它(主要通过 HTTPS 提供服务)。然后我为这些服务创建了证书,并使用此 CA 签名。
现在我想向根 CA 添加一个 x509 扩展(CRL 分发点),而不会使从此 CA 颁发的现有服务器证书无效。这可能吗?
我的直觉是“是”,因为据我所知,访问相应的私钥对于证书身份的“完全授权”是必要和充分的。也就是说,除非在生成证书时(可能)将某种随机数与公钥一起合并到证书中。
我对 SSL 证书管理还是很陌生,但我(认为我)了解标准信任链的基础知识。我也很熟悉其他 PKI 加密的基本使用:我管理 SSH 密钥并使用 GPG 进行签名和加密。我学的是计算机科学,虽然我只是一个自学的密码学涉猎者。
我从未为原始 IIRC 制作过 CSR(我认为它是 的直接输出openssl req -new -x509)。当然,我仍然拥有原始 CA 的私钥,并且使用它我能够将原始证书“反转”为证书签名请求:
openssl x509 -x509toreq -in MyCA.pem -out MyCA.csr -signkey private/MyCA.key
我希望这会有效地“提取”上面提到的随机数,并允许我重新创建证书,但这次使用一个crlDistributionPoints字段,因此所有使用原始 CA 签名的证书仍将针对此新 CA 进行验证,但例外客户端将从字段中指定的 HTTP URL 检索我的(当前为空的)CRL 文件。
所以我做了一个扩展配置文件ext.conf:
[ cert_ext ]
subjectKeyIdentifier=hash
crlDistributionPoints=URI:http://security.mycompany.co.za/root.crl
Run Code Online (Sandbox Code Playgroud)
我从 CSR 生成了新版本的根 CA:
openssl x509 -extfile ./ext.conf -extensions cert_ext -req -signkey private/MyCA.key -in …Run Code Online (Sandbox Code Playgroud) openssl ×10
ssl ×5
certificate ×4
tls ×2
apache-2.2 ×1
centos ×1
mac-osx ×1
mod-ssl ×1
nginx ×1
openldap ×1
public-key ×1
puppet ×1