Skip to content

Commit a85d39d

Browse files
committed
Add grpc-ssl-target option to CLI to override SSL target name for gRPC connections
1 parent 65afdaf commit a85d39d

File tree

8 files changed

+46
-9
lines changed

8 files changed

+46
-9
lines changed

CHANGELOG.md

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,10 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
99
### Added
1010
- Upcoming changes...
1111

12+
## [1.25.0] - 2025-06-04
13+
### Added
14+
- Add `grpc-ssl-target` option to CLI to override SSL target name for gRPC connections
15+
1216
## [1.24.0] - 2025-05-28
1317
### Added
1418
- Add `crypto` subcommand to retrieve cryptographic algorithms for the given components
@@ -522,4 +526,5 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
522526
[1.21.0]: https://github.com/scanoss/scanoss.py/compare/v1.20.6...v1.21.0
523527
[1.22.0]: https://github.com/scanoss/scanoss.py/compare/v1.21.0...v1.22.0
524528
[1.23.0]: https://github.com/scanoss/scanoss.py/compare/v1.22.0...v1.23.0
525-
[1.24.0]: https://github.com/scanoss/scanoss.py/compare/v1.23.0...v1.24.0
529+
[1.24.0]: https://github.com/scanoss/scanoss.py/compare/v1.23.0...v1.24.0
530+
[1.25.0]: https://github.com/scanoss/scanoss.py/compare/v1.24.0...v1.25.0

src/scanoss/__init__.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -22,4 +22,4 @@
2222
THE SOFTWARE.
2323
"""
2424

25-
__version__ = '1.24.0'
25+
__version__ = '1.25.0'

src/scanoss/cli.py

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -761,6 +761,12 @@ def setup_args() -> None: # noqa: PLR0912, PLR0915
761761
'"REQUESTS_CA_BUNDLE=/path/to/cacert.pem" and '
762762
'"GRPC_DEFAULT_SSL_ROOTS_FILE_PATH=/path/to/cacert.pem" for gRPC',
763763
)
764+
p.add_argument(
765+
'--grpc-ssl-target',
766+
type=str,
767+
help='Override SSL target name for gRPC connections (optional). '
768+
'Useful when connecting to localhost with a certificate issued for a different domain.',
769+
)
764770

765771
# Global GRPC options
766772
for p in [
@@ -1138,6 +1144,7 @@ def scan(parser, args): # noqa: PLR0912, PLR0915
11381144
ignore_cert_errors=args.ignore_cert_errors,
11391145
proxy=args.proxy,
11401146
grpc_proxy=args.grpc_proxy,
1147+
grpc_ssl_target=args.grpc_ssl_target,
11411148
pac=pac_file,
11421149
ca_cert=args.ca_cert,
11431150
retry=args.retry,
@@ -1617,6 +1624,7 @@ def comp_vulns(parser, args):
16171624
ca_cert=args.ca_cert,
16181625
proxy=args.proxy,
16191626
grpc_proxy=args.grpc_proxy,
1627+
grpc_ssl_target=args.grpc_ssl_target,
16201628
pac=pac_file,
16211629
timeout=args.timeout,
16221630
req_headers=process_req_headers(args.header),
@@ -1652,6 +1660,7 @@ def comp_semgrep(parser, args):
16521660
ca_cert=args.ca_cert,
16531661
proxy=args.proxy,
16541662
grpc_proxy=args.grpc_proxy,
1663+
grpc_ssl_target=args.grpc_ssl_target,
16551664
pac=pac_file,
16561665
timeout=args.timeout,
16571666
req_headers=process_req_headers(args.header),
@@ -1690,6 +1699,7 @@ def comp_search(parser, args):
16901699
ca_cert=args.ca_cert,
16911700
proxy=args.proxy,
16921701
grpc_proxy=args.grpc_proxy,
1702+
grpc_ssl_target=args.grpc_ssl_target,
16931703
pac=pac_file,
16941704
timeout=args.timeout,
16951705
req_headers=process_req_headers(args.header),
@@ -1735,6 +1745,7 @@ def comp_versions(parser, args):
17351745
ca_cert=args.ca_cert,
17361746
proxy=args.proxy,
17371747
grpc_proxy=args.grpc_proxy,
1748+
grpc_ssl_target=args.grpc_ssl_target,
17381749
pac=pac_file,
17391750
timeout=args.timeout,
17401751
req_headers=process_req_headers(args.header),
@@ -1770,6 +1781,7 @@ def comp_provenance(parser, args):
17701781
ca_cert=args.ca_cert,
17711782
proxy=args.proxy,
17721783
grpc_proxy=args.grpc_proxy,
1784+
grpc_ssl_target=args.grpc_ssl_target,
17731785
pac=pac_file,
17741786
timeout=args.timeout,
17751787
req_headers=process_req_headers(args.header),

src/scanoss/components.py

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -50,6 +50,7 @@ def __init__( # noqa: PLR0913, PLR0915
5050
proxy: str = None,
5151
grpc_proxy: str = None,
5252
ca_cert: str = None,
53+
grpc_ssl_target: str = None,
5354
pac: PACFile = None,
5455
req_headers: dict = None,
5556
):
@@ -77,6 +78,7 @@ def __init__( # noqa: PLR0913, PLR0915
7778
api_key=api_key,
7879
ver_details=ver_details,
7980
ca_cert=ca_cert,
81+
grpc_ssl_target=grpc_ssl_target,
8082
proxy=proxy,
8183
pac=pac,
8284
grpc_proxy=grpc_proxy,

src/scanoss/scanner.py

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -96,6 +96,7 @@ def __init__( # noqa: PLR0913, PLR0915
9696
proxy: str = None,
9797
grpc_proxy: str = None,
9898
ca_cert: str = None,
99+
grpc_ssl_target: str = None,
99100
pac: PACFile = None,
100101
retry: int = 5,
101102
hpsm: bool = False,
@@ -169,6 +170,7 @@ def __init__( # noqa: PLR0913, PLR0915
169170
api_key=api_key,
170171
ver_details=ver_details,
171172
ca_cert=ca_cert,
173+
grpc_ssl_target=grpc_ssl_target,
172174
proxy=proxy,
173175
pac=pac,
174176
grpc_proxy=grpc_proxy,

src/scanoss/scanners/container_scanner.py

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -228,6 +228,7 @@ def __init__(
228228
url=config.apiurl,
229229
api_key=config.key,
230230
ca_cert=config.ca_cert,
231+
grpc_ssl_target=config.grpc_ssl_target,
231232
proxy=config.proxy,
232233
pac=config.pac,
233234
grpc_proxy=config.grpc_proxy,

src/scanoss/scanners/scanner_config.py

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -51,6 +51,7 @@ class ScannerConfig:
5151
grpc_proxy: Optional[str] = None
5252

5353
ca_cert: Optional[str] = None
54+
grpc_ssl_target: Optional[str] = None
5455
pac: Optional[PACFile] = None
5556

5657

@@ -69,5 +70,6 @@ def create_scanner_config_from_args(args) -> ScannerConfig:
6970
proxy=getattr(args, 'proxy', None),
7071
grpc_proxy=getattr(args, 'grpc_proxy', None),
7172
ca_cert=getattr(args, 'ca_cert', None),
73+
grpc_ssl_target=getattr(args, 'grpc_ssl_target', None),
7274
pac=getattr(args, 'pac', None),
7375
)

src/scanoss/scanossgrpc.py

Lines changed: 20 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -103,6 +103,7 @@ def __init__( # noqa: PLR0913, PLR0915
103103
trace: bool = False,
104104
quiet: bool = False,
105105
ca_cert: str = None,
106+
grpc_ssl_target: str = None,
106107
api_key: str = None,
107108
ver_details: str = None,
108109
timeout: int = 600,
@@ -132,6 +133,7 @@ def __init__( # noqa: PLR0913, PLR0915
132133
self.timeout = timeout
133134
self.proxy = proxy
134135
self.grpc_proxy = grpc_proxy
136+
self.grpc_ssl_target = grpc_ssl_target
135137
self.pac = pac
136138
self.req_headers = req_headers
137139
self.metadata = []
@@ -171,17 +173,26 @@ def __init__( # noqa: PLR0913, PLR0915
171173
self.provenance_stub = GeoProvenanceStub(grpc.insecure_channel(self.url))
172174
self.scanning_stub = ScanningStub(grpc.insecure_channel(self.url))
173175
else:
176+
channel_options = []
177+
if self.grpc_ssl_target:
178+
channel_options.append(('grpc.ssl_target_name_override', self.grpc_ssl_target))
179+
174180
if ca_cert is not None:
175181
credentials = grpc.ssl_channel_credentials(cert_data) # secure with specified certificate
176182
else:
177183
credentials = grpc.ssl_channel_credentials() # secure connection with default certificate
178-
self.comp_search_stub = ComponentsStub(grpc.secure_channel(self.url, credentials))
179-
self.crypto_stub = CryptographyStub(grpc.secure_channel(self.url, credentials))
180-
self.dependencies_stub = DependenciesStub(grpc.secure_channel(self.url, credentials))
181-
self.semgrep_stub = SemgrepStub(grpc.secure_channel(self.url, credentials))
182-
self.vuln_stub = VulnerabilitiesStub(grpc.secure_channel(self.url, credentials))
183-
self.provenance_stub = GeoProvenanceStub(grpc.secure_channel(self.url, credentials))
184-
self.scanning_stub = ScanningStub(grpc.secure_channel(self.url, credentials))
184+
185+
self.comp_search_stub = ComponentsStub(grpc.secure_channel(self.url, credentials, options=channel_options))
186+
self.crypto_stub = CryptographyStub(grpc.secure_channel(self.url, credentials, options=channel_options))
187+
self.dependencies_stub = DependenciesStub(
188+
grpc.secure_channel(self.url, credentials, options=channel_options)
189+
)
190+
self.semgrep_stub = SemgrepStub(grpc.secure_channel(self.url, credentials, options=channel_options))
191+
self.vuln_stub = VulnerabilitiesStub(grpc.secure_channel(self.url, credentials, options=channel_options))
192+
self.provenance_stub = GeoProvenanceStub(
193+
grpc.secure_channel(self.url, credentials, options=channel_options)
194+
)
195+
self.scanning_stub = ScanningStub(grpc.secure_channel(self.url, credentials, options=channel_options))
185196

186197
@classmethod
187198
def _load_cert(cls, cert_file: str) -> bytes:
@@ -694,6 +705,7 @@ class GrpcConfig:
694705
timeout: Optional[int] = DEFAULT_TIMEOUT
695706
proxy: Optional[str] = None
696707
grpc_proxy: Optional[str] = None
708+
grpc_ssl_target: Optional[str] = None
697709
pac: Optional[PACFile] = None
698710
req_headers: Optional[dict] = None
699711

@@ -710,4 +722,5 @@ def create_grpc_config_from_args(args) -> GrpcConfig:
710722
timeout=getattr(args, 'timeout', DEFAULT_TIMEOUT),
711723
proxy=getattr(args, 'proxy', None),
712724
grpc_proxy=getattr(args, 'grpc_proxy', None),
725+
grpc_ssl_target=getattr(args, 'grpc_ssl_target', None),
713726
)

0 commit comments

Comments
 (0)