我使用 typeorm cli 创建了一个示例 typeorm 项目,默认情况下它具有 ormconfig.json:
{
"type": "postgres",
"host": "localhost",
"port": 5432,
"username": "postgres",
"password": "postgres",
"database": "test",
"synchronize": false,
"entities": [
"src/entity/**/*.ts"
],
"migrations": [
"database/migrations/**/*.ts"
],
"subscribers": [
"src/subscriber/**/*.ts"
],
"cli": {
"entitiesDir": "src/entity",
"migrationsDir": "database/migrations",
"subscribersDir": "src/subscriber"
}
}
Run Code Online (Sandbox Code Playgroud)
这是目录结构:
-database
-migrations
-src
-entity
-ormconfig.json
Run Code Online (Sandbox Code Playgroud)
这会在 database/migrations 文件夹中正确创建迁移,并从中执行迁移。
我用以下 ormconfig.ts 替换了 ormconfig.json :
export default {
type: 'postgres',
host: 'localhost',
port: 5432,
username: 'postgres',
password: 'postgres',
database: 'test',
synchronize: false,
"entities": [
"src/entity/**/*.ts"
],
"migrations": …Run Code Online (Sandbox Code Playgroud) 我对打破单元测试的功能进行了一些更改.以前我有一个包含函数request_url的common.py:
import requests
def request_url(method, url):
return _request_url(method, url)
def _request_url(method, url):
return requests.request(method, url)
Run Code Online (Sandbox Code Playgroud)
这是测试:
@mock.patch("requests.request", autospec=True)
def test_request_url_200(self, mock_request):
response = mock.MagicMock()
response.status_code = 200
method = mock.sentinel.method
path = "url"
result = common.request_url(
method,
path
)
self.assertListEqual([
mock.call(
mock.sentinel.method,
"url"
),
], list(mock_request.mock_calls))
self.assertListEqual([mock.call.raise_for_status()], list(response.mock_calls))
self.assertEqual(mock_request.return_value, result)
Run Code Online (Sandbox Code Playgroud)
在功能发生变化之后,我首先发起了一个会话,安装了一个TLS适配器,然后调用会话的请求函数,而不是简单地调用requests.request:
def _request_url(method, url):
session = requests.session()
adapter = TlsAdapter(ssl.OP_NO_TLSv1 | ssl.OP_NO_TLSv1_1)
session.mount("https://", adapter)
return response = session.request(method, url)
Run Code Online (Sandbox Code Playgroud)
在这里,我不确定如何完全模拟session.request,因为这可以通过session变量获得.我尝试修补requests.session.request,但这在这里不起作用.
有谁知道如何嘲笑这个功能?
谢谢!
我在客户端上使用 Python 请求与服务器建立 TLS 连接。这是我正在使用的代码:
import ssl
import requests
from requests.adapters import HTTPAdapter
from requests.packages.urllib3.poolmanager import PoolManager
from requests.packages.urllib3.util import ssl_
CIPHERS = (
'RSA+AES'
)
class TlsAdapter(HTTPAdapter):
def __init__(self, ssl_options=0, **kwargs):
self.ssl_options = ssl_options
super(TlsAdapter, self).__init__(**kwargs)
def init_poolmanager(self, *pool_args, **pool_kwargs):
ctx = ssl_.create_urllib3_context(ciphers=CIPHERS, cert_reqs=ssl.CERT_REQUIRED, options=self.ssl_options)
print(ssl.PROTOCOL_TLS)
self.poolmanager = PoolManager(*pool_args,
ssl_context=ctx,
**pool_kwargs)
session = requests.session()
adapter = TlsAdapter(ssl.OP_NO_TLSv1 | ssl.OP_NO_TLSv1_1)
session.mount("https://", adapter)
r = session.request('GET', 'https://awesome.com', verify='/etc/ssl/certs/ca-certificates.crt')
print(r)
Run Code Online (Sandbox Code Playgroud)
当我在 Wireshark 中检查客户端 hello 消息时,我在客户端提供的密码列表中看到了一个额外的密码“TLS_EMPTY_RENEGOTIATION_INFO_SCSV”。
谁能告诉我这个密码是什么以及它有什么作用?有没有办法从客户端问候消息中发送的密码列表中删除它?
我尝试查找此问题,但找不到合适的答案。
谢谢!
我试图通过CRL或OCSP在我的python 3.6代码中(使用请求库)实施证书吊销检查:
import ssl
import requests
from requests.adapters import HTTPAdapter
from requests.packages.urllib3.poolmanager import PoolManager
from requests.packages.urllib3.util import ssl_
CIPHERS = (
'RSA+AES'
)
class TlsAdapter(HTTPAdapter):
def __init__(self, ssl_options=0, **kwargs):
self.ssl_options = ssl_options
super(TlsAdapter, self).__init__(**kwargs)
def init_poolmanager(self, *pool_args, **pool_kwargs):
ctx = ssl_.create_urllib3_context(ciphers=CIPHERS, cert_reqs=ssl.CERT_REQUIRED, options=self.ssl_options)
# ctx.verify_flags = ssl.VERIFY_CRL_CHECK_CHAIN
self.poolmanager = PoolManager(*pool_args,
ssl_context=ctx,
**pool_kwargs)
session = requests.session()
adapter = TlsAdapter(ssl.OP_NO_TLSv1 | ssl.OP_NO_TLSv1_1)
session.mount("https://", adapter)
r = session.request('GET', 'https://awesome.com', verify='/etc/ssl/certs/ca-certificates.crt')
print(r)
Run Code Online (Sandbox Code Playgroud)
根据我对CRL和OCSP所做的研究(请参阅此处和此处),Python中没有内置的机制可以用CRL实现证书吊销检查。可以利用ssl.VERIFY_CRL_CHECK_CHAIN,但也希望我们在客户端上手动提供crl文件,效率不是很高。作为参考,Windows上的WinHTTP库自动提取证书中的所有crl路径,并自动检查它们是否证书已被吊销。
但是,我找不到太多信息,是否在Python 3.6中是否支持OSCP检查,以及是否可以通过内置方法或第三方包轻松实现?理想情况下,Python中是否存在可以自动从服务器证书中提取crl服务器/ ocsp响应程序,然后联系相应服务以验证证书是否已被撤销的解决方案?
多谢你们!
我正在尝试在 Python 的 ssl 模块中实现 FIPS_mode 和 FIPS_mode_set 函数,因为默认情况下它们不存在。由于各种使用原因,Python 3.4的补丁已经提交并被拒绝。
使用该补丁作为灵感,我进行了一些修改并在ssl.py 中添加了以下代码:
try:
from _ssl import FIPS_mode, FIPS_mode_set
except ImportError:
pass
Run Code Online (Sandbox Code Playgroud)
_ssl.c 中的以下代码:
#define EXPORT_FIPSMODE_FUNCS
#ifdef EXPORT_FIPSMODE_FUNCS
static PyObject *
_ssl_FIPS_mode_impl(PyObject *module) {
return PyLong_FromLong(FIPS_mode());
}
static PyObject *
_ssl_FIPS_mode_set_impl(PyObject *module, int n) {
if (FIPS_mode_set(n) == 0) {
_setSSLError(ERR_error_string(ERR_get_error(), NULL) , 0, __FILE__, __LINE__);
return NULL;
}
Py_RETURN_NONE;
}
#endif //EXPORT_FIPSMODE_FUNCS
/* List of functions exported by this module. */
static PyMethodDef PySSL_methods[] = …Run Code Online (Sandbox Code Playgroud) 我有以下代码,其中有两个函数返回两种不同类型的对象(InterfaceA 和 InterfaceB)
现在,当我对它们调用 Promise.all 时,我无法定义 Promise 变量的类型,所以我必须使用 any 。
interface InterfaceA {
value: string;
}
interface InterfaceB {
value: number;
}
const returnA = (): Promise<InterfaceA> => {
const obj: InterfaceA = {
value: 'a'
};
return Promise.resolve(obj);
};
const returnB = (): Promise<InterfaceB> => {
const obj: InterfaceB = {
value: 1
};
return Promise.resolve(obj);
};
const promises: any = [returnA(), returnB()];
const res = await Promise.all(promises);
console.log(res)
const objA: InterfaceA = res[0];
Run Code Online (Sandbox Code Playgroud)
问题是,一旦我得到 Promise.all 的响应,并尝试定义响应的类型,我会收到以下错误:
Type '{}' …Run Code Online (Sandbox Code Playgroud) 我有一个 Python 应用程序,它与 Python 和 Libcrypto 以及 LibSSL 共享对象一起打包。该应用程序是使用 Openssl Fips Module 2.0 构建的。Python 的请求模块和 urllib3 在后台使用这些共享对象来发出 TLS 请求。
我在构建应用程序的环境中启用了OPENSSL_FIPS标志。现在,如果要检查共享对象是否在我将它们从开发环境中取出并放入另一台机器时启用了 fips 模式,我该怎么做?
如何检查 fips 模式是否启用?如果不是,我如何为这些共享对象启用 fips 模式?
可能有帮助的其他详细信息:
OpenSSL 版本:1.0.2h(从源代码构建)
Fips 模块:2.0.12(从源代码构建)
蟒蛇:3.6
操作系统:Ubuntu 16.04 LTS
如果需要任何其他详细信息,请告诉我。
谢谢!
python ×5
python-3.x ×4
ssl ×4
javascript ×2
node.js ×2
typescript ×2
ctypes ×1
fips ×1
mocking ×1
openssl ×1
tls1.2 ×1
typeorm ×1
unit-testing ×1