如何在本地配置https服务器

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何在本地配置https服务器相关的知识,希望对你有一定的参考价值。

1.找到jdk安装目录,运行控制台,切换到该目录;
2.使用keytool为tomcat生成证书;
keytool -genkey -v -alias tomcat -keyalg RSA -keystore tomcat.keystore -validity 36500
3.为客户端生成证书;
keytool -genkey -v -alias huawei -keyalg RSA -storetype PKCS12 -keystore huaweitest.p12 -validity 36500
4.将huaweitest.p12导入到tomcat的信任证书链中
keytool-export -alias huawei -keystore huaweitest.p12 -storetype PKCS12 -rfc -filehuaweitest.cer
keytool-import -alias huawei -v -file huaweitest.cer -keystore tomcat.keystore
5.从tomcat的证书链里导出跟证书
keytool-export -v -alias tomcat -file CA.cer-keystore tomcat.keystore
6.将华为的outgoing.Cert.pem导入tomcat的信任证书链
keytool -import -v -file outgoing.Cert.pem -alias huawei -keystore tomcat.keystore
7.将华为的ca.pem导入tomcat的信任证书链
keytool -import -v -file ca.pem -alias huawei_ca -keystore tomcat.keystore
8.配置tomcat
双向认证:
<Connector port="28443"
protocol="org.apache.coyote.http11.Http11NioProtocol"
scheme="https" secure="true"
keystoreFile="conf/keys/tomcat.keystore" keystorePass="123$%^"
truststoreFile="conf/keys/tomcat.keystore" truststorePass="123$%^"
clientAuth="true" sslProtocol="TLS"
maxThreads="150" SSLEnabled="true">
单向认证:
<Connector port="28443"
protocol="org.apache.coyote.http11.Http11NioProtocol"
scheme="https" secure="true"
keystoreFile="conf/keys/tomcat.keystore" keystorePass="123$%^"
clientAuth="false" sslProtocol="TLS"
maxThreads="150" SSLEnabled="true">
9.配置完后,可以在本地验证配置是否成功。
在服务器上进行格式转换成pem格式
openssl x509 -inform der -in CA.cer -out ca.pem
通过以下命令模拟与应用服务器建链
单向认证模拟建链:
openssl s_client -connect ip:port -tls1 -CAfile ca.pem
双向认证模拟建链:
openssl s_client -connect ip:port -cert huaweitest.pem -CAfile CA.pem -tls1
10.将生成的huaweitest.p12和CA.cer证书发给华为接口人。
参考技术A 1、确定使用的是独立服务器(云服务器)。
2、登陆淘宝:Gworg 签发机构办理信任度较高的SSL证书。
3、确定好域名后,按照签发机构办理认证手续。
4、拿到证书后根据技术文档部署到服务器即可,当然如果不会部署的话也可以让签发机构部署证书。

如何在sails.js 中配置https

【中文标题】如何在sails.js 中配置https【英文标题】:how to configure https in sails.js 【发布时间】:2013-07-19 07:39:39 【问题描述】:

我正在尝试设置本地 HTTPS 服务器以在 Sails.js 中进行测试?我无法在sails.js 中找到如何做到这一点的任何指针?对于快递,

var express = require('express');
var https = require('https');
var http = require('http');
var fs = require('fs');

// This line is from the Node.js HTTPS documentation.
var options = 
  key: fs.readFileSync('test/fixtures/keys/agent2-key.pem'),
  cert: fs.readFileSync('test/fixtures/keys/agent2-cert.pem')
;

// Create a service (the app object is just a callback).
var app = express();

// Create an HTTP service.
http.createServer(app).listen(80);
// Create an HTTPS service identical to the HTTP service.
https.createServer(options, app).listen(443);

对sails.js 有任何想法吗?

【问题讨论】:

jsbot.io/node/http-and-https-handle-with-sailsjs Check out this answer on *** 【参考方案1】:

对于sails.js 0.10版,在config/locals.js中包含这个(如果locals.js不存在,创建它):

var fs = require('fs');

module.exports = 

    ssl : 
        key: fs.readFileSync('path-to-key.key'),
       cert: fs.readFileSync('path-to-crt.crt')
    

;

来源:https://***.com/a/28565113/2459071

【讨论】:

这适用于 v0.11.2。我要补充一点,如果您希望根据环境对其进行配置,那么此配置可能会在 development.js 或 production.js 中为您提供更好的服务。 Local.js 更多的是意味着开发者的本地环境,永远不会被 subversion 检入。 谢谢@NishchitDhanani! 应该是local.js吗? @AmanGautam。不必要。取决于环境。请参阅 ryanm 之前的评论。【参考方案2】:

如果您使用的是最新的 v0.9(可能还有 v0.8 的某些版本),请查看 config/bootstrap.js 的内部。您应该能够通过sails.express 上下文访问您的快速应用程序。从那里我认为你应该能够用它做你想做的事......

#sailsjs irc 频道中也有人说这对他们有用

module.exports.bootstrap = function (cb) 
    var fs = require('fs');
    sails.config.express.serverOptions = 
        key: fs.readFileSync('ssl/key.pem'),
        cert: fs.readFileSync('ssl/cert.pem')
    ;
    cb();
;

【讨论】:

Kelt,它工作正常。对于本地测试,我们应该使用 8443 而不是 443 以避免一些复杂性。 如果是 .key 和 .cert 文件可以吗?它们需要是 .pems 吗?【参考方案3】:

也许只有我一个人,但我可以让上述任何一个都适用于sails v0.9.7,但我确实通过像这样编辑config/local.js文件让它工作了;

var fs = require('fs');

module.exports =    
  port: process.env.PORT || 1337,
  environment: process.env.NODE_ENV || 'development',

  express:  serverOptions : 
    key: fs.readFileSync('ssl/key.pem'),
    cert: fs.readFileSync('ssl/cert.pem')
    
  
;

现在我并不是说这是执行此操作的“正确”方法,但它对我有用!

无耻的自我宣传 More about this on my blog! 结束无耻的自我宣传:D

【讨论】:

当我尝试连接时,其他两种方法在浏览器上给我一个 SSL 连接错误,但这个工作正常。【参考方案4】:

这项贡献增强了支持原生移动应用程序和旧浏览器的解决方案。

当我只使用现代网络浏览器访问我的 SSL 站点时,这个解决方案对我来说非常有效。但是,当我尝试使用 AFNetworking 库发出请求时,它无法识别 SSL 证书。这是由于 iPhone 应用程序需要中间 SSL 证书(有时称为 ca 包)。

您可以使用以下代码添加中间证书。

express: 
  serverOptions : 
    key: fs.readFileSync('ssl/key.pem'),
    cert: fs.readFileSync('ssl/cert.pem'),
    ca: fs.readFileSync('ssl/intermediate.pem')
  

在创建中间证书(通常可以从您的 SSL 证书提供商处下载)时,确保证书的顺序正确非常重要。 这个 linux 命令确实有助于调试。

openssl s_client -connect yoursite.com:443 -showcerts

【讨论】:

【参考方案5】:

上述不适用于sails v0.9.3。我最终得到了以下解决方法。 (当然首先需要 fs)

express :  serverOptions : 
    key: fs.readFileSync('ssl/server-key.pem'),
    cert: fs.readFileSync('ssl/server-cert.pem'),

【讨论】:

【参考方案6】:

我在生产 Sails 应用程序(v0.11.x 和 v0.12.x)中也遇到过此类问题。 Android 发行版 apk 无法连接到 Sails 应用程序,并且一些旧版本的浏览器不接受带有 Web 应用程序的 SSL 证书。

我遇到了一些中间证书错误,如下所示

The certificate is not trusted in all web browsers. You may need to install an Intermediate/chain certificate to link it to a trusted root certificate.

终于找到了解决办法

ssl: 
      ca: require('fs').readFileSync('ssl/intermediate.crt', 'utf8').toString(),
      key: require('fs').readFileSync('ssl/example_com.key', 'utf8').toString(),
      cert: require('fs').readFileSync('ssl/main.crt', 'utf8').toString()

我希望这会对某人有所帮助。

【讨论】:

以上是关于如何在本地配置https服务器的主要内容,如果未能解决你的问题,请参考以下文章

如何在服务器上搭建git服务及上传本地代码

配置https local本地开发环境

如何在本地搭建微信小程序服务器

搭建https本地服务器:如何得到被所有客户端认可的ssl证书

如何在sails.js 中配置https

Ecplise 配置本地 https 测试