小编Jac*_*ack的帖子

SSL和公钥安全性

我正在使用带有SSL的HTTP从Android设备上使用Web服务.自签名(不受信任)证书用于客户端身份验证.

我对如何使用公钥/私钥进行SSL的一般性了解.根据我的理解,我可以清楚地看到如何使用证书来建立安全连接并安全地传输数据.但是我不明白它们如何用于客户端身份验证,因为证书包含公钥并且不保密.

我有几个问题:

我在哪里可以阅读有关SSL和证书如何用于客户端身份验证的信息?

即使证书未公开......通过在浏览器中访问HTTPS URL,我可以查看并保存证书.然后,我可以将证书打包到密钥库中,并从应用程序中使用它.

Jeremy Huiskamp 在这篇文章中写道

客户端身份验证将在服务器请求时自动执行

...所以客户端身份验证以及数据加密可以使用证书执行吗?

编辑回答我的问题的第一部分:客户端密钥库不仅应包含服务器的公钥,还应包含客户端的私钥.然后服务器必须能够使用客户端的公钥解密?这是否意味着密钥库应该有两个证书?

ssl ssl-certificate

6
推荐指数
1
解决办法
8084
查看次数

Stackdriver Log Agent - 与用于 Docker 的 Google Cloud Logging 驱动程序无关的日志级别

TL,博士;在使用Google Cloud Logging 驱动程序的 Docker 容器中使用CloudLoggingHandler 进行 Stackdriver日志记录 API 调用时,将忽略日志级别。

细节; 从 Google Compute Engine 上运行的 Docker 容器获取日志的推荐方法是使用Stackdriver Logging Agent

最佳做法是在所有 VM 实例上运行 Stackdriver Logging 代理。该代理可在 Linux 和 Windows 下运行。要安装 Stackdriver Logging 代理,请参阅安装日志代理。

以下步骤已成功完成:

  • 确保 Compute Engine 默认服务帐号具有EditorLogs Writer角色。
  • 确保 VM 实例具有 Stackdriver Logging API(完整)的 Cloud API 访问范围
  • 安装启动Stackdriver Logging Agent。

然后我从 Google 的Cloud Platform Python docs复制了示例CloudLoggingHandler 示例

import logging
import google.cloud.logging …
Run Code Online (Sandbox Code Playgroud)

docker google-cloud-platform stackdriver google-cloud-stackdriver

6
推荐指数
1
解决办法
1143
查看次数

将proto缓冲区转换为ProtoRPC

在Python脚本中mylibrary.py,我使用Protocol Buffers来使用以下方法对数据建模:

  • 在.proto文件中定义消息格式.
  • 使用协议缓冲区编译器.
  • 使用Python协议缓冲区API来编写和读取.py模块中的消息.

我想实现在App Engine云端点框架imports和使用上述Python脚本,但是云端点使用ProtoRPC的,不是"标准" 协议缓冲区.

我的App Engine Python模块从而不是使用'offline' 编译器main.py导入以生成序列化和反序列化代码:protorpcprotoc

from protorpc import messages
from protorpc import remote
Run Code Online (Sandbox Code Playgroud)

消息使用.proto文件定义.而是定义类,继承自protorpc.messages.Message:

class MyMessageDefinition(messages.Message)
Run Code Online (Sandbox Code Playgroud)

Proto Buffers可以转换为Proto RPC等价物吗?我真的不想改为mylibrary.py使用ProtoRPC,因为它不像Protocol Buffers那样通用.

python google-app-engine protocol-buffers protorpc

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

CSS Flexbox 响应式布局和 % 宽度

使用angular/flex-layout,我有一个简单的两列布局。

<div fxFlex fxLayout="row">
    <div fxFlex="35%">
        <!-- Left Column -->
    </div>
    <div fxFlex="65%">
        <!-- Right Column -->
    </div>
</div>
Run Code Online (Sandbox Code Playgroud)

在小显示器上,我希望列环绕在左下方。

使用 angular/flex-layout 的响应式 API,我fxLayout.sm="column"在容器元素上为小屏幕(600px 和 959px 之间)添加了一个断点:

<div fxFlex fxLayout="row" fxLayout.sm="column">
    <div fxFlex="35%">
        <!-- Left Column, Top Row -->
    </div>
    <div fxFlex="65%">
        <!-- Right Column, Bottom Row -->
    </div>
</div>
Run Code Online (Sandbox Code Playgroud)

在小屏幕上,左列成为顶行,右列成为底行。

但是,fxFlex="35%"fxFlex="65%"属性仍然受到尊重,因此行重叠。顶行占据了显示高度的35% ,因为它之前占据了显示宽度的35% 。

请参阅此 Plunker以获取问题示例。请注意,我使用fxLayout.xs断点而不是fxLayout.sm演示问题,因为 Plunker 将显示分成小部分。

我可以通过fxFlex …

css flexbox angular-flex-layout angular

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

Python 协议缓冲区中是否有映射字段的复制构造函数?

Python Generated Code解释了Python中 protobuf映射字段的大多数用例,但没有解释如何将一个映射复制到另一个映射。

给定简单地图

message Src {
    map<string, string> properties = 1;
    ...
}

message Dst {
    map<string, string> properties = 1;
    ...
}
Run Code Online (Sandbox Code Playgroud)

您无法为嵌入的消息字段分配值,因此无需执行以下操作:

# Will not work.
dst = Dst()
dst.properties = src.properties
Run Code Online (Sandbox Code Playgroud)

也没有CopyFrom的实现,因为 map 本身不是一条消息,它是消息中的一个字段。

# Will not work.
dst = Dst()
dst.properties.CopyFrom(src.properties)
Run Code Online (Sandbox Code Playgroud)

我也无法复制整个消息,因为我只想要地图。

# Copies unwanted fields!
dst = Dst()
dst.CopyFrom(src)
Run Code Online (Sandbox Code Playgroud)

我希望我不必遍历所有键并一一分配!

# Iterate over map keys
for key in src.properties:
    dst.properties[key] = src.properties[key]
Run Code Online (Sandbox Code Playgroud)

python protocol-buffers

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

如何在 Docker 和 Google Cloud Builds 中使用 gRPC Python 插件?

TL,博士;

  • 生成 API 描述符文件时,哪种 Linux Docker 映像运行 Python gRPC 插件最快/最轻?
  • 前面提到的 API 描述符是否应该成为 Cloud Build工件并保存到 Cloud Storage Bucket 中?
    • ...为了用于gcloud将 API 部署到 Cloud Endpoints。

细节

我在Google Compute Engine上运行的 Docker 容器中运行Python gRPC 服务和 ESP 。关于 gRPC > API 管理显示了我的应用程序架构图:

在此处输入图片说明

我的高级构建步骤:


1)使用 protoc 协议缓冲区编译器创建描述符文件, api_descriptor.pb

python -m grpc_tools.protoc \
    --include_imports \
    --include_source_info \
    --proto_path=. \
    --descriptor_set_out=api_descriptor.pb \
    --python_out=generated_pb2 \
    --grpc_python_out=generated_pb2 \
    bookstore.proto
Run Code Online (Sandbox Code Playgroud)

2) 使用 gcloud 命令行工具部署 proto …

python docker google-cloud-platform gcloud google-cloud-build

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

部署 Google Cloud Endpoints 配置未通过 Google API Linter 建议

更新: Cloud Endpoints Portal 已被弃用,2023 年 3 月 21 日后将不再可用。


按照部署端点配置后,我已成功部署编译.proto文件和 gRPC API 配置文件。

伟大的。我决定做一个好公民,并在我.proto.

这导致了许多包含各种注释的建议。注释需要新的proto导入;

syntax = "proto3";
package api.v1;

// Request message for Get method.
message GetFooRequest {
  // The field will contain name of the resource requested.
  string name = 1;
}

...blah,blah
Run Code Online (Sandbox Code Playgroud)

syntax = "proto3";
package api.v1;

import "google/api/annotations.proto";
import "google/api/client.proto";
import "google/api/field_behavior.proto";
import "google/api/resource.proto";

// Request message for Get method.
message GetFooRequest { …
Run Code Online (Sandbox Code Playgroud)

protocol-buffers google-cloud-endpoints google-cloud-platform grpc google-api-linter

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

如何在 Go 中使用协议缓冲区 FieldMask

Python 生成的代码列出了众所周知的类型,但Go 生成的代码中没有等效的类型。我假设如果有的话,它会记录这个包google.golang.org/protobuf/types/known

具体来说,我正在寻找有关FieldMask. 虽然它在Go 生成的代码中完全不存在,但我确实在go.dev上找到了它(https://pkg.go.dev/google.golang.org/protobuf/types/known/fieldmaskpb)。

问题

FieldMask的 Python 实现提供了一个MergeMessage函数,可以合并FieldMask从源到目标中指定的字段。这在API 更新操作中非常有用,因为您可以轻松合并 2 个原始消息,同时遵循FieldMask

# get field mask and message from request
updated_message = request.message
field_mask      = request.mask

# load original message from database 
original_message = read_from_db(request.id)

# source, destination
field_mask.MergeMessage(updated_message, original_message)

# original_message is now updated according to the field mask
Run Code Online (Sandbox Code Playgroud)

Go 中是否有等效的便利函数?如果不是,应该如何使用 合并原始消息FieldMask?有我可以遵循的参考实现或示例吗?FieldMask我在 …

python api-design go protocol-buffers grpc-go

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

将 gRPC 错误代码映射到 HTTP 错误代码

我的 Web 应用程序向可扩展服务代理(ESP) 发出 HTTP 请求,后者又委托给gRPC 服务器(用 Python 编写)。忽略Android和iOS客户端,架构是:

在此输入图像描述

ESP 是一个nginx 反向代理

gRPC 服务器(参考架构中的“您的代码”)可能会引发异常,在这种情况下,我使用context.abort引发异常并以非正常状态终止 RPC:

try:
  # Do something that could fail.
except ValueError as e:
  context.abort(grpc.StatusCode.DATA_LOSS, str(e))
Run Code Online (Sandbox Code Playgroud)

虽然可以使用set_codeset_details,但它们仍然会导致 HTTP 状态为 200 OK。

有两个问题:

  1. gRPC状态代码由 ESP 容器(nginx 代理)转换为通用500 Internal Server Error.

  2. 随附的详细信息已被删除。

  3. 2. 组合意味着 Web 客户端至多有一个500 Internal Server Error针对gRPC 服务器引发的所有异常的情况。

最终,我不明白如何将更多信息(理想情况下,自定义)错误返回给网络客户端。

python google-cloud-platform nginx-reverse-proxy grpc-python

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

将 Firebase App Check 调试提供程序与 Angular 结合使用

这与如何在 Angular 中初始化 Firebase 应用程序检查不重复,因为我可以使用 reCAPTCHA Enterprise 成功初始化应用程序。这个问题是关于使用调试提供程序初始化应用程序。

Firebase文档建议在从本地主机进行测试时使用调试提供程序。具体来说

self.FIREBASE_APPCHECK_DEBUG_TOKEN在调试版本中,在初始化 App Check 之前设置为 true 来启用调试模式 。例如:

self.FIREBASE_APPCHECK_DEBUG_TOKEN = true;
initializeAppCheck(app, { /* App Check options */ });
Run Code Online (Sandbox Code Playgroud)

如何在 Angular 应用程序中实现这一点?目前尚不清楚self引用了什么或该代码片段应放置在何处。

javascript firebase firebase-app-check

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