我先解释一下我的问题.我从CA购买了证书,并使用以下格式生成csr和私钥:
openssl req -new -newkey rsa:2048 -nodes -keyout server.key -out server.csr
Run Code Online (Sandbox Code Playgroud)
当我打开server.key文件时,我看到它以"----- BEGIN PRIVATE KEY -----"开头
我在我的服务器上使用SSL证书,一切看起来都很好.
现在我想将相同的证书上传到AWS IAM,以便我可以将它用于beanstalk负载均衡器.我使用此aws文档中的以下命令http://docs.aws.amazon.com/IAM/latest/UserGuide/InstallCert.html#SubmitCSRCertAuth
iam-servercertupload -b public_key_certificate_file -k privatekey.pem -s certificate_object_name
Run Code Online (Sandbox Code Playgroud)
我根据需要更改了证书文件名,但不断收到此错误:"400 MalformedCertificate Invalid Private Key".
有趣的是,在aws doc页面上,他们显示的示例私钥以"-------开始RSA私钥--------"开头
有没有办法使用openssl将我的私钥转换为RSA私钥?
我正在尝试在我在Amazon AWS上设置的新负载均衡器上安装GoDaddy SSL证书.我最初在Godaddy使用keytool程序在Glassfish 3.1服务器(Amazon linux ami)上直接安装创建了证书.我没有问题直接在服务器上进行设置.我现在需要将证书从Web服务器移动到新的负载均衡器.亚马逊要求私钥和证书采用PEM格式,因此我使用GoDaddy的"重定密钥"工具来创建新的证书.当我在AWS Mgmt Console的负载均衡器设置屏幕中加载它们时,我收到错误消息:"公钥证书和私钥不匹配."
以下是我创建密钥的方法:
$ openssl genrsa -des3 -out private.key 2048
$ openssl req -new -key private.key -out apps.mydomain.com.csr
Run Code Online (Sandbox Code Playgroud)
然后我在"重定密钥"过程中将.csr文件提交给GoDaddy.重新生成密钥后,我下载了2个新创建的证书(apps.mydomain.com.crt和gd_bundle.crt).我下载它们选择(Apache)作为服务器的类型(我也试过"其他"和"Cpanel",但所有看起来都是一样的).
此时,我使用以下命令从private.key文件中删除加密:
$ openssl rsa -in private.key -out private.pem
Run Code Online (Sandbox Code Playgroud)
此时,我将返回AWS Mgmt控制台,创建负载均衡器,添加安全服务器重定向,并将以下文件的内容放在屏幕上的相应字段中,并要求设置ssl证书:
private.pem --> Private Key
apps.mydomain.com.crt --> Public Key Certificate
gd_bundle.crt --> Certificate Chain
Run Code Online (Sandbox Code Playgroud)
当我单击"继续按钮"时,出现错误"错误:公钥证书和私钥不匹配".
- 有没有办法我可以测试我从亚马逊收到有效的错误消息?当我非常密切地关注GoDaddy的指令时,我觉得钥匙不匹配似乎很奇怪.
我在创建.csr之前尝试创建没有RSA加密的private.key文件,这似乎没有任何区别.
我也假设我从GoDaddy下载的.crt文件是.PEM格式,但我不知道如何验证这一点.
有任何想法吗?
我无法设置SSL.我用谷歌搜索了一些解决方案,但没有一个能为我工作.我需要一些帮助...
这是我尝试重新启动nginx时出现的错误:
root@s17925268:~# service nginx restart
Restarting nginx: nginx: [emerg] SSL_CTX_use_PrivateKey_file("/etc/nginx/conf.d/ssl/ssl.key") failed (SSL: error:0B080074:x509 certificate routines:X509_check_private_key:key values mismatch)
nginx: configuration file /etc/nginx/nginx.conf test failed
Run Code Online (Sandbox Code Playgroud)
我的证书来自StartSSL,有效期为1年.
这是我测试的内容:
我还检查了模数,我得到了密钥和证书的不同模数.
谢谢您的帮助.:)
如何在两种公钥格式之间进行转换,一种格式为:
-----BEGIN PUBLIC KEY-----
...
-----END PUBLIC KEY-----
Run Code Online (Sandbox Code Playgroud)
另一种格式是:
-----BEGIN RSA PUBLIC KEY-----
...
-----END RSA PUBLIC KEY-----
Run Code Online (Sandbox Code Playgroud)
例如,我使用ssh-keygen命令生成了id_rsa/id_rsa.pub对,我使用以下方法计算了id_rsa中的公钥:
openssl rsa -in id_rsa -pubout -out pub2
Run Code Online (Sandbox Code Playgroud)
然后我再次使用以下方法从id_rsa.pub计算公钥:
ssh-keygen -f id_rsa.pub -e -m pem > pub1
Run Code Online (Sandbox Code Playgroud)
pub1的内容是:
-----BEGIN RSA PUBLIC KEY-----
MIIBCgKCAQEA61BjmfXGEvWmegnBGSuS+rU9soUg2FnODva32D1AqhwdziwHINFa
D1MVlcrYG6XRKfkcxnaXGfFDWHLEvNBSEVCgJjtHAGZIm5GL/KA86KDp/CwDFMSw
luowcXwDwoyinmeOY9eKyh6aY72xJh7noLBBq1N0bWi1e2i+83txOCg4yV2oVXhB
o8pYEJ8LT3el6Smxol3C1oFMVdwPgc0vTl25XucMcG/ALE/KNY6pqC2AQ6R2ERlV
gPiUWOPatVkt7+Bs3h5Ramxh7XjBOXeulmCpGSynXNcpZ/06+vofGi/2MlpQZNhH
Ao8eayMp6FcvNucIpUndo1X8dKMv3Y26ZQIDAQAB
-----END RSA PUBLIC KEY-----
Run Code Online (Sandbox Code Playgroud)
而pub2的内容是:
-----BEGIN PUBLIC KEY-----
MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA61BjmfXGEvWmegnBGSuS
+rU9soUg2FnODva32D1AqhwdziwHINFaD1MVlcrYG6XRKfkcxnaXGfFDWHLEvNBS
EVCgJjtHAGZIm5GL/KA86KDp/CwDFMSwluowcXwDwoyinmeOY9eKyh6aY72xJh7n
oLBBq1N0bWi1e2i+83txOCg4yV2oVXhBo8pYEJ8LT3el6Smxol3C1oFMVdwPgc0v
Tl25XucMcG/ALE/KNY6pqC2AQ6R2ERlVgPiUWOPatVkt7+Bs3h5Ramxh7XjBOXeu
lmCpGSynXNcpZ/06+vofGi/2MlpQZNhHAo8eayMp6FcvNucIpUndo1X8dKMv3Y26
ZQIDAQAB
-----END PUBLIC KEY-----
Run Code Online (Sandbox Code Playgroud)
根据我的理解,pub1和pub2包含相同的公钥信息,但它们的格式不同,我想知道如何在两种格式之间进行转换?任何人都可以向我展示两种格式的简明介绍吗?
我在Debian 6.0 32位服务器上配置SSL时遇到问题.我对SSL比较新,所以请耐心等待.我尽可能多地提供信息.
注意:已更改真实域名以保护服务器的标识和完整性.
服务器正在使用nginx运行.它配置如下:
ssl_certificate /usr/local/nginx/priv/mysite.ca.chained.crt;
ssl_certificate_key /usr/local/nginx/priv/mysite.ca.key;
ssl_protocols SSLv3 TLSv1 TLSv1.1 TLSv1.2;
ssl_ciphers HIGH:!aNULL:!MD5;
ssl_verify_depth 2;
Run Code Online (Sandbox Code Playgroud)
我使用此处描述的方法链接了我的证书
cat mysite.ca.crt bundle.crt > mysite.ca.chained.crt
Run Code Online (Sandbox Code Playgroud)
mysite.ca.crt签名机构给我的证书在哪里,我的签字机构bundle.crt也发给我的是CA证书.问题是我没有直接从GlobalSign购买SSL证书,而是通过我的托管服务提供商Singlehop购买.
证书在Safari和Chrome上正确验证,但在Firefox上验证不正确.初步搜索显示它可能是CA的问题.
我探讨了类似问题的答案,但无法找到解决方案,因为我真的不明白每个证书的用途.
我使用openssl的s_client来测试连接,并收到输出,这似乎表明与类似问题相同的问题.错误如下:
depth=0 /OU=Domain Control Validated/CN=*.mysite.ca
verify error:num=20:unable to get local issuer certificate
verify return:1
depth=0 /OU=Domain Control Validated/CN=*.mysite.ca
verify error:num=27:certificate not trusted
verify return:1
Run Code Online (Sandbox Code Playgroud)
可以在此处找到openssl响应的完整详细信息(证书和不必要的信息被截断).
我也看到了警告:
No client certificate CA names sent
Run Code Online (Sandbox Code Playgroud)
这可能是问题所在吗?如何确保nginx发送这些CA名称?
我试图通过直接从GlobalSign下载根CA来解决问题,但收到了同样的错误.我使用update-ca-certificates命令在我的Debian服务器上更新了根CA ,但没有任何改变.这可能是因为从我的提供商发送的CA是正确的,因此它导致证书被链接两次,这没有帮助.
0 s:/OU=Domain …Run Code Online (Sandbox Code Playgroud) 我按照本教程在Windows上创建签名SSL证书用于开发目的,并且它适用于我的一个域(我使用hosts文件来模拟dns).然后我发现我有很多子域名,为每个子域名创建证书会很麻烦.所以我尝试使用wildcard in Commonfield 创建证书,如serverfault的一些答案所示.像这样:
Common Name: *.myserver.net/CN=myserver.net
Run Code Online (Sandbox Code Playgroud)
但是,在将此证书导入受信任的根证书颁发机构后,我NET::ERR_CERT_COMMON_NAME_INVALID在Chrome中遇到了主要域及其所有子域的错误,例如:https://sub1.myserver.net和https://myserver.net.
这台服务器无法证明它是myserver.net; 其安全证书来自*.myserver.net/CN = myserver.net.
这可能是由于配置错误或攻击者拦截您的连接造成的.
Common Name字段中是否有错误导致此错误?
我正在尝试安装一个软件,它使用cmake来安装自己,当我在commandlin cmake上给它时..
它在这个文件中给出了以下错误,CMakeLists.txt -------- line ---> find_package(需要OpenSSL): -
cmake ..
-- Could NOT find Git (missing: GIT_EXECUTABLE)
ZLib include dirs: /usr/include
ZLib libraries: /usr/lib/arm-linux-gnueabihf/libz.so
Compiling with SSL support
CMake Error at /usr/local/share/cmake-2.8/Modules/FindPackageHandleStandardArgs.cmake:97 (message):
Could NOT find OpenSSL, try to set the path to OpenSSL root folder in the
system variable OPENSSL_ROOT_DIR (missing: OPENSSL_LIBRARIES
OPENSSL_INCLUDE_DIR)
Call Stack (most recent call first):
/usr/local/share/cmake-2.8/Modules/FindPackageHandleStandardArgs.cmake:291 (_FPHSA_FAILURE_MESSAGE)
/usr/local/share/cmake-2.8/Modules/FindOpenSSL.cmake:313 (find_package_handle_standard_args)
CMakeLists.txt:436 (find_package)
Run Code Online (Sandbox Code Playgroud)
这是文件CMakeLists.txt的一部分,其中出现错误:------
#
# OpenSSL
#
if (WITH_SSL)
message("Compiling with SSL support")
if (USE_CYASSL)
# …Run Code Online (Sandbox Code Playgroud) 我正在使用MacOS X 10.7.5,由于握手失败,我需要更新的OpenSSL版本.互联网上有几个教程,我尝试了以下内容:
brew install openssl
brew link openssl --force
Run Code Online (Sandbox Code Playgroud)
然而,它不起作用:
openssl version
OpenSSL 0.9.8r 8 Feb 2011
brew unlink openssl && brew link openssl --force
Unlinking /usr/local/Cellar/openssl/1.0.1e... 1139 links removed
Linking /usr/local/Cellar/openssl/1.0.1e... 1139 symlinks created
Run Code Online (Sandbox Code Playgroud)
SVN问题也未解决.有任何想法吗?我宁愿不尝试MacPorts方式,因为它可能会干扰Homebrew.
为了生成32个字符的令牌以访问我们目前使用的API,我们目前使用:
$token = md5(uniqid(mt_rand(), true));
Run Code Online (Sandbox Code Playgroud)
我已经读过这种方法不是加密安全的,因为它基于系统时钟,这openssl_random_pseudo_bytes将是一个更好的解决方案,因为它更难预测.
如果是这种情况,等效代码会是什么样的?
我推测这样的事情,但我不知道这是不对的......
$token = md5(openssl_random_pseudo_bytes(32));
Run Code Online (Sandbox Code Playgroud)
我应该传递给函数的长度是多少?
使用此命令生成私钥时
genrsa -out my-prvkey.pem 1024
Run Code Online (Sandbox Code Playgroud)
它会抛出如下错误
Loadind'screen'进入随机状态-done生成RSA私钥,1024位长模数................................ ......... ++++++++++++++++++++++++++++++++++++++ ++无法写'随机状态'e为65537(0*10001)
这在创建公共证书时会出现任何问题.我在Windows中运行此命令.任何人都可以帮我修复吗?